Comprendre et apprivoiser le batch


Objectif :

Éviter que deux jobs tournent sur le même noeud alors que le reste de
la machine est libre.

Inconvénients de tourner sur le même noeud :
- accès au même disque
- gestion mémoire
- communication vers le frontal par la même carte réseau
- ...


Cause :

Le gestionnaire de batch scrute les noeuds en commençant toujours par
le noeud 0 jusqu'à ce qu'il trouve un noeud avec un processeur libre.


Remède :

Éviter de tourner sur les mêmes noeuds que les jobs présents 
sur le cluster.

1/ Identification

* faire un "qstat" pour voir l'état de la machine :

[cros@gmfe3 cros]$ qstat
Job id           Name             User             Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
2581.gmfe3       olmjob           olm              58:41:47 R One


* Déterminer le noeud sur lequel tourne le job, refaire un "qstat"
mais avec l'option "-f" :

[cros@gmfe3 cros]$ qstat -f
Job Id: 2581.gmfe3.cemif.univ-evry.fr
    Job_Name = olmjob
    Job_Owner = olm@gmfe3.cemif.univ-evry.fr
    resources_used.cput = 58:35:53
    resources_used.mem = 7944kb
    ...
    exec_host = node0/0
    ...

L'information pertinente est "exec_node" qui en l'occurrence indique
que le job tourne sur le noeud 0 et le processeur 0.

Si un noeud est libre, alors on peut passer à la suite,
sinon lancer normalement son job.


2/ Évitons les noeuds déjà occupés par un job :


Si maintenant, un autre job est lancé, suivant la logique implacable
du gestionnaire de batch, il s'exécutera sur le même noeud.

Pour éviter cela, il suffit de lancer un job dont le script contient
à la place du nom de votre code, l'instruction «sleep 240» 
(commande Unix qui demande une temporisation de 240 secondes)
Ce job va alors se placer sur le noeud 0 et alors on dispose de 
240 secondes pour lancer le job de calcul qui ira tourner SEUL sur 
le noeud 1

Il est possible de rencontrer des situations plus complexes,
comme par exemple :

job sur le noeud 0 – processeur 1
job sur le noeud 1 – processeur 0

Dans ce cas, un job lancé sans précaution ira se placer sur le 
noeud 0 – processeur 0. Il faut donc lancer deux jobs avec 
temporisation pour atteindre le noeud 2.