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

Private GIT Repository
37c51be8ede9d6dde9e61ea327459fc699ea6dd3
[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
103 2. Ajouter l'algorithme dans la liste des options.  Dans options.cpp :
104    - faire le #include adéquat ;
105    - ajouter une ligne NOL_INSERT(...) dans la liste existante
106      (dans loba_algorithms_type::loba_algorithms_type()).
107
108 Pour ajouter une nouvelle option au programme
109 =============================================
110
111 1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp
112    (classement plus ou moins thématique).
113
114 2. Toujours dans options.cpp, il faut :
115    - compléter la fonction opt::parse_args(), normalement le 3e paramètre à
116      getopt() et le switch..case qui suit (garder l'ordre alphabétique) ;
117    - compléter la fonction opt::print() (avec le même ordre que en 1.) ;
118    - compléter la fonction opt::usage() (avec le même ordre que en 1.).
119
120 3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) !
121
122 Liste de fichiers
123 =================
124
125 * fichiers de description de plates-formes
126
127     Plat.xml
128     cluster1000.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 * fichiers auto-générés
182
183     misc_autogen.h              définition des macros XCLOG(...)
184
185 * scripts
186
187     colorized-loba              script pour exécuter loba en colorant les
188                                 sorties
189
190     extract.pl                  outil d'extraction des données à partir des
191                                 traces, pour tracer des courbes
192
193     setlocalversion             calcule un numéro de version à partir du hash
194                                 du dernier commit (git)
195
196 * autres fichiers
197
198     .gitignore                  liste des fichiers ignorés par git
199     valgrind_suppressions_3.5   liste de quelques suppressions pour valgrind
200                                 avec SimGrid 3.5