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/simgrid/latest/doc/outcomes_logs.html#log_user
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
98 ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX -y 0 250
100 ./loba platform.xml 2>&1 | ./extract.pl \
101 | gnuplot -p -e 'plot "-" using 1:2:(column(-2)) with lines lc variable'
106 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
108 - une pour les message de contrôle ;
109 - une pour les transferts de charge.
111 Ceci afin d'éviter de bloquer les échanges d'information pendant un
114 À la fin, chaque processus envoie un message "CLOSE" à tous ses
115 voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par
116 voisin (un sur chaque mailbox).
118 Ceci permet de synchroniser les processus à la terminaison (ça, à la
119 rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a
120 plus de communication qui « traîne » dans les canaux.
122 Cela permet aussi de ne pas réarmer les communications non bloquantes
123 qu'on ne sait pas annuler proprement (un manque dans SimGrid).
125 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
128 Attention : lors du déploiement de l'application, il faut s'assurer que
129 la relation de voisinage est symétrique !
130 *Ce n'est pas vérifié par le programme.*
132 Pour ajouter un nouvel algorithme d'équilibrage
133 ===============================================
135 1. Imiter ce qui est fait pour loba_simple :
136 - définir une nouvelle classe dérivant de process
137 - attention, il faut construire le process explicitement
138 - redéfinir la méthode load_balance qui :
139 - peut récupérer la charge courante avec get_load()
140 - peut utiliser et éventuellement réordonner le tableau process::pneigh ;
141 - peut récupérer l'information de charge d'un voisin avec
142 pneigh[i]->get_load() ;
143 - définit la charge à envoyer avec
144 send(pneigh[i], quantité) ;
145 NB: le script new_loba.sh peut servir à créer les fichiers.
147 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
148 - faire le #include adéquat ;
149 - ajouter une ligne NOL_INSERT(...) dans la liste existante
150 (dans loba_algorithms_type::loba_algorithms_type()).
152 Pour ajouter une nouvelle option au programme
153 =============================================
155 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
156 (classement plus ou moins thématique).
158 2. Toujours dans options.cpp, il faut :
159 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
160 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
161 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
162 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
164 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
169 * fichiers de description de plates-formes
176 * fichiers de description de déploiement (tests)
178 Dep.xml à utiliser avec Plat.xml
179 deployment.xml à utiliser avec platform.xml
183 communicator.h la couche de communication
186 cost_func.h fonctions de coût pour comm_cost et comp_cost
189 deployment.h génération automatique de déploiement
192 hostdata.h gestion des boites de réception, par hôte
195 loba_simple.h équilibrage simple
196 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
198 loba_*.{h,cpp} autres algos d'équilibrage
200 main.cpp le programme principal
202 message.h file de messages reçus
205 misc.h divers trucs inclassables
208 msg_thread.h creation de threads SG/MSG
211 named_object_list.h gestion d'une table de constructeurs
212 avec des noms et des descriptions
214 neighbor.h un voisin pour un processus
217 options.h gestion des paramètres et options globaux
220 process.h classe de base pour un processus
223 simgrid_features.h macros pour détecter la version de SimGrid
225 statistics.h pour calculer moyenne, variance, etc.
227 synchro.h mutex, condition, etc.
229 sync_queue.h lock-free synchronized queue
231 timer.h gestion de timer
233 tracing.h définitions liées au traçage
235 version.h gestion de la version du programme
240 colorized-loba script pour exécuter loba en colorant les
243 extract.pl outil d'extraction des données à partir des
244 traces, pour tracer des courbes
246 new_loba.sh pour créer le squelette d'un nouvel algo
247 d'équiblibrage loba_*
249 setlocalversion calcule un numéro de version à partir du hash
250 du dernier commit (git)
254 .gitignore liste des fichiers ignorés par git
255 valgrind_suppressions liste de quelques suppressions pour valgrind