3 * Compilation de SimGrid
8 * Pour ajouter un nouvel algorithme d'équilibrage
9 * Pour ajouter une nouvelle option au programme
11 ----------------------------------------------------------------------
13 Compilation de SimGrid
14 ======================
17 $ cmake -D CMAKE_INSTALL_PREFIX=/usr/local # par exemple
24 Il faut avoir un lien "simgrid-stable" vers le répertoire
25 d'installation de SimGrid (par ex. /usr/local).
30 Idée générale : on dispose d'une plate-forme (décrite dans le fichier
31 XML qui va bien), et on déploie dessus une application. La notion de
32 voisinage entre les processus est *liée à l'application*. Il faut
33 évidemment que la plate-forme sous-jacente autorise les communications
36 Pour avoir l'aide en ligne sur les différents paramètres :
37 $ ./loba -h (ou -hh, ou -hhh, pour plus de détails)
39 Pour changer le niveau de détail des affichages :
40 --log=category.thres:level
42 category : simu, main, depl, comm, proc, loba
44 level : trace, debug, verbose, info, warning, error, critical
46 Pour plus de détail sur les options de logging :
47 http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
52 Le script extract.pl permet d'extraire les données à partir des traces
53 de simulation et de le présenter sous un format acceptable par gnuplot
54 ou par graph (plotutils).
57 ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
62 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
64 - une pour les message de contrôle ;
65 - une pour les transferts de charge.
67 Ceci afin d'éviter de bloquer les échanges d'information pendant un
70 À la fin, chaque processus envoie un message "CLOSE" à tous ses
71 voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par
72 voisin (un sur chaque mailbox).
74 Ceci permet de synchroniser les processus à la terminaison (ça, à la
75 rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a
76 plus de communication qui « traîne » dans les canaux.
78 Cela permet aussi de ne pas réarmer les communications non bloquantes
79 qu'on ne sait pas annuler proprement (un manque dans SimGrid).
81 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
84 Attention : lors du déploiement de l'application, il faut s'assurer que
85 la relation de voisinage est symétrique !
86 *Ce n'est pas vérifié par le programme.*
88 Pour ajouter un nouvel algorithme d'équilibrage
89 ===============================================
91 1. Imiter ce qui est fait pour loba_simple :
92 - définir une nouvelle classe dérivant de process
93 - attention, il faut construire le process explicitement
94 - redéfinir la méthode load_balance qui :
95 - peut récupérer la charge courante avec get_load()
96 - peut utiliser et éventuellement réordonner le tableau process::pneigh ;
97 - peut récupérer l'information de charge d'un voisin avec
98 pneigh[i]->get_load() ;
99 - définit la charge à envoyer avec
100 send(pneigh[i], quantité) ;
102 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
103 - faire le #include adéquat ;
104 - ajouter une ligne NOL_INSERT(...) dans la liste existante
105 (dans loba_algorithms_type::loba_algorithms_type()).
107 Pour ajouter une nouvelle option au programme
108 =============================================
110 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
111 (classement plus ou moins thématique).
113 2. Toujours dans options.cpp, il faut :
114 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
115 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
116 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
117 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
119 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
124 * fichiers de description de plates-formes
130 * fichiers de description de déploiement (tests)
132 Dep.xml à utiliser avec Plat.xml
133 deployment.xml à utiliser avec platform.xml
138 communicator.cpp la couche de communication
141 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
144 deployment.cpp génération automatique de déploiement
146 hostdata.h gestion des boites de réception, par hôte
149 loba_simple.h équilibrage simple
150 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
152 loba_*.{h,cpp} autres algos d'équilibrage
154 main.cpp le programme principal
156 misc.h divers trucs inclassables
159 named_object_list.h gestion d'une table de constructeurs
160 avec des noms et des descriptions
162 neighbor.h un voisin pour un processus
165 options.h gestion des paramètres et options globaux
168 process.h classe de base pour un processus
171 simgrid_features.h macros pour détecter la version de SimGrid
173 simple_async.cpp un simple programme de test
175 timer.h gestion de timer
177 version.h gestion de la version du programme
180 * fichiers auto-générés
182 misc_autogen.h définition des macros XCLOG(...)
186 colorized-loba script pour exécuter loba en colorant les
189 extract.pl outil d'extraction des données à partir des
190 traces, pour tracer des courbes
192 setlocalversion calcule un numéro de version à partir du hash
193 du dernier commit (git)
197 .gitignore liste des fichiers ignorés par git
198 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind