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

Private GIT Repository
Do load_balance_loop in the new spawned thread instead of compute_loop.
[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 ; expected: 0.3125
54  +------- +-------   +--------   + +  +--------------   +--------------
55  |        |          |           | |  |                 \_ charge attendue
56  |        |          |           | |  |                    (en bookkeeping)
57  |        |          |           | |  \_ charge courante
58  |        |          |           | |
59  |        |          |           | \_ nombre d'itérations de calculs
60  |        |          |           |
61  |        |          |           \_ nombre d'itérations d'équilibrage
62  |        |          |
63  |        |          \_ catégorie de messages
64  |        |
65  |        \_ date courante (en secondes, dans la simulation)
66  |
67  \ nom du nœud
68
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)
74  |        |            |                           |   |             |
75  |        |            |                           |   |             \_ charge courante
76  |        |            |                           |   |
77  |        |            |                           |   \_ nombre d'itérations de calculs
78  |        |            |                           |
79  |        |            |                           \_ nombre d'itérations 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 Exemple:
96         ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
97
98 Communications
99 ==============
100
101 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
102 ports) :
103   - une pour les message de contrôle ;
104   - une pour les transferts de charge.
105
106 Ceci afin d'éviter de bloquer les échanges d'information pendant un
107 transfert de charge.
108
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).
112
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.
116
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).
119
120 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
121 "CLOSE".
122
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.*
126
127 Pour ajouter un nouvel algorithme d'équilibrage
128 ===============================================
129
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é) ;
140
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()).
145
146 Pour ajouter une nouvelle option au programme
147 =============================================
148
149 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
150    (classement plus ou moins thématique).
151
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.).
157
158 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
159
160 Liste de fichiers
161 =================
162
163 * fichiers de description de plates-formes
164
165     Plat.xml
166     cluster1000.xml
167     machines1000.xml
168     platform.xml
169
170 * fichiers de description de déploiement (tests)
171
172     Dep.xml                     à utiliser avec Plat.xml
173     deployment.xml              à utiliser avec platform.xml
174
175 * fichiers sources
176
177     communicator.h
178     communicator.cpp            la couche de communication
179
180     cost_func.h
181     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
182
183     deployment.h
184     deployment.cpp              génération automatique de déploiement
185
186     hostdata.h                  gestion des boites de réception, par hôte
187     hostdata.cpp
188
189     loba_simple.h               équilibrage simple
190     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
191
192     loba_*.{h,cpp}              autres algos d'équilibrage
193
194     main.cpp                    le programme principal
195
196     misc.h                      divers trucs inclassables
197     misc.cpp
198
199     named_object_list.h         gestion d'une table de constructeurs
200                                 avec des noms et des descriptions
201
202     neighbor.h                  un voisin pour un processus
203     neighbor.cpp
204
205     options.h                   gestion des paramètres et options globaux
206     options.cpp
207
208     process.h                   classe de base pour un processus
209     process.cpp
210
211     simgrid_features.h          macros pour détecter la version de SimGrid
212
213     simple_async.cpp            un simple programme de test
214
215     timer.h                     gestion de timer
216
217     version.h                   gestion de la version du programme
218     version.cpp
219
220 * scripts
221
222     colorized-loba              script pour exécuter loba en colorant les
223                                 sorties
224
225     extract.pl                  outil d'extraction des données à partir des
226                                 traces, pour tracer des courbes
227
228     setlocalversion             calcule un numéro de version à partir du hash
229                                 du dernier commit (git)
230
231 * autres fichiers
232
233     .gitignore                  liste des fichiers ignorés par git
234     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
235                                 avec SimGrid 3.5