[gull] MPICH - packets sniffing

vkeller at bluewin.ch vkeller at bluewin.ch
Thu May 26 18:05:03 CEST 2005


Hello,

J'ai besoin de comprendre le comportement d'une application parallèle sur
une architecture parallèle de type cluster Beowulf. L'application est écrite
dans un langage quelconque (typiquement Fortran ou C), le modèle de programmation
parallèle est celui par échange de messages implémenté à l'aide de MPI (implémentation
MPICH).

Afin de développer un premier modèle, nous aimerions disposer d'un certain
nombre de paramètres pour caractériser le comportement de cette application.
Typiquement la charge CPU, mémoire , swapping par noeud, mais aussi la charge
réseau.

Et c'est ce dernier point qui est l'objet de ma question.

Comment séparer le trafic sur chaque noeud utilisé par l'application en trois:

- Trafic NFS (les IO sur cette machine se font de façon centralisée)
- Trafic MPI (les messages eux-mêmes)
- Le reste 

Je précise qu'actuellement j'ai les données suivantes :

- Temps exacts (Timestamps) du début et de fin de l'application (données
fournies par le RMS, ici OpenPBS)
- Des valeurs moyennées toutes les 30 secondes durant la durée de l'application
du nombre de paquets (somme globale par noeud), de leur taille, etc... ayant
transité en entrée et en sortie sur chaque noeud (données fournies par Ganglia.
Je crois savoir que Ganglia récupère ces données en RT par lecture de /proc
- moyennées sur un intervalle plus petit - sur chaque noeud, puis centralisation
sur la frontale)
- Je dispose du trafic NFS (données fournies par un appel à tcpdump avec
un filtrage des paquets, ceci sur chaque noeud)
- RSH entre les noeuds (pas SSH)
- Les noeuds tournent Linux Kernel 2.4

D'autre part je ne veux pas utiliser l'option de compilation -mpilog, j'aimerai
prendre l'application telle quelle et en tirer mes paramètres de manière
totalement cachée à l'utilisateur (celui qui run une application)... ceci
même si il peut y avoir - dans une période de tests - une grosse perte de
performances dûe aux senseurs supplémentaires (à Ganglia par exemple) tel
tcpdump.


En résumé: Comment discriminer PUIS mesurer la taille / le nombre / etc....
des packets MPI transitant par les NIC de chacun des noeuds alloués à l'application
sans recompiler l'application (en y calculant ces valeurs, ou en ajoutant
l'option -mpilog) pendant un intervalle de temps de X secondes / minutes
/ heures ?

Ce que j'ai tenté:

- Trouver une description du header MPI ajouté à celui de TCP/IP > pas trouvé
?!?
- Parsing de tous les paquets TCP captés par tcpdump > pas efficient !
- essai de construction de filtres (dans un premier temps de capture, de
display dans un second) pour ethereal.. je ne suis pas un spécialiste de
ce logiciel.


Avec mes meilleures salutations (et mes remerciements d'avance)

Vincent

P.S: Dans un second temps, réussir à discriminer les paquets MPI en One-to-One,
One-to-All, All-to-One, All-to-All.

-------------------------------------------
Vincent Keller
Université de Genève - Section Informatique
E-mail: vkeller at bluewin.ch
Home Page: http://cui.unige.ch/~kellev01
-------------------------------------------




More information about the gull mailing list