SoftWare/OarUtils

OarUtils - Ensemble d'outils lié à OAR et au calcul en particulier

 OAR est un gestionnaire de ressources et de tâches dont la fonction première est de gérer l'ordonnancement des travaux (job) sur un cluster.

OAR fonctionne globalement très bien, nous avons cependant détecté des points qui peuvent s'avérer pénalisant mais dont nous avons trouvé des solutions au final asse simple.

Variable d'environnement

Il peut y avoir un soucis avec les jobs MPI lorsque ceux-ci s'étendent sur plus d'une machine. La connexion inter-machine ne fonctionnant pas directement avec ssh il faut utiliser le wrapper oarsh fournit. Cependant, celui-ci ne transmet pas toutes les variables d'environnements... ce qui empêche le bon fonctionnement de nombreux code.

Nous avons donc développé deux solutions :

  • un wrapper de wrapper du nom d' oar-envsh. Un moyen simple d'utiliser la dernière version sans récupérer tout le repository est de faire :
    wget http://servforge.legi.grenoble-inp.fr/svn/soft-trokata/trunk/oarutils/oar-envsh
    chmod u+x ./oar-envsh
    
  • une fonction Bash utilisant l'option -x de mpirun de nom oar_envmpirun.

Outils

Nous avons la problématique de lancer des milliers de petits jobs séquentiels en parallèle. OAR supporte actuellement mal la charge d'avoir 20000 jobs dans la file d'attente.

Pour se faire, nous avons développé deux outils complémentaire :

  •  mpilauncher, un petit code MPI en C++ qui divise le nombre de travaux par le nombre de coeur du job maître. Chaque job est placé dans un thread MPI et lancé à la queue le leu. A noter que mpilauncher n'a aucune dépendance directe envers OAR.
  •  oar-parexec, un petit code en Perl utilisant  Coro. Chaque job est distribué de manière asynchrone et via oarsh, sur un des cœurs attribués au processus maître. A noter qu'oar-parexec distribue de manière optimale les jobs sur un cluster non homogène, ou si ces jobs n'ont pas un temps de calcul homogène. Un moyen simple d'utiliser la dernière version sans récupérer tout le repository est de faire :
    wget http://servforge.legi.grenoble-inp.fr/svn/soft-trokata/trunk/oarutils/oar-parexec
    chmod u+x ./oar-parexec
    

Un troisième outil viens compléter le dispositif afin de gérer des processus pas forcément séquentiels. Cet outil laisse OAR faire tout le travail d'ordonnancement et de placement...

  •  oar-dispatch, un petit code en Perl utilisant aussi  Coro. Comme oar-parexec, le code est donc asynchrone. Cependant, il prend en entrée une liste de job OAR dont il limitera le nombre dans la file d'attente d'OAR. Pour fonctionner, cette commande doit être lancée soit sur une frontale, soit dans un container OAR. Les sous jobs étant des job OAR à part entière (CPUSET...), il faut leur définir des ressources et peuvent donc être eux-mêmes parallèles...

Repository

L'ensemble du code est sous licence libre. Les scripts en bash sont sous GPL version 3 ou plus récente ( http://www.gnu.org/licenses/gpl.html), les sources C++ sont sous GPL version 2 ou plus récente, les scripts en perl sont sous la même licence que perl c'est à dire la double licence GPL et Artistic Licence ( http://dev.perl.org/licenses/artistic.html).

Tous les sources sont disponibles sur la forge du LEGI :  http://servforge.legi.grenoble-inp.fr/svn/soft-trokata/trunk/oarutils

Les sources sont gérés via subversion ( http://subversion.tigris.org/). Il est très facile de rester synchronisé par rapport à ces sources.

  • la récupération initiale
    svn checkout http://servforge.legi.grenoble-inp.fr/svn/soft-trokata/trunk/oarutils soft-oarutils
    
  • les mises à jour par la suite
    svn update
    

Il est possible d'avoir un accès en écriture à la forge sur demande motivée à  Gabriel Moreau. Pour des questions de temps d'administration et de sécurité, la forge n'est pas accessible en écriture sans autorisation. Pour des questions de décentralisation du web, d'autonomie et de non allégeance au centralisme ambiant (et nord américain), nous utilisons notre propre forge...

Vous pouvez proposer un patch par courriel d'un fichier particulier via la commande diff. A noter que svn propose par défaut le format unifié (-u). Deux exemples :

diff -u oar-parexec.org oar-parexec.new > oar-parexec.patch
svn diff oar-parexec > oar-parexec.patch

On applique le patch (après l'avoir lu et relu) via la commande

patch -p0 < oar-parexec.patch