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

Private GIT Repository
Bug fixed: use a timeout on receive.
[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      - reçoit en paramètre la charge à prendre en compte ;
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            pneigh[i]->set_to_send(quantité) ;
101      - retourne la somme des quantités définies avec set_to_send, 
102        éventuellement à l'aide de la méthode process::sum_of_to_send()
103        qui clacule cette somme.
104
105 2. Ajouter l'algorithme dans la liste des options.  Dans options.cpp :
106    - faire le #include adéquat ;
107    - ajouter une ligne NOL_INSERT(...) dans la liste existante
108      (dans loba_algorithms_type::loba_algorithms_type()).
109
110 Pour ajouter une nouvelle option au programme
111 =============================================
112
113 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
114    (classement plus ou moins thématique).
115
116 2. Toujours dans options.cpp, il faut :
117    - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
118      getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
119    - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
120    - compléter la fonction opt::usage() (avec le même ordre que en 1.).
121
122 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
123
124 Liste de fichiers
125 =================
126
127 * fichiers de description de plates-formes
128
129     Plat.xml
130     cluster1000.xml
131     platform.xml
132
133 * fichiers de description de déploiement (tests)
134
135     Dep.xml                     à utiliser avec Plat.xml
136     deployment.xml              à utiliser avec platform.xml
137
138 * fichiers sources
139
140     communicator.h
141     communicator.cpp            la couche de communication
142
143     cost_func.h
144     cost_func.cpp               fonctions de coût pour comm_cost et comp_cost
145
146     deployment.h
147     deployment.cpp              génération automatique de déploiement
148
149     hostdata.h                  gestion des boites de réception, par hôte
150     hostdata.cpp
151
152     loba_simple.h               équilibrage simple
153     loba_simple.cpp             (à imiter pour ajouter d'autres algorithmes)
154
155     loba_*.{h,cpp}              autres algos d'équilibrage
156
157     main.cpp                    le programme principal
158
159     misc.h                      divers trucs inclassables
160     misc.cpp
161
162     named_object_list.h         gestion d'une table de constructeurs
163                                 avec des noms et des descriptions
164
165     neighbor.h                  un voisin pour un processus
166     neighbor.cpp
167
168     options.h                   gestion des paramètres et options globaux
169     options.cpp
170
171     process.h                   classe de base pour un processus
172     process.cpp
173
174     simgrid_features.h          macros pour détecter la version de SimGrid
175
176     simple_async.cpp            un simple programme de test
177
178     timer.h                     gestion de timer
179
180     version.h                   gestion de la version du programme
181     version.cpp
182
183 * fichiers auto-générés
184
185     misc_autogen.h              définition des macros XCLOG(...)
186
187 * scripts
188
189     colorized-loba              script pour exécuter loba en colorant les
190                                 sorties
191
192     extract.pl                  outil d'extraction des données à partir des
193                                 traces, pour tracer des courbes
194
195     setlocalversion             calcule un numéro de version à partir du hash
196                                 du dernier commit (git)
197
198 * autres fichiers
199
200     .gitignore                  liste des fichiers ignorés par git
201     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
202                                 avec SimGrid 3.5