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

Private GIT Repository
Add Makhoul's algorithm.
[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 Tracé de courbes
50 ================
51
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).
55
56 Exemple:
57         ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
58
59 Communications
60 ==============
61
62 Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de
63 ports) :
64   - une pour les message de contrôle ;
65   - une pour les transferts de charge.
66
67 Ceci afin d'éviter de bloquer les échanges d'information pendant un
68 transfert de charge.
69
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).
73
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.
77
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).
80
81 Il ne faut bien sûr plus envoyer de message après avoir envoyé un
82 "CLOSE".
83
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.*
87
88 Pour ajouter un nouvel algorithme d'équilibrage
89 ===============================================
90
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      - peut récupérer la charge courante avec get_load()
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            send(pneigh[i], quantité) ;
101
102 2. Ajouter l'algorithme dans la liste des options.  Dans options.cpp :
103    - faire le #include adéquat ;
104    - ajouter une ligne NOL_INSERT(...) dans la liste existante
105      (dans loba_algorithms_type::loba_algorithms_type()).
106
107 Pour ajouter une nouvelle option au programme
108 =============================================
109
110 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
111    (classement plus ou moins thématique).
112
113 2. Toujours dans options.cpp, il faut :
114    - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
115      getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
116    - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
117    - compléter la fonction opt::usage() (avec le même ordre que en 1.).
118
119 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
120
121 Liste de fichiers
122 =================
123
124 * fichiers de description de plates-formes
125
126     Plat.xml
127     cluster1000.xml
128     platform.xml
129
130 * fichiers de description de déploiement (tests)
131
132     Dep.xml                     à utiliser avec Plat.xml
133     deployment.xml              à utiliser avec platform.xml
134
135 * fichiers sources
136
137     communicator.h
138     communicator.cpp            la couche de communication
139
140     cost_func.h
141     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
142
143     deployment.h
144     deployment.cpp              génération automatique de déploiement
145
146     hostdata.h                  gestion des boites de réception, par hôte
147     hostdata.cpp
148
149     loba_simple.h               équilibrage simple
150     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
151
152     loba_*.{h,cpp}              autres algos d'équilibrage
153
154     main.cpp                    le programme principal
155
156     misc.h                      divers trucs inclassables
157     misc.cpp
158
159     named_object_list.h         gestion d'une table de constructeurs
160                                 avec des noms et des descriptions
161
162     neighbor.h                  un voisin pour un processus
163     neighbor.cpp
164
165     options.h                   gestion des paramètres et options globaux
166     options.cpp
167
168     process.h                   classe de base pour un processus
169     process.cpp
170
171     simgrid_features.h          macros pour détecter la version de SimGrid
172
173     simple_async.cpp            un simple programme de test
174
175     timer.h                     gestion de timer
176
177     version.h                   gestion de la version du programme
178     version.cpp
179
180 * fichiers auto-générés
181
182     misc_autogen.h              définition des macros XCLOG(...)
183
184 * scripts
185
186     colorized-loba              script pour exécuter loba en colorant les
187                                 sorties
188
189     extract.pl                  outil d'extraction des données à partir des
190                                 traces, pour tracer des courbes
191
192     setlocalversion             calcule un numéro de version à partir du hash
193                                 du dernier commit (git)
194
195 * autres fichiers
196
197     .gitignore                  liste des fichiers ignorés par git
198     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
199                                 avec SimGrid 3.5