• Aucun résultat trouvé

CHAPITRE 6 PROFILAGE AU NIVEAU SYST` EME

6.1 Profilage non-intrusif de code logiciel

6.1.2 Impl´ementation du profileur d’ISS

En plus des op´erations ´el´ementaires qu’on suppose ˆetre fournies par l’ISS ou la plate- forme virtuelle `a la section 6.1.1 (gestion des points d’arrˆets, lecture d’une adresse m´emoire et lecture d’un registre de l’ISS), plusieurs autres op´erations utilis´ees par le profileur d’ISS d´ependent du processeur dont on profile le code logiciel :

1. D´esassembler le code logiciel ;

2. Trouver la taille et l’adresse des variables globales dans le code d´esassembl´e ; 3. Trouver l’adresse de d´ebut d’une fonction dans le code d´esassembl´e ;

4. Trouver l’adresse des points de sortie d’une fonction dans le code d´esassembl´e ; 5. Extraire les valeurs des arguments pass´es en param`etres `a une fonction ;

6. Extraire la valeur de retour d’une fonction.

L’impl´ementation du profileur d’ISS suppose qu’il existe une suite d’outils GNU (Free Software Foundation, 2010) ciblant le processeur dont on profile le code logiciel. Plus pr´e- cis´ement, avant le d´ebut de la simulation, le profileur d’ISS lance le d´ebogueur crois´e GDB (Stallman et al., 2002) pour d´esassembler et analyser le code logiciel afin de r´ealiser les op´e- rations 1, 2 et 3. Ainsi, une fois que le d´ebogueur crois´e GDB est lanc´e, le profileur d’ISS r´ecup`ere l’adresse et la taille de chaque variable globale profil´ee var en ex´ecutant respec-

tivement les commandes print/x &var et print/x sizeof(var) dans GDB. De la mˆeme mani`ere, le profileur d’ISS obtient l’adresse de d´ebut de chaque fonction profil´ee fct en ajoutant temporairement un point d’arrˆet avec la commande break ‘fct’ et en r´ecup´erant l’adresse `a laquelle le point d’arrˆet a ´et´e ajout´e par GDB. Il est `a noter que cette utilisation des points d’arrˆet de GDB avant la simulation n’implique pas n´ecessairement que GDB sera ´egalement utilis´e pour g´erer les points d’arrˆet lors de la simulation. En effet, on peut pr´ef´e- rer manipuler directement l’ISS pour la gestion des points d’arrˆet, plutˆot que de passer par GDB, pour des raisons de performance (en terme de WCT), comme le montrent les r´esultats pr´esent´es `a la section 9.4.

Cette utilisation de la suite d’outils crois´es GNU simplifie l’impl´ementation du profileur d’ISS. Cependant, cette suite d’outils ne permet pas d’identifier les adresses des points de sortie d’une fonction dans le code d´esassembl´e. Pour trouver ces points de sortie, le profileur d’ISS demande donc `a GDB de d´esassembler le code de la fonction puis examine une par une les instructions en code assembleur de cette fonction. Si l’opcode de l’instruction est un opcode de sortie, alors le profileur d’ISS ajoute l’adresse de cette instruction `a la liste des points de sortie de la fonction. L’identit´e des opcodes qui correspondent `a des points de sortie d´epend du jeu d’instructions du processeur cible.

Les autres op´erations utilis´ees par le profileur d’ISS sont impl´ement´ees soit au travers du d´ebogueur crois´e GDB, soit en acc´edant directement `a l’ISS, `a ses registres et `a sa m´emoire. 6.1.2.1 Impl´ementation du profileur d’ISS pour le MicroBlaze

Le profileur d’ISS a ´et´e impl´ement´e pour le processeur MicroBlaze de Xilinx (Xilinx Inc., 2005). Le profileur d’ISS MicroBlaze d´el`egue au d´ebogueur crois´e GDB le d´esassemblage du code logiciel, l’extraction de la taille et de l’adresse des variables profil´ees ainsi que de l’adresse de d´ebut des fonctions profil´ees. Aussi, ce profileur d’ISS trouve l’ensemble des points de sortie de chacune de ces fonction en consid´erant comme des points de sortie les instructions avec l’opcode rtid ou rtsd, tel que d´efini dans le jeu d’instructions du MicroBlaze.

