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,
102 éventuellement à l'aide de la méthode process::sum_of_to_send()
103 qui clacule cette somme.
105 2. Ajouter l'algorithme dans la liste des options. Dans options.cpp :
106 - faire le #include adéquat ;
107 - ajouter une ligne NOL_INSERT(...) dans la liste existante
108 (dans loba_algorithms_type::loba_algorithms_type()).
110 Pour ajouter une nouvelle option au programme
111 =============================================
113 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
114 (classement plus ou moins thématique).
116 2. Toujours dans options.cpp, il faut :
117 - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
118 getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
119 - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
120 - compléter la fonction opt::usage() (avec le même ordre que en 1.).
122 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
127 * fichiers de description de plates-formes
133 * fichiers de description de déploiement (tests)
135 Dep.xml à utiliser avec Plat.xml
136 deployment.xml à utiliser avec platform.xml
141 communicator.cpp la couche de communication
144 cost_func.cpp fonctions de coût pour comm_cost et comp_cost
147 deployment.cpp génération automatique de déploiement
149 hostdata.h gestion des boites de réception, par hôte
152 loba_simple.h équilibrage simple
153 loba_simple.cpp (à imiter pour ajouter d'autres algorithmes)
155 loba_*.{h,cpp} autres algos d'équilibrage
157 main.cpp le programme principal
159 misc.h divers trucs inclassables
162 named_object_list.h gestion d'une table de constructeurs
163 avec des noms et des descriptions
165 neighbor.h un voisin pour un processus
168 options.h gestion des paramètres et options globaux
171 process.h classe de base pour un processus
174 simgrid_features.h macros pour détecter la version de SimGrid
176 simple_async.cpp un simple programme de test
178 timer.h gestion de timer
180 version.h gestion de la version du programme
183 * fichiers auto-générés
185 misc_autogen.h définition des macros XCLOG(...)
189 colorized-loba script pour exécuter loba en colorant les
192 extract.pl outil d'extraction des données à partir des
193 traces, pour tracer des courbes
195 setlocalversion calcule un numéro de version à partir du hash
196 du dernier commit (git)
200 .gitignore liste des fichiers ignorés par git
201 valgrind_suppressions_3.5 liste de quelques suppressions pour valgrind