Visualisation des traces KAAPI ODIER Jérôme, étudiant en magister 1 ’informatique responsables : GAUTIER Thierry et DANJEAN Vincent

Stage réalisé au : pas envisagée. Laboratoire d’Informatique de Grenoble ZIRST 51, avenue Jean Kuntzmann PAJE est une application développée par le laboratoire ID, 38330 MONTBONNOT SAINT MARTIN l’INRIA, et le Federal University Santa Monica (UFSM) au Brésil. Elle est spécialement prévu pour afficher les traces Résumé—Cet article présente un outil nommé KAAPI2PAJE produites lors de l’exécution de programmes multithreads. que j’ai conçu et développé afin visualiser les traces d’exécution Ce programme a fait l’objet de plusieurs sujets de thèse des programmes développés avec la bibliothèque KAAPI. Cette dernière permet la réalisation d’applications obustes distribuées (manipulation et affichage de gros volumes de données > Go, sur grille. vérification et correction, au niveau des traces, des problèmes inhérents aux faibles décalage d’horloge pour les programmes qui tournent sur plusieurs machines, etc...). Cependant PAJE I. PRÉSENTATION n’est pas lié à un type de programme particulier et tout type de A. KAAPI traces temporelles y est représentable. PAJE propose un format KAAPI[1], [2] (Kernel for Adaptative, Asynchronous Paral- autodescriptif (il s’agit d’un format texte). La première partie lel and Interactive programming) est une bibliothèque déve- d’un fichier de trace représente l’organisation des données et loppée par l’équipe MOAIS du laboratoire ID. S’appuyant sur la seconde partie les données. POSIX et écrite en ++, elle permet d’exploiter efficacement PAJE est tout-à-fait adapté pour une utilisation avec KAAPI. le parallélisme à grain fin d’applications distribuées sur grille. Il faut faut cependant développé un nouvel utilitaire de Les cibles privilégiées sont des clusters ou des machines conversion. La section suivante va décrire le nouvel utilitaire SMP (Symetric Multi Processor). On peut cité le cas des KAAPI2PAJE que j’ai réalisé. applications exécutées sur Grid’5000, un réseau de près de 5000 processeurs répartis en France. La librarie est disponible sur la forge[3] de l’INRIA. Elle est déjà très utilisée au travers de nombreuses applications.

B. Les traces d’exécution KAAPI KAAPI propose, de manière encore expérimentale, un sys- tème de traces qui permet d’enregister l’évolution temporelle (suite d’événements) de l’état des threads d’un programme. Ces traces sont conservées sous forme de fichiers. Elles sont générées à la demmande lors de l’éxécution d’applications KAAPI. Deux formats sont possibles, l’un texte et l’autre binaire. Ces fichiers de trace peuvent constituer une aide précieuse pour les développeurs de KAAPI. FIG. 1. Le programme PAJE en action. KAAPI fournit quelques outils en ligne de commande pour visualier les fichiers de trace mais il n’éxiste pas d’utilitaire permettant une lecture graphique sous forme de diagrammes III. L’UTILITAIRE KAAPI2PAJE temporels. Un tel programme est nécessaire quand on a à faire à plusieurs centaines voir millier de threads en parallèle. KAAPI2PAJE est une application console qui permet de consommer les traces KAAPI et de les convertir en un fichier II. ETAT DE L’ART de trace PAJE. Trois principales containtes ont conditionné le développement de cet utilitaire. Un certain nombre de visualisateurs de traces existent : TotalView, PAJE[4], [5], etc... A. Les contraintes inhérentes à KAAPI TotalView est une suite d’outils de débogage qui inclue entre autre un visualisateur de traces. Il s’agit cependannt Il est nécessaire d’exposer les grandes lignes sur la façon d’un produit sous licence commerciale et son utilisation n’est dont KAAPI travaille. Les programmes KAAPI peuvent s’exé- cuter sur des machines simples ou SMP, sur des cluster ou Remerciements à GAUTIER Thierry et DANJEAN Vincent. même de façon répartie sur un réseau TCP/IP. 1) Le thread KAAPI processor: Lorsqu’un programme est suffit ensuite de remplir ces conteneurs les événements. Voir démarré, chaque processeur concerné se voit affecter un thread le figures 2.) et 3.). spécial appelé le KAAPI processor. Ce thread joue le rôle de l’ordonnanceur. C’est lui qui, lorsqu’il est actif, se charge de changer les états des autres threads, de choisir un nouveau C. Les contraintes inhérentes à PAJE thread à rendre actif et de lui donner la main. PAJE est un programme exclusivement développé en 2) Les threads user: Tous les autres threads qui sont Objective-C et basé sur la librairie GNUStep. Les sources présents lors de l’éxécution du programme sont des threads disposent évidemment d’un parser et d’un ensemble de utilisateur. Ils sont appelés threads user. Au cours de sa vie, structures de données pour manipuler les fichiers de traces. un thread user peut s’exécuter sur différents processeurs c’est- Malheureusement les sources ne sont pas du tout portables. à dire il peut être élu par diférents KAAPI processors. Il a donc été nécessaire de réécrire une bibliothèque dédiée Le phénomène qui consiste à faire migrer un thread doit au traitement des traces PAJE. Les fichiers de trace KAAPI être clairement représenté d’un point de vue visuel. pouvant être très lourds (plusieurs Go), une attention toute 3) Autres types de threads: Il existe d’autres threads par- particulière à été accordée au développement de cette librarie. ticuliers (thread main, etc...) mais il ne seront pas présentés ici car ils se comportent comme des threads user classiques Son nom est libPAJE. Elle permet de créer, lire, modifier et vie-à-vie de la génération des traces. sauver les fichiers de trace PAJE écrits dans le langage PAJE. Le parser est réalisé par la combinaison du générateur d’ana- lyseurs lexicaux GNU Flex et du compilateur de compilateurs GNU Bison.

