X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/ffc874c5572820b9e2533d6e7b01602bfd5909d2..97a4b4dbf628a627e3c2d5689be89265f56074df:/README diff --git a/README b/README index db47b28..d34cb4b 100644 --- a/README +++ b/README @@ -1,3 +1,14 @@ +Contenu +======= +* Compilation de SimGrid +* Compilation... +* Utilisation +* Communications +* Pour ajouter un nouvel algorithme d'équilibrage +* Pour ajouter une nouvelle option au programme +* Liste des fichiers +---------------------------------------------------------------------- + Compilation de SimGrid ====================== @@ -15,18 +26,92 @@ d'installation de SimGrid (par ex. /usr/local). Utilisation =========== -Pour avoir l'aide en ligne : -$ ./loba -hhh +Idée générale : on dispose d'une plate-forme (décrite dans le fichier +XML qui va bien), et on déploie dessus une application. La notion de +voisinage entre les processus est *liée à l'application*. Il faut +évidemment que la plate-forme sous-jacente autorise les communications +entre voisins... + +Pour avoir l'aide en ligne sur les différents paramètres : + $ ./loba -h (ou -hh, ou -hhh, pour plus de détails) Pour changer le niveau de détail des affichages : --log=category.thres:level avec category : simu, main, depl, comm, proc, loba et - level : trace, debug, verbose, info, warning, error, critical + level : trace, debug, verbose, info, warning, error, critical + +Pour plus de détail sur les options de logging : + http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use + +Communications +============== + +Pour communiquer, chaque processus écoute sur 2 mailboxes (sortes de +ports) : + - une pour les message de contrôle ; + - une pour les transferts de charge. + +Ceci afin d'éviter de bloquer les échanges d'information pendant un +transfert de charge. + +À la fin, chaque processus envoie un message "CLOSE" à tous ses +voisins (sur chaque mailbox), et attends d'avoir reçu deux messages par +voisin (un sur chaque mailbox). + +Ceci permet de synchroniser les processus à la terminaison (ça, à la +rigueur, on s'en fout un peu), et surtout de s'assurer qu'il n'y a +plus de communication qui « traîne » dans les canaux. + +Cela permet aussi de ne pas réarmer les communications non bloquantes +qu'on ne sait pas annuler proprement (un manque dans SimGrid). + +Il ne faut bien sûr plus envoyer de message après avoir envoyé un +"CLOSE". + +Attention : lors du déploiement de l'application, il faut s'assurer que +la relation de voisinage est symétrique ! +*Ce n'est pas vérifié par le programme.* + +Pour ajouter un nouvel algorithme d'équilibrage +=============================================== + +1. Imiter ce qui est fait pour loba_simple : + - définir une nouvelle classe dérivant de process + - attention, il faut construire le process explicitement + - redéfinir la méthode load_balance qui : + - reçoit en paramètre la charge à prendre en compte ; + - peut utiliser et éventuellement réordonner le tableau process::pneigh ; + - peut récupérer l'information de charge d'un voisin avec + pneigh[i]->get_load() ; + - définit la charge à envoyer avec + pneigh[i]->set_to_send(quantité) ; + - retourne la somme des quantités définies avec set_to_send, + éventuellement à l'aide de la méthode process::sum_of_to_send() + qui clacule cette somme. + +2. Ajouter l'algorithme dans la liste des options. Dans options.cpp : + - faire le #include adéquat ; + - ajouter une ligne NOL_INSERT(...) dans la liste existante + (dans loba_algorithms_type::loba_algorithms_type()). + +Pour ajouter une nouvelle option au programme +============================================= + +1. Ajouter une variable, déclarée dans options.h et définie dans options.cpp + (classement plus ou moins thématique). + +2. Toujours dans options.cpp, il faut : + - compléter la fonction opt::parse_args(), normalement le 3e paramètre à + getopt() et le switch..case qui suit (garder l'ordre alphabétique) ; + - compléter la fonction opt::print() (avec le même ordre que en 1.) ; + - compléter la fonction opt::usage() (avec le même ordre que en 1.). + +3. Utiliser la nouvelle variable au(x) bon(s) endroit(s) ! -Fichiers -======== +Liste de fichiers +================= * fichiers de description de plates-formes @@ -53,8 +138,8 @@ Fichiers hostdata.h gestion des boites de réception, par hôte hostdata.cpp - loba_simple.h load-balancing simple (à copier pour ajouter - loba_simple.cpp d'autres algorithmes) + loba_simple.h équilibrage simple + loba_simple.cpp (à imiter pour ajouter d'autres algorithmes) main.cpp le programme principal @@ -62,7 +147,7 @@ Fichiers misc.cpp named_object_list.h gestion d'une table de constructeurs - avec des noms et des descritpions + avec des noms et des descriptions neighbor.h un voisin pour un processus neighbor.cpp