Changes between Version 27 and Version 28 of SoclibCourseTp5


Ignore:
Timestamp:
Dec 16, 2010, 12:48:52 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp5

    v27 v28  
    1212= 2 Outil GDB Server =
    1313
    14 L'outil '''GDB Server''' permet d'analyser finement le comportement d'une application logicielle multi-threads s'exécutant sur une architecture matérielle multi-processeur  modélisée avec SoCLib.
     14L'outil '''GDB Server''' permet d'analyser le comportement d'une application logicielle multi-threads s'exécutant sur une architecture matérielle multi-processeur  modélisée avec SoCLib.
    1515
    1616Cet outil permet à un client GDB (voir [http://www.gnu.org/software/gdb/ Gnu GDB]) s'exécutant sur n'importe quelle station de travail de prendre le contrôle du simulateur d'une plate-forme matérielle modélisée avec SoCLib.
     
    2020Le GDB Server permet:
    2121 * de poser des points d'arrêt dans le programme en cours d'exécution
    22  * d'exécuter le programme pas à pas
     22 * d'exécuter le programme pas à pas (instruction par instruction)
    2323 * de visualiser le contenu des registres de n'importe quel processeur
    2424 * de visualiser la valeur stockée à n'importe quelle adresse dans l'espace adressable
     
    3434Il faut remplacer l'instanciation habituelle du processeur:
    3535{{{
    36 VciXcacheWrapper<vci_param, Mips32ElIss> cpu0("cpu0", ...);
     36VciXcacheWrapper<vci_param, Mips32ElIss> proc("proc", ...);
    3737}}}
    3838par une instanciation faisant appel au GDB Server
    3939{{{
    40 VciXcacheWrapper<vci_param, GdbServer<Mips32ElIss> > cpu0("cpu0", ...);
    41 }}}
    42 
    43 Le GDB server est donc un pseudo-composant matériel, qui s'interface entre le processeur et le cache.
    44 En prenant le contrôle du GDB Server (par l'intermédiaire du client GDB), on peut donc contrôler le processeur
    45 (pour le faire fonctionnner en pas à pas par exemple), et on peut également contrôler le reste du système
    46 (en effectuant directement des commandes de lecture ou d'écriture vers la mémoire).
     40VciXcacheWrapper<vci_param, GdbServer<Mips32ElIss> > proc("proc", ...);
     41}}}
     42
     43Le GDB server est un pseudo-composant matériel, qui s'interface entre le processeur et le cache.
     44En prenant le contrôle du GDB Server (par l'intermédiaire du client GDB), on peut donc faire deux choses :
     45 * contrôler le processeur (pour le faire fonctionnner en pas à pas par exemple),
     46 * contrôler le reste du système (en effectuant directement des commandes de lecture ou d'écriture vers la mémoire).
     47
     48[[Image(soclib_tp4_gdb.png)]]
    4749
    4850Il ne fautpas oublier d'inclure le "header" dans la top-cell
     
    5860== 2.2 lancement de la simulation ==
    5961
    60 Pour utiliser GDB Server, il est généralement préférable de lancer le simulateur dans un mode où la plate-forme est "gelée",
    61 et attend la connexion du GDB Server. Cela peut être réalisé en définissant la variable d'environnement SOCLIB_GDB avant de lancer le simulateur :
    62 {{{
    63 $ export SOCLIB_GDB=START_FROZEN
     62Pour utiliser GDB Server, il est généralement préférable de lancer le simulateur dans un mode où le processeur est "gelé".
     63Dans ce mode, le GDB serveur ne transmet aucune requêtedu processeur vers le cache, et attend la connexion du client GDB. Cela peut être réalisé en définissant la variable d'environnement SOCLIB_GDB avant de lancer le simulateur :
     64{{{
     65$ export SOCLIB_GDB=F
    6466$ ./simulator.x
    6567}}}
     68Lorsqu'on a fini d'utiliser le GDB server, et qu'on veut revenir dans le mode ou le simulateur démarre normalement, il faut re-modifier la variable d'environnement:
     69{{{
     70$ export SOCLIB_GDB=
     71}}}
    6672
    6773== 2.3 lancement du client GDB ==
    6874
    69 Une fois que le simulateur est lancé, il faut lancer (dans une autre fenêtre), l'exécution du client GDB adapté au type de processeur instancié dans la plate-forme, en lui passant en argument le nom du fichier contenant le code binaire exécuté par les processeurs de l'architecture. Pour un processeur MIPS32:
     75Une fois que le simulateur est lancé, il faut lancer dans une autre fenêtre, l'exécution du client GDB adapté au type de processeur instancié dans la plate-forme, en lui passant en argument le nom du fichier contenant le code binaire exécuté par les processeurs de l'architecture. Pour un processeur MIPS32:
    7076{{{
    7177mipsel-unknown-elf-gdb  soft/bin.soft
     
    156162Cette commande écrit la valeur val (de type int) à l'adresse 0x400000.
    157163
     164L'archive [attachment:soclib_tp5.tgz soclib_tp3.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.
     165Créez un répertoire de travail spécifique TP5, recopiez l'archive dans ce répertoire TP5, et décompressez-la:
     166{{{
     167$ tar xzvf soclib_tp3.tgz
     168}}}
     169
     170== 2.9 Travail à réaliser ==
     171
     172On va dans  utiliser  l'architecture mono-processeur du TP4,
     173sur laquelle on exécutera l'application logicielle "Hello Word!". Mais deux ''bugs'' ont été volontairement introduit dans le logiciel, et l'objet de cette première partie est de localiser et de corriger ces deux ''bugs'', en utilisant l'outil '''GDB Server'''.
     174
     175Commencer par vous placer dans le répertoire '''soft''', et lancez le Makefile pour générer le fichier '''bin.soft''', ainsi que le
     176fichier '''bin.soft.txt''' qui contient la version désassemblée (lisible) du logiciel embarqué.
     177
     178Lancez l'exécution du simulateur dans une première fenêtre... et constatez que vous n'obtenez pas le résultat attendu.
     179
     180Modifiez le fichier '''tp4_top.cpp''' et le fichier '''tp5.desc''' pour introduire le GDB Server dans l'architecture comme indiqué ci-dessus.
     181Regénérez le simulateur en utilisant soclib-cc. Définissez la variable d'environnement SOCLIB_GDB.
     182Lancez l'exécution du simulateur dans une première fenêtre de travail.
     183
     184Ouvrez dans une seconde fenêtre le fichier '''bin.soft.txt''', de façon à pouvoir suivre - instruction par instruction -
     185le programme en cours d'exécution, depuis la première instruction du code de boot (adresse Oxbfc00000).
     186
     187Lancez le client GDB dans une troisième fenêtre, connectez-le au simulateur et désactivez le mécanisme de blocage sur Exceptions Interruptions et Trappes, en utilisant les deux commandes décrites plus haut. Commencez à exécuter le programme instruction par instruction  avec la commande ''stepi''. Le premier  dysfonctionnement apparaît assez rapidement...
     188
     189Quand  les deux bugs ont été localisés et corrigés, vous pouvez attaquer l'étape suivante.
     190
    158191= 3 Architectures Clusterisées =
    159192
     
    174207 * D'un point de vue électrique, le découpage en clusters permet de résoudre en partie les problèmes d'horlogerie, puisque chaque cluster peut être implanté dans un domaine d'horloge séparé (approche GALS : Globally Asynchronous / Locally Synchronous). Le franchissement des frontières d'horlogre est alors la responsabilité du micro-réseau assurant les communications inter-clusters.
    175208
     209== 3.1 structuration des adresses ==
     210
    176211Pour faciliter le décodage des adresses, on décompose les bits de poids fort de l'adresse VCI en deux champs GADR et LADR, de telle sorte que le décodage du champs GADR définisse complêtement le numéro du cluster cible.
    177212Le décodage du champs LADR permet lui de déterminer l'index local de la cible dans un cluster.
    178213Le nombre de bits des champs GADR et LADR est une caractéristique de chaque architecture.
    179214 || GADR || LADR ||  OFFSET  ||
    180 Cette organisation hiérarchique à deux niveaux impose évidemment que les valeurs des champs GADR des segments associés aux cibles d'un même cluster soient égales entre elles (ou appartiennent à un même ensemble de valeurs caractéristiques de ce cluster)
    181 
    182 = 4 Travail à réaliser =
    183 
    184 L'archive [attachment:soclib_tp5.tgz soclib_tp3.tgz] contient différents fichiers dont vous aurez besoin pour ce TP.
    185 Créez un répertoire de travail spécifique TP5, recopiez l'archive dans ce répertoire TP5, et décompressez-la:
    186 {{{
    187 $ tar xzvf soclib_tp3.tgz
    188 }}}
    189 
    190 == 4.1 GDB Server ==
    191 
    192 On va dans un premier temps utiliser une architecture mono-processeur plus simple que celle modélisée dans le TP4,
    193 sur laquelle on exécutera l'application logicielle "Hello Word!". Mais deux ''bugs'' ont été volontairement introduit dans le logiciel, et l'objet de cette première partie est de localiser et de corriger ces deux ''bugs'', en utilisant l'outil '''GDB Server'''.
    194 
    195 [[Image(soclib_tp4_cluster.png)]]
    196 
    197 Commencer par vous placer dans le répertoire '''soft''', et lancez le Makefile pour générer le fichier '''bin.soft''', ainsi que le
    198 fichier '''bin.soft.txt''' qui contient la version désassemblée (lisible) du logiciel embarqué.
    199 
    200 Lancez l'exécution du simulateur dans une première fenêtre... et constatez que vous n'obtenez pas le résultat attendu.
    201 
    202 Modifiez le fichier '''tp4_top.cpp''' et le fichier '''tp5.desc''' pour introduire le GDB Server dans l'architecture comme indiqué ci-dessus.
    203 Regénérez le simulateur en utilisant soclib-cc. Définissez la variable d'environnement SOCLIB_GDB.
    204 Lancez l'exécution du simulateur dans une première fenêtre de travail.
    205 
    206 Ouvrez dans une seconde fenêtre le fichier '''bin.soft.txt''', de façon à pouvoir suivre - instruction par instruction -
    207 le programme en cours d'exécution, depuis la première instruction du code de boot (adresse Oxbfc00000).
    208 
    209 Lancez le client GDB dans une troisième fenêtre, connectez-le au simulateur et désactivez le mécanisme de blocage sur Exceptions Interruptions et Trappes, en utilisant les deux commandes décrites plus haut. Commencez à exécuter le programme instruction par instruction  avec la commande ''stepi''. Le premier  dysfonctionnement apparaît assez rapidement...
    210 
    211 Quand  les deux bugs ont été localisés et corrigés, vous pouvez attaquer l'étape suivante.
    212 
    213 == 4.2 architecture à 4 clusters ==
     215Cette organisation hiérarchique à deux niveaux impose évidemment que les valeurs des champs GADR des adresses de base des segments associés aux cibles d'un même cluster soient égales entre elles (ou appartiennent à un même ensemble de valeurs caractéristiques de ce cluster)
     216
     217== 3.2 architecture à 4 clusters ==
    214218
    215219On souhaite maintenant modéliser une architecture quadri-processeurs structurée en quatre clusters presque identiques,
    216 Chaque cluster contiendra un processeur MIPS32, un composant ICU, et une mémoire. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On instanciera un seul contrôleur de TTY (contrôlant 4 terminaux numérotés de 0 à 3), un seul composant TIMER
    217 contenant 4 timers indépendants numérotés de 1 à 3), et une seule ROM de boot.
    218 On placera la ROM dans le cluster 0, le TIMER dans le cluster 1, et le TTY dans le cluster 3.
     220Chaque cluster contiendra un processeur MIPS32, un composant ICU, un contrôleur TTY, un TIMER et une mémoire RAM. On se dispensera d'instancier le coprocesseur GCD dans cette architecture. On placera la ROM de boot dans le cluster 0. On placera le contrôleur d'écran graphique FBF et le contrôleur DMA dans le cluster 1. On placera enfin le contrôleur de disque IOC dans le cluster 2.
     221
    219222On utilisera un composant '''vci_local_crossbar''' comme interconnect local ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) , et on utilisera le composant '''vci_vgmn''' comme interconnect global ( voir documentation [https://www.soclib.fr/trac/dev/wiki/Component/VciXcacheWrapper ici]) .
    220223
    221 Les composants TTY et TIMER générent chacun 4 lignes d'interruption: La ligne d'interruption IRQ_TIMER[i] doit être connectée à l'entrée IRQ[0] de l'ICU du cluster (i), et la ligne d'interruption IRQ_TTY[i] doit être connectée à l'entrée IRQ[1] de l'ICU du cluster (i).
     224Pour ce qui concerne les interruptions:
     225 * Dans chaque cluster (i), la ligne d'interruption du TIMER sera connectée à l'entrée IRQ_IN[0] du composant ICU[i].
     226 * Dans chaque cluster (i), la ligne d'interruptiondu TTY sera connectée à l'entrée IRQ_IN[1] du composant ICU[i].
     227 * La ligne d'interruption du contrôleur IOC sera connectée à l'entrée IRQ_IN[2] du composant ICU[2].
     228 * La ligne d'interruption du contrôleur DMA sera connectée à l'entrée IRQ_IN[3] du composant ICU[1].
    222229
    223230Il faut donc écrire les deux fichiers '''tp5_top.cpp''' et '''tp5.desc''' correspondant à cette architecture,
    224231en veillant à donner des valeurs croissantes (de 0 à 3) à l'argument ''processor-id'' des 4 processeurs.
    225232
    226 Il faut définir 4 segments pour les 4 composants ICU, et il faut également définir 4 segments distincts pour les 4 piles d'exécution des 4 processeurs. En revanche, les segment seg_reset, seg_kernel et seg_code qui ne contiennent que des instructions peuvent être partagés par les 4 processeurs.
     233Il faut définir 4 segments pour les 4 composants ICU[i],  4 autres segments pour les 4 composants TTY[i], et 4 segments pour les 4 TIMER[i]. Il faut également définir 4 segments distincts pour les 4 piles d'exécution des 4 processeurs. En revanche, les segment seg_reset, seg_kernel et seg_code qui ne contiennent que des instructions peuvent être partagés par les 4 processeurs.
     234
     235== 3.3 Logiciel embarqué ==
    227236
    228237Le logiciel doit être assez profondément modifié :
     
    241250Si ce n'est pas le cas, il vous reste le '''GDB Server'''...
    242251
    243 = 5 Compte_rendu =
     252= 4 Compte_rendu =
    244253
    245254Il ne vous est pas demandé de compte-rendu pour ce TP, mais on vous demandera une démonstration de votre simulateur au début du TP de la semaine suivante...