D. Les contraintes inhérentes à KAAPI2PAJE KAAPI2PAJE doit bien entendu pouvoir convertir les FIG. 2. Exemple naïf de trace pour un programme tournant sur un processeur. fichiers de trace KAAPI en fichiers de trace PAJE mais il doit également être en mesure de fusionner des fichiers de trace. Cette opération doit-être rélisée avec précautions. En effet chaque évenement est, entre autre, caractérisé par la date à laquelle il s’est produit. Or, pour une application KAAPI, la date "zero" qui correspond au démarrage du programme peut être considérée comme arbitraire. Il est ainsi nécessaire de "shifter" les dates de sorte qu’au moment de la fusion, le fichier résultat reste intègre chronoligiquement. Il est également intéressant de trier les événements par ordre chronologique.

Ces opérations sont réalisées en trois étapes : 1) : Pour chaque fichier de trace KAAPI une valeur de t t FIG. 3. Exemple naïf de trace pour un programme tournant sur deux shift facultative peut être indiquée (option –offset avec un processeurs. nombre de "tick" système).

4) Nommage des threads: Chaque thread est identifié par kaapi2page -o result.trace app_kaapi_1.raw \ un nombre entier unique. Dans KAAPI il est appelé CID --offset 1500 app_kaapi_2.raw (Context ID). De même chaque processeur est identifié par un 2) : La date la plus ancienne de chaque fichiers de trace nombre entier unique appelé PID (Processor ID). Remarque : est soustraite à toute les autres dates puis le "shift" est ajouté. il ne s’agit pas du PID (Process ID) tel qu’on le connaît sur 3) : Un sort rapide est appliqué afin de classer les infor- les systèmes POSIX. mations chronologiquement.

B. Représentation des threads IV. CONCLUSIONSETPERSPECTIVES PAJE introduit la notion de conteneur. Un conteneur est à même de contenir d’autres conteneurs ou des entités c’est-à- KAAPI2PAJE et PAJE permettent de représenter efficace- dire des événements (par exemple un changement d’état de ment les traces générées par les applications KAAPI. Ce- thread). A partir de cela il est facile de représenter l’exé- pendant KAAPI et plus particulièrement le système de trace cution d’un programme basé sur KAAPI. On créé autant de sont en actif développement, KAAPI2PAJE doit suivre et conteneurs "processeur" qu’il y a de processeurs. Dans chaque s’adapter. Il est également envisageable de faire en sorte que d’eux on place un conteneurs "KAAPI processor" et autant KAAPI2PAJE soit dirctement capable de fusionner les fichiers de conteneurs "threads user" qu’il y a de threads user. Il PAJE en plus des fichiers KAAPI. RÉFÉRENCES [1] E. MOAIS, “Kaapi home page,” http://kaapi.gforge.inria.fr/. [2] ——, “Kaapi documentation,” http://kaapi.gforge.inria.fr/kaapi/index. html. [3] “Forge de l’inria,” http://gforge.inria.fr/projects/kaapi/. [4] J. C. de Kergommeaux and B. de Oliveira Stein, “Paje, an interactive visualization tool for tuning multi-threaded parallel applications,” Parallel Comput., vol. 26, no. 10, pp. 1253–1274, 2000. [5] ——, “Flexible performance visualization of parallel and distributed applications,” Future Gener. Comput. Syst., vol. 19, no. 5, pp. 735–747, 2003.