| | 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... |