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

Private GIT Repository
Be consistent and hold mutex in any case when returning from condition_t::timedwait().
[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     atomic_compat.h             chargement des la classe std::atomic<T>
184
185     communicator.h              la couche de communication
186     communicator.cpp
187
188     cost_func.h                 fonctions de coût pour comm_cost et comp_cost
189     cost_func.cpp
190
191     deployment.h                génération automatique de déploiement
192     deployment.cpp
193
194     hostdata.h                  gestion des boites de réception, par hôte
195     hostdata.cpp
196
197     loba_simple.h               équilibrage simple
198     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
199
200     loba_*.{h,cpp}              autres algos d'équilibrage
201
202     main.cpp                    le programme principal
203
204     message.h                   file de messages reçus
205     message.cpp
206
207     misc.h                      divers trucs inclassables
208     misc.cpp
209
210     msg_thread.h                creation de threads SG/MSG
211     msg_thread.cpp
212
213     named_object_list.h         gestion d'une table de constructeurs
214                                 avec des noms et des descriptions
215
216     neighbor.h                  un voisin pour un processus
217     neighbor.cpp
218
219     options.h                   gestion des paramètres et options globaux
220     options.cpp
221
222     process.h                   classe de base pour un processus
223     process.cpp
224
225     simgrid_features.h          macros pour détecter la version de SimGrid
226
227     statistics.h                pour calculer moyenne, variance, etc.
228
229     synchro.h                   mutex, condition, etc.
230
231     sync_queue.h                lock-free synchronized queue
232
233     timer.h                     gestion de timer
234
235     tracing.h                   définitions liées au traçage
236
237     version.h                   gestion de la version du programme
238     version.cpp
239
240 * scripts
241
242     colorized-loba              script pour exécuter loba en colorant les
243                                 sorties
244
245     extract.pl                  outil d'extraction des données à partir des
246                                 traces, pour tracer des courbes
247
248     new_loba.sh                 pour créer le squelette d'un nouvel algo
249                                 d'équiblibrage loba_*
250
251     setlocalversion             calcule un numéro de version à partir du hash
252                                 du dernier commit (git)
253
254 * autres fichiers
255
256     .gitignore                  liste des fichiers ignorés par git
257     valgrind_suppressions       liste de quelques suppressions pour valgrind
258                                 avec SimGrid 3.5