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 * pendant la simulation :
53 [Bourassa 5.000000] [proc/INFO] (6:1) current load: 5
54 +------- +------- +-------- + + -----+---------
56 | | | | | \_ charge courante
58 | | | | \_ nombre d'itérations de calculs
60 | | | \_ nombre d'itérations d'équilibrage
62 | | \_ catégorie de messages
64 | \_ date courante (en secondes, dans la simulation)
68 * à la fin de la simulation :
69 [Bourassa 108.886866] [proc/INFO] Final load after 107:4 iterations: 1.04113
70 +------- +--------- +-------- +-- + +------
75 | | | | \_ nombre d'itérations
78 | | | \_ nombre d'itérations
81 | | \_ catégorie de messages
83 | \_ date courante (en secondes, dans la simulation)
91 Le script extract.pl permet d'extraire les données à partir des traces
92 de simulation et de le présenter sous un format acceptable par gnuplot
93 ou par graph (plotutils).
96 ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
101 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
103 - une pour les message de contrôle ;
104 - une pour les transferts de charge.
106 Ceci afin d'éviter de bloquer les échanges d'information pendant un
109 À la fin, chaque processus envoie un message "CLOSE" à tous ses
110 voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par
111 voisin (un sur chaque mailbox).
113 Ceci permet de synchroniser les processus à la terminaison (ça, à la
114 rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a
115 plus de communication qui « traîne » dans les canaux.
117 Cela permet aussi de ne pas réarmer les communications non bloquantes
118 qu'on ne sait pas annuler proprement (un manque dans SimGrid).
120 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
123 Attention : lors du déploiement de l'application, il faut s'assurer que
124 la relation de voisinage est symétrique !
125 *Ce n'est pas vérifié par le programme.*
127 Pour ajouter un nouvel algorithme d'équilibrage
128 ===============================================
130 1. Imiter ce qui est fait pour loba_simple :
131 - définir une nouvelle classe dérivant de process
132 - attention, il faut construire le process explicitement
133 - redéfinir la méthode load_balance qui :
134 - peut récupérer la charge courante avec get_load()
135 - peut utiliser et éventuellement réordonner le tableau process::pneigh ;
136 - peut récupérer l'information de charge d'un voisin avec
137 pneigh[i]->get_load() ;
138 - définit la charge à envoyer avec
139 send(pneigh[i], quantité) ;
140 NB: le script new_loba.sh peut servir à créer les fichiers.
142 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
143 - faire le #include adéquat ;
144 - ajouter une ligne NOL_INSERT(...) dans la liste existante
145 (dans loba_algorithms_type::loba_algorithms_type()).
147 Pour ajouter une nouvelle option au programme
148 =============================================
150 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
151 (classement plus ou moins thématique).
153 2. Toujours dans options.cpp, il faut :
154 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
155 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
156 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
157 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
159 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
164 * fichiers de description de plates-formes
171 * fichiers de description de déploiement (tests)
173 Dep.xml à utiliser avec Plat.xml
174 deployment.xml à utiliser avec platform.xml
179 communicator.cpp la couche de communication
182 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
185 deployment.cpp génération automatique de déploiement
187 hostdata.h gestion des boites de réception, par hôte
190 loba_simple.h équilibrage simple
191 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
193 loba_*.{h,cpp} autres algos d'équilibrage
195 main.cpp le programme principal
197 misc.h divers trucs inclassables
200 named_object_list.h gestion d'une table de constructeurs
201 avec des noms et des descriptions
203 neighbor.h un voisin pour un processus
206 options.h gestion des paramètres et options globaux
209 process.h classe de base pour un processus
212 simgrid_features.h macros pour détecter la version de SimGrid
214 simple_async.cpp un simple programme de test
216 timer.h gestion de timer
218 version.h gestion de la version du programme
223 colorized-loba script pour exécuter loba en colorant les
226 extract.pl outil d'extraction des données à partir des
227 traces, pour tracer des courbes
229 setlocalversion calcule un numéro de version à partir du hash
230 du dernier commit (git)
234 .gitignore liste des fichiers ignorés par git
235 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind