]> AND Private Git Repository - loba.git/blob - README
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Use matching quote.
[loba.git] / README
1 Contenu
2 =======
3 * Compilation de SimGrid
4 * Compilation...
5 * Utilisation
6 * Tracé de courbes
7 * Communications
8 * Pour ajouter un nouvel algorithme d'équilibrage
9 * Pour ajouter une nouvelle option au programme
10 * Liste des fichiers
11 ----------------------------------------------------------------------
12
13 Compilation de SimGrid
14 ======================
15
16 Dans les sources :
17         $ cmake -D CMAKE_INSTALL_PREFIX=/usr/local      # par exemple
18         $ make
19         $ make install
20
21 Compilation...
22 ==============
23
24 Il faut avoir un lien "simgrid-stable" vers le répertoire
25 d'installation de SimGrid (par ex. /usr/local).
26
27 Utilisation
28 ===========
29
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
34 entre voisins...
35
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)
38
39 Pour changer le niveau de détail des affichages :
40         --log=category.thres:level
41     avec
42         category : simu, main, depl, comm, proc, loba
43     et
44            level : trace, debug, verbose, info, warning, error, critical
45
46 Pour plus de détail sur les options de logging :
47     http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
48
49 Sorties
50 =======
51
52 * pendant la simulation :
53 [Bourassa 5.000000] [proc/INFO] (6:1) current load: 5
54  +------- +-------   +--------   + +  -----+---------
55  |        |          |           | |       |
56  |        |          |           | |       \_ charge courante
57  |        |          |           | |
58  |        |          |           | \_ nombre d'itérations de calculs
59  |        |          |           |
60  |        |          |           \_ nombre d'itérations d'équilibrage
61  |        |          |
62  |        |          \_ catégorie de messages
63  |        |
64  |        \_ date courante (en secondes, dans la simulation)
65  |
66  \ nom du nœud
67
68 * à la fin de la simulation :
69 [Bourassa 108.886866] [proc/INFO] Final load after 107:4 iterations: 1.04113
70  +------- +---------   +--------                   +-- +             +------
71  |        |            |                           |   |             |
72  |        |            |                           |   |             \_ charge
73  |        |            |                           |   |                courante
74  |        |            |                           |   |
75  |        |            |                           |   \_ nombre d'itérations
76  |        |            |                           |      de calculs
77  |        |            |                           |
78  |        |            |                           \_ nombre d'itérations
79  |        |            |                              d'équilibrage
80  |        |            |
81  |        |            \_ catégorie de messages
82  |        |
83  |        \_ date courante (en secondes, dans la simulation)
84  |
85  \ nom du nœud
86
87
88 Tracé de courbes
89 ================
90
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).
94
95 Exemples:
96         ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
97
98         ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX -y 0 250
99
100         ./loba platform.xml 2>&1 | ./extract.pl \
101             | gnuplot -p -e 'plot "-" using 1:2:(column(-2)) with lines lc variable'
102
103 Communications
104 ==============
105
106 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
107 ports) :
108   - une pour les message de contrôle ;
109   - une pour les transferts de charge.
110
111 Ceci afin d'éviter de bloquer les échanges d'information pendant un
112 transfert de charge.
113
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).
117
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.
121
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).
124
125 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
126 "CLOSE".
127
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.*
131
132 Pour ajouter un nouvel algorithme d'équilibrage
133 ===============================================
134
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.
146
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()).
151
152 Pour ajouter une nouvelle option au programme
153 =============================================
154
155 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
156    (classement plus ou moins thématique).
157
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.).
163
164 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
165
166 Liste de fichiers
167 =================
168
169 * fichiers de description de plates-formes
170
171     Plat.xml
172     cluster1000.xml
173     machines1000.xml
174     platform.xml
175
176 * fichiers de description de déploiement (tests)
177
178     Dep.xml                     à utiliser avec Plat.xml
179     deployment.xml              à utiliser avec platform.xml
180
181 * fichiers sources
182
183     communicator.h              la couche de communication
184     communicator.cpp
185
186     cost_func.h                 fonctions de coût pour comm_cost et comp_cost
187     cost_func.cpp
188
189     deployment.h                génération automatique de déploiement
190     deployment.cpp
191
192     hostdata.h                  gestion des boites de réception, par hôte
193     hostdata.cpp
194
195     loba_simple.h               équilibrage simple
196     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
197
198     loba_*.{h,cpp}              autres algos d'équilibrage
199
200     main.cpp                    le programme principal
201
202     message.h                   file de messages reçus
203     message.cpp
204
205     misc.h                      divers trucs inclassables
206     misc.cpp
207
208     msg_thread.h                creation de threads SG/MSG
209     msg_thread.cpp
210
211     named_object_list.h         gestion d'une table de constructeurs
212                                 avec des noms et des descriptions
213
214     neighbor.h                  un voisin pour un processus
215     neighbor.cpp
216
217     options.h                   gestion des paramètres et options globaux
218     options.cpp
219
220     process.h                   classe de base pour un processus
221     process.cpp
222
223     simgrid_features.h          macros pour détecter la version de SimGrid
224
225     statistics.h                pour calculer moyenne, variance, etc.
226
227     synchro.h                   mutex, condition, etc.
228
229     sync_queue.h                lock-free synchronized queue
230
231     timer.h                     gestion de timer
232
233     tracing.h                   définitions liées au traçage
234
235     version.h                   gestion de la version du programme
236     version.cpp
237
238 * scripts
239
240     colorized-loba              script pour exécuter loba en colorant les
241                                 sorties
242
243     extract.pl                  outil d'extraction des données à partir des
244                                 traces, pour tracer des courbes
245
246     new_loba.sh                 pour créer le squelette d'un nouvel algo
247                                 d'équiblibrage loba_*
248
249     setlocalversion             calcule un numéro de version à partir du hash
250                                 du dernier commit (git)
251
252 * autres fichiers
253
254     .gitignore                  liste des fichiers ignorés par git
255     valgrind_suppressions       liste de quelques suppressions pour valgrind
256                                 avec SimGrid 3.5