L’ISS MicroBlaze impl´ement´e dans la plate-forme virtuelle de SPACE permet au profileur d’ISS d’acc´eder directement `a ses registres et `a sa m´emoire pendant la simulation. Cela signifie que ces acc`es ne passent pas par le bus et prennent un temps nul dans le r´ef´erentiel du temps interne `a la simulation. Ainsi, le profileur d’ISS MicroBlaze peut lire la valeur courante d’une variable profil´ee en lisant la valeur de la m´emoire de l’ISS `a l’adresse de la variable. Selon l’interface binaire (ABI) du MicroBlaze, les 6 registres R5 `a R10 du MicroBlaze sont utilis´es pour passer des arguments en param`etre `a une fonction alors que le registre R3 est utilis´e pour la valeur de retour d’une fonction. Ainsi, le profileur d’ISS MicroBlaze extrait les valeurs des registres R5 `a R10 `a chaque fois que l’ex´ecution du code logiciel atteint le

d´ebut d’une fonction et il extrait la valeur du registre R3 `a chaque fois que l’ex´ecution arrive `a la fin d’une fonction. Cette impl´ementation extrait les valeurs des 6 premiers param`etres de chaque fonction profil´ee et suppose qu’elles utilisent le passage par valeur pour leurs param`etres et leur valeur de retour. Cette impl´ementation pourrait ˆetre ´etendue d’abord pour supporter tous les param`etres des fonctions ayant plus de 6 param`etres en r´ecup´erant les valeurs des param`etres suppl´ementaires sur la pile. Une autre extension permettrait de supporter le passage par adresse en d´er´ef´eren¸cant les pointeurs pass´es en param`etre ou comme valeur de retour. Finalement, l’ISS MicroBlaze impl´ement´e dans SPACE contient tous les registres pr´esents dans le processeur MicroBlaze en plus de registres virtuels qui comptent le nombre d’instructions de contrˆole, d’acc`es `a la m´emoire et d’op´erations arithm´etiques et logiques ex´ecut´ees depuis le d´emarrage du processeur. Ces registres virtuels sont profil´es par le profileur d’ISS pour fournir plus d’informations sur le type d’instructions ex´ecut´ees par chaque fonction.

Le profileur d’ISS MicroBlaze utilise les fonctionnalit´es offertes par cet ISS pour ajouter des points d’arrˆet et ˆetre appel´e lorsqu’un point d’arrˆet est atteint. Ainsi, l’ISS MicroBlaze surveille la valeur du PC pour voir si elle est ´egale `a l’adresse d’un point d’arrˆet. Si c’est le cas, l’ISS MicroBlaze appelle la fonction de rappel (callback ) associ´ee au point d’arrˆet, soit le profileur d’ISS dans ce cas-ci. Le profileur d’ISS MicroBlaze traite alors le point d’arrˆet en d´eterminant au d´ebut ou `a la fin de quelle fonction correspond ce point d’arrˆet. Apr`es ce traitement, le profileur d’ISS MicroBlaze demande `a l’ISS de poursuivre l’ex´ecution du code logiciel. ´Etant donn´e que le traitement du point d’arrˆet effectu´e par le profileur d’ISS demande un temps nul dans le r´ef´erentiel du temps interne `a la simulation, la gestion de ces points d’arrˆet ne perturbe ni la fonctionnalit´e ni la performance du code logiciel profil´e. 6.1.2.2 Impl´ementation g´en´erique avec GDB

Profileur d’ISS GDB Client GDB Serveur GDB ISS Protocole

GDB/MI

Protocole s´erie GDB

Figure 6.2 Impl´ementation g´en´erique du profileur d’ISS avec client/serveur GDB

Une version g´en´erique du profileur d’ISS a ´et´e impl´ement´ee. Cette impl´ementation g´en´e- rique d´el`egue au d´ebogueur crois´e GDB non seulement les tˆaches d’analyse du code logiciel pr´ealables `a la simulation, mais ´egalement les tˆaches qui se d´eroulent lors de la simulation comme la gestion des points d’arrˆet et l’extraction des valeurs des arguments pass´es en pa-

ram`etre. On l’appelle donc le profileur d’ISS GDB.

