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 - reçoit en paramètre la charge à prendre en compte ;
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 pneigh[i]->set_to_send(quantité) ;
101 - retourne la somme des quantités définies avec set_to_send.
103 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
104 - faire le #include adéquat ;
105 - ajouter une ligne NOL_INSERT(...) dans la liste existante
106 (dans loba_algorithms_type::loba_algorithms_type()).
108 Pour ajouter une nouvelle option au programme
109 =============================================
111 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
112 (classement plus ou moins thématique).
114 2. Toujours dans options.cpp, il faut :
115 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
116 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
117 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
118 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
120 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
125 * fichiers de description de plates-formes
131 * fichiers de description de déploiement (tests)
133 Dep.xml à utiliser avec Plat.xml
134 deployment.xml à utiliser avec platform.xml
139 communicator.cpp la couche de communication
142 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
145 deployment.cpp génération automatique de déploiement
147 hostdata.h gestion des boites de réception, par hôte
150 loba_simple.h équilibrage simple
151 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
153 loba_*.{h,cpp} autres algos d'équilibrage
155 main.cpp le programme principal
157 misc.h divers trucs inclassables
160 named_object_list.h gestion d'une table de constructeurs
161 avec des noms et des descriptions
163 neighbor.h un voisin pour un processus
166 options.h gestion des paramètres et options globaux
169 process.h classe de base pour un processus
172 simgrid_features.h macros pour détecter la version de SimGrid
174 simple_async.cpp un simple programme de test
176 timer.h gestion de timer
178 version.h gestion de la version du programme
181 * fichiers auto-générés
183 misc_autogen.h définition des macros XCLOG(...)
187 colorized-loba script pour exécuter loba en colorant les
190 extract.pl outil d'extraction des données à partir des
191 traces, pour tracer des courbes
193 setlocalversion calcule un numéro de version à partir du hash
194 du dernier commit (git)
198 .gitignore liste des fichiers ignorés par git
199 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind