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

Private GIT Repository
Add QUESTIONS, update TODO.
[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     machines1000.xml
129     platform.xml
130
131 * fichiers de description de déploiement (tests)
132
133     Dep.xml                     à utiliser avec Plat.xml
134     deployment.xml              à utiliser avec platform.xml
135
136 * fichiers sources
137
138     communicator.h
139     communicator.cpp            la couche de communication
140
141     cost_func.h
142     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
143
144     deployment.h
145     deployment.cpp              génération automatique de déploiement
146
147     hostdata.h                  gestion des boites de réception, par hôte
148     hostdata.cpp
149
150     loba_simple.h               équilibrage simple
151     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
152
153     loba_*.{h,cpp}              autres algos d'équilibrage
154
155     main.cpp                    le programme principal
156
157     misc.h                      divers trucs inclassables
158     misc.cpp
159
160     named_object_list.h         gestion d'une table de constructeurs
161                                 avec des noms et des descriptions
162
163     neighbor.h                  un voisin pour un processus
164     neighbor.cpp
165
166     options.h                   gestion des paramètres et options globaux
167     options.cpp
168
169     process.h                   classe de base pour un processus
170     process.cpp
171
172     simgrid_features.h          macros pour détecter la version de SimGrid
173
174     simple_async.cpp            un simple programme de test
175
176     timer.h                     gestion de timer
177
178     version.h                   gestion de la version du programme
179     version.cpp
180
181 * scripts
182
183     colorized-loba              script pour exécuter loba en colorant les
184                                 sorties
185
186     extract.pl                  outil d'extraction des données à partir des
187                                 traces, pour tracer des courbes
188
189     setlocalversion             calcule un numéro de version à partir du hash
190                                 du dernier commit (git)
191
192 * autres fichiers
193
194     .gitignore                  liste des fichiers ignorés par git
195     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
196                                 avec SimGrid 3.5