| 28 | |
| 29 | == Outils == |
| 30 | |
| 31 | Nous avons la problématique de lancer des milliers de petits jobs séquentiels en parallèle. |
| 32 | OAR supporte actuellement mal la charge d'avoir 20000 jobs dans la file d'attente. |
| 33 | |
| 34 | Pour se faire, nous avons développé deux outils complémentaire : |
| 35 | |
| 36 | * {{{mpilauncher}}}, un petit code MPI en C++ qui divise le nombre de travaux par le |
| 37 | nombre de coeur du job maître. Chaque job est placé dans un thread MPI |
| 38 | et lancé à la queue le leu. |
| 39 | A noter que {{{mpilauncher}}} n'a aucune dépendance directe envers OAR. |
| 40 | |
| 41 | * {{{oar-parexec}}}, un petit code en Perl utilisant [http://search.cpan.org/dist/Coro/ Coro]. |
| 42 | Chaque job est distribué de manière asynchrone et via {{{oarsh}}}, |
| 43 | sur un des coeurs attribués au processus maître. |
| 44 | A noter qu'{{{oar-parexec}}} distribue de manière optimale les jobs sur un cluster non homogène, |
| 45 | ou si ces jobs n'ont pas un temps de calcul homogène. |
| 46 | |
| 47 | Un troisième outil viens compléter le dispositif afin de gérer des processus pas forcément séquentiels. |
| 48 | Cet outil laisse OAR faire tout le travail d'ordonnancement et de placement... |
| 49 | |
| 50 | * {{{oar-dispatch}}}, un petit code en Perl utilisant aussi [http://search.cpan.org/dist/Coro/ Coro]. |
| 51 | Comme {{{oar-parexec}}}, le code est donc aysnchrone. |
| 52 | Cependant, il prend en entrée une liste de job OAR |
| 53 | dont il limitera le nombre dans la file d'attente d'OAR. |
| 54 | Pour fonctionner, cette commande doit être lancée soit sur une frontale, |
| 55 | soit dans un container OAR. |
| 56 | Les sous jobs étant des job OAR à part entière (CPUSET...), |
| 57 | il faut leur définir des ressources et peuvent donc être eux-mêmes parallèles... |