Tel qu’illustr´e `a la figure 6.2, le profileur d’ISS GDB communiqu´e avec le d´ebogueur crois´e GDB au moyen de l’interface de communication GDB/MI (Stallman et al., 2002). Le d´ebogueur crois´e GDB agit comme client GDB et il communique `a son tour, au moyen du protocole s´erie de GDB, avec le serveur GDB qui se trouve au sein de l’ISS. Le serveur GDB a un acc`es direct `a la m´emoire et aux registres de l’ISS et on suppose que l’ISS et son serveur GDB supportent les points d’arrˆet mat´eriels pour que leur utilisation par le profileur d’ISS soit non-intrusive. Dans le contexte du processeur MicroBlaze, le serveur GDB se trouve dans une situation analogue au profileur d’ISS MicroBlaze pr´esent´e `a la section 6.1.2.1. L’avantage de passer par GDB est qu’on peut s’attendre `a ce que le serveur GDB ait d´ej`a ´et´e impl´ement´e pour l’ISS, ind´ependamment du profilage, afin de permettre le d´ebogage du code logiciel ex´ecut´e par l’ISS.

Ainsi, le profileur d’ISS GDB envoie au client GDB diff´erentes commandes du proto- cole GDB/MI telles que -data-evaluate-expression, -data-read-memory et -data-list- register-values pour lire la valeur courante d’une variable, d’un registre ou d’une adresse m´emoire. Le client GDB demande alors au serveur GDB de lire le registre ou l’adresse m´e- moire appropri´ee et le serveur GDB fait les acc`es pertinents pour r´epondre `a cette requˆete. Le serveur GDB renvoie la valeur lue au client GDB, qui renvoie alors au profileur d’ISS GDB une r´eponse textuelle suivant le protocole GDB/MI. Cette r´eponse est une chaˆıne de caract`eres semblable `a ^done,value="Y" et le profileur d’ISS GDB en extrait la valeur Y, qui correspond `a la valeur lue.

De mani`ere analogue, le profileur d’ISS GDB ins`ere des points d’arrˆet au d´ebut et aux points de sortie de chaque fonction profil´ee en envoyant au client GDB la commande -break- insert. Apr`es l’insertion de chaque point d’arrˆet, le client GDB renvoie un identificateur unique correspondant au point d’arrˆet qui vient d’ˆetre ins´er´e. Lorsque l’ex´ecution atteint un point d’arrˆet, le client GDB notifie alors le profileur d’ISS GDB en lui envoyant un message textuel, selon le protocole GDB/MI, qui contient l’identificateur unique du point d’arrˆet atteint. Cela permet au profileur d’ISS GDB de d´eterminer au d´ebut ou `a la fin de quelle fonction ce point d’arrˆet correspond. Le message textuel envoy´e par le client GDB contient ´egalement les valeurs des arguments pass´es en param`etre `a la fonction courante. Ces valeurs sont donc extraites du message textuel par le profileur d’ISS GDB si le point d’arrˆet correspond au d´ebut d’une fonction profil´ee.

Lorsqu’un point d’arrˆet est atteint `a un point de sortie d’une fonction, le profileur d’ISS GDB obtient la valeur de retour de la fonction en envoyant la commande -exec-finish au client GDB. La fonction termine alors son ex´ecution et le client GDB renvoie au profileur d’ISS GDB un message textuel qui contient la valeur de retour de la fonction. L’ex´ecution du

code logiciel reprend alors son cours apr`es que le profileur d’ISS GDB ait envoy´e la commande -exec-continue au client GDB.

Le profileur d’ISS GDB est caract´eris´e par une grande g´en´ericit´e et un grand potentiel de r´eutilisation, ´etant donn´e que le porter vers un processeur cible implique seulement de sp´ecifier la liste des opcodes correspondant `a un point de sortie de fonction dans le jeu d’instructions de ce processeur.