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

Private GIT Repository
Flush pending comms just before send.
[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 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    NB: le script new_loba.sh peut servir à créer les fichiers.
141
142 2. Ajouter l'algorithme dans la liste des options.  Dans options.cpp :
143    - faire le #include adéquat ;
144    - ajouter une ligne NOL_INSERT(...) dans la liste existante
145      (dans loba_algorithms_type::loba_algorithms_type()).
146
147 Pour ajouter une nouvelle option au programme
148 =============================================
149
150 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
151    (classement plus ou moins thématique).
152
153 2. Toujours dans options.cpp, il faut :
154    - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
155      getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
156    - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
157    - compléter la fonction opt::usage() (avec le même ordre que en 1.).
158
159 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
160
161 Liste de fichiers
162 =================
163
164 * fichiers de description de plates-formes
165
166     Plat.xml
167     cluster1000.xml
168     machines1000.xml
169     platform.xml
170
171 * fichiers de description de déploiement (tests)
172
173     Dep.xml                     à utiliser avec Plat.xml
174     deployment.xml              à utiliser avec platform.xml
175
176 * fichiers sources
177
178     communicator.h
179     communicator.cpp            la couche de communication
180
181     cost_func.h
182     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
183
184     deployment.h
185     deployment.cpp              génération automatique de déploiement
186
187     hostdata.h                  gestion des boites de réception, par hôte
188     hostdata.cpp
189
190     loba_simple.h               équilibrage simple
191     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
192
193     loba_*.{h,cpp}              autres algos d'équilibrage
194
195     main.cpp                    le programme principal
196
197     misc.h                      divers trucs inclassables
198     misc.cpp
199
200     named_object_list.h         gestion d'une table de constructeurs
201                                 avec des noms et des descriptions
202
203     neighbor.h                  un voisin pour un processus
204     neighbor.cpp
205
206     options.h                   gestion des paramètres et options globaux
207     options.cpp
208
209     process.h                   classe de base pour un processus
210     process.cpp
211
212     simgrid_features.h          macros pour détecter la version de SimGrid
213
214     simple_async.cpp            un simple programme de test
215
216     timer.h                     gestion de timer
217
218     version.h                   gestion de la version du programme
219     version.cpp
220
221 * scripts
222
223     colorized-loba              script pour exécuter loba en colorant les
224                                 sorties
225
226     extract.pl                  outil d'extraction des données à partir des
227                                 traces, pour tracer des courbes
228
229     setlocalversion             calcule un numéro de version à partir du hash
230                                 du dernier commit (git)
231
232 * autres fichiers
233
234     .gitignore                  liste des fichiers ignorés par git
235     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
236                                 avec SimGrid 3.5