Surveiller le cluster


Normalement les administrateurs du cluster (groupe sila) sont alertés par mail lorsque un ou plusieurs nœuds passent dans l'état DOWN (cf. SlurmTrigger). Toutefois, il n'est pas inutile de faire une surveillance active pour prévenir tout problème.

1. Démarche basée 'frontale utilisateur'

L'administrateur peut vérifier le bon fonctionnement du cluster en utilisant la démarche suivante :

Ces opérations peuvent être accomplies quotidiennement pour prévenir tout problème. Les détails sont donnés ci-dessous.

2. Détecter un problème en visualisant l'état des jobs

Lancer simplement la commande squeue et vérifier la raison pour laquelle un job est en attente d'exécution (statut PD pour Pending) en regardant la colonne NODELIST(REASON). Les raisons normales sont (Resources) et (Priority) : toute autre raison peut refléter un problème.

Voici un exemple intéressant ou tout paraît normal :

summit2:~ # squeue
  JOBID PARTITION     NAME     USER  ST       TIME  NODES  CPUS  NODELIST(REASON)
   1249 mono_long script_g     saub  PD       0:00      1     8  (Resources)
   1042 mono_long      ref     ulsc   R 3-05:23:30      1     2  n4
   1128 mono_long script_g     saub   R 1-02:44:18      1     8  n2
   1150 mono_long  nutrho2     ulsc   R 2-19:54:49      1     2  n4
   1245 mono_long sc_g4_v0     saub   R      52:32      1     8  n1
   1248 mono_long script_g     saub   R 1-03:47:04      1     8  n3
   1251 mono_long sc_geos5     saub   R 1-03:17:42      1     8  n6
   1254 mono_long sc_g5_v0     saub   R 1-02:55:35      1     8  n7
   1315 mono_long run_meso     bers   R   20:15:18      1     1  n4
    956  mpib40_8  job.mpi     nguc   R 4-15:03:26      2    16  n[33-34]
    542 o3pflexlo launch_p     boud  PD       0:00      1     8  (Resources)
    543 o3pflexlo launch_p     boud  PD       0:00      1     8  (Priority)
    544 o3pflexlo launch_p     boud  PD       0:00      1     8  (Priority)
    545 o3pflexlo launch_p     boud  PD       0:00      1     8  (Priority)
    541 o3pflexlo launch_p     boud   R 2-02:17:09      1     8  n126
    538 o3pflexwo launch_p     boud  PD       0:00      1     8  (Resources)
    539 o3pflexwo launch_p     boud  PD       0:00      1     8  (Priority)
    537 o3pflexwo launch_p     boud   R 1-14:39:35      1     8  n125
   1262 o3pgeoslo sc_g4_v3     saub   R 1-00:58:42      1     8  n128

Pourtant, on peut se demander pourquoi le job 1249 demandant 1 noeud est en attente de ressource alors que la partition mono_long n'est pas saturée comme on peut le voir avec :

summit2:~ # sinfo -p mono_long
PARTITION AVAIL  TIMELIMIT NODES   CPUS(A/I/O/T) STATE  NODELIST
mono_long up    15-00:00:0     2       0/16/0/16 idle~  n[5,8]
mono_long up    15-00:00:0     6       45/3/0/48 alloc  n[1-4,6-7]

indiquant que les noeuds 5 et 8 sont libres. Il est alors possible d'extraire plus d'informations sur un job avec la commande :

scontrol show jobs <job-id>

Dans notre cas, la commande précédente appliquée au job 1249 nous révèle que le noeud n3 a été spécifié lors de l'allocation du job (avec l'option -w n3) car ReqNodeList=n3 dans les lignes suivantes :

summit2:~ # scontrol show jobs 1249
JobId=1249 Name=script_geos4.sh
   UserId=saub(1601) GroupId=O3P(600)
   Priority=4294899374 Account=(null) QOS=(null)
   JobState=RUNNING Reason=None Dependency=(null)
   TimeLimit=15-00:00:00 Requeue=1 Restarts=0 BatchFlag=1 ExitCode=0:0
   SubmitTime=2010-07-09T12:29:00 EligibleTime=2010-07-09T12:29:00
   StartTime=2010-07-10T16:40:48 EndTime=2010-07-25T16:40:48
   SuspendTime=None SecsPreSuspend=0
   Partition=mono_long AllocNode:Sid=summit2:8832
   ReqNodeList=n3 ExcNodeList=(null)
   NodeList=n3
   NumNodes=1 NumCPUs=8 CPUs/Task=8 ReqS:C:T=65534:65534:65534
   MinCPUsNode=8 MinMemoryNode=0 MinTmpDiskNode=0
   Features=(null) Reservation=(null)
   Shared=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=/home2/saub/GEOS-Chem.v8-02-01.stdrun/runs/v8-02-01/geos4_v1/script_geos4.sh
   WorkDir=/home2/saub/GEOS-Chem.v8-02-01.stdrun/runs/v8-02-01/geos4_v1

{i} ReqNodeList=(null) lorsqu'aucun numéro de noeud n'est spécifié au cours de l'allocation.

3. Détecter un problème en visualisant l'état des noeuds

Il est très facile de repérer un noeud qui se trouve dans l'état DOWN vis à vis du gestionnaire de ressource et d'en afficher la raison par la commande :

sinfo -R

3.1. Nœud forcé à DOWN par l'administrateur

Dans l'exemple ci-dessous rien n'est anormal puisque la raison est connue de l'administrateur :

summit2:~ # sinfo -R
REASON               USER      TIMESTAMP           NODELIST
Test sila            root      2012-02-15T09:19:10 n140

En effet ce résultat peut apparaître si l'administrateur a inséré dans le fichier de configuration Slurm (/usr/local/slurm/etc/slurm.conf) les lignes suivantes :

#
# DownNodes
#
DownNodes=n140 Reason="Test sila" State="DOWN"

ou bien s'il a lancé en interactif la commande scontrol suivante (cas le plus probable) :

summit2:~ # scontrol update nodename=n140 state=down reason="Test sila"

3.2. Nœud DOWN car 'Not responding'

Il y a un problème qui nécessite une intervention lorsque la raison retournée est Not responding comme dans l'exemple ci-dessous :

REASON               USER      TIMESTAMP           NODELIST
Not responding       slurm     2012-02-23T09:41:14 n231

La valeur de TIMESTAMP fournit la date et l'heure à laquelle le nœud est déclaré DOWN par Slurm. Généralement ce problème survient à cause d'un mauvais boot du nœud réveillé par Slurm1. Sur Summit2, Slurm est configuré pour marquer Down un nœud qui n'a pas donné signe de vie 20 minutes après la demande de démarrage (variable ResumeTimeout=1200 dans slurm.conf). Par conséquent, le nœud a vraisemblablement reçu une demande de 'power on' vers l'instant : TIMESTAMP-20mn. La procèdure à suivre pour traiter ce problème est détaillée dans RéactiverNoeudDown.

  1. Le script qui se charge de réveiller un nœud est : ResumeProgram=/etc/beowulf_UF/scripts/slurm_ResumeNodes. (1)

3.3. Nœud DOWN dû à un reboot

Il peut arriver qu'un nœud en activité (dans l'état idle ou alloc) redémarre suite à une intervention sur la frontale d'administration (une perte de connexion avec le nœud, un arrêt/redémarrage souhaité par l'administrateur) ou un problème sur le nœud. Dans ce cas, lorsqu'il termine sa phase de boot en démarrant le démon slurmd, le gestionnaire de ressource force l'état du nœud à DOWN et notifie les administrateurs par mail avec un message de la forme :

REASON                                   USER       TIMESTAMP                 NODELIST                                
Node unexpectedly rebooted               slurm      2012-07-30T11:28:30       n231                               

Le nœud en question restera dans l'état DOWN tant que l'administrateur n'aura pas explicitement modifié cet état par la commande scontrol state=resume ci-dessous. Pour remettre le nœud en service vis à vis de Slurm, il faut impérativement que l'administrateur intervienne manuellement sur la frontale Summit2 en exécutant la ligne de commande :

summit2:~ # scontrol update nodename=n231 state=resume

Nous avons choisi ce type de comportement en initialisant ReturnToService=1 dans le fichier de configuration de Slurm /usr/local/slurm/etc/slurm.conf de manière à rester toujours informé d'un reboot intempestif des nœuds.


CatégoriePageAdmin

WikiSummit2: SurveillanceCluster (dernière édition le 2012-07-30 13:40:06 par DidierGazen)