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 ; expected: 0.3125
54 +------- +------- +-------- + + +-------------- +--------------
55 | | | | | | \_ charge attendue
56 | | | | | | (en bookkeeping)
57 | | | | | \_ charge courante
59 | | | | \_ nombre d'itérations de calculs
61 | | | \_ nombre d'itérations d'équilibrage
63 | | \_ catégorie de messages
65 | \_ date courante (en secondes, dans la simulation)
69 * à la fin de la simulation :
70 [Bourassa 108.886866] [proc/INFO] Final load after 107:4 iterations: 1.04113 ; expected: 1
71 +------- +--------- +-------- +-- + +------ +----------
72 | | | | | | \_ charge attendue
73 | | | | | | (en bookkeeping)
75 | | | | | \_ charge courante
77 | | | | \_ nombre d'itérations de calculs
79 | | | \_ nombre d'itérations d'équilibrage
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é) ;
141 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
142 - faire le #include adéquat ;
143 - ajouter une ligne NOL_INSERT(...) dans la liste existante
144 (dans loba_algorithms_type::loba_algorithms_type()).
146 Pour ajouter une nouvelle option au programme
147 =============================================
149 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
150 (classement plus ou moins thématique).
152 2. Toujours dans options.cpp, il faut :
153 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
154 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
155 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
156 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
158 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
163 * fichiers de description de plates-formes
170 * fichiers de description de déploiement (tests)
172 Dep.xml à utiliser avec Plat.xml
173 deployment.xml à utiliser avec platform.xml
178 communicator.cpp la couche de communication
181 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
184 deployment.cpp génération automatique de déploiement
186 hostdata.h gestion des boites de réception, par hôte
189 loba_simple.h équilibrage simple
190 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
192 loba_*.{h,cpp} autres algos d'équilibrage
194 main.cpp le programme principal
196 misc.h divers trucs inclassables
199 named_object_list.h gestion d'une table de constructeurs
200 avec des noms et des descriptions
202 neighbor.h un voisin pour un processus
205 options.h gestion des paramètres et options globaux
208 process.h classe de base pour un processus
211 simgrid_features.h macros pour détecter la version de SimGrid
213 simple_async.cpp un simple programme de test
215 timer.h gestion de timer
217 version.h gestion de la version du programme
222 colorized-loba script pour exécuter loba en colorant les
225 extract.pl outil d'extraction des données à partir des
226 traces, pour tracer des courbes
228 setlocalversion calcule un numéro de version à partir du hash
229 du dernier commit (git)
233 .gitignore liste des fichiers ignorés par git
234 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind