Parcourir la source

checkpoint ajout ex6: dmtcp sur scratch

Philippe Marion il y a 7 ans
Parent
commit
ae1c68ffde

+ 5 - 1
checkpoint/README-checkpoint.md

@@ -17,4 +17,8 @@ Note: mise en œuvre de  DMTCP (Distributed MultiThreaded Checkpointing) http://
 
 ### autres exemples et tests
 
-- **OpenMP**: checkpoint-dmtcp-openmp4.oar, checkpoint-dmtcp-openmp5.oar avec le programme timing-matmul2000.f90
+- **OpenMP**: 
+    - checkpoint-dmtcp-openmp4.oar (avec le programme timing-matmul2000.f90)
+	- checkpoint-dmtcp-openmp5.oar (avec le programme timing-matmul2000.f90)
+
+- **Scratch**: checkpoint-dmtcp-scratch-ex6.oar (scratch-ex6.tgz) : les calculs sont effectués sur l'espace local (scratch). 

+ 191 - 0
checkpoint/checkpoint-dmtcp-scratch-ex6.oar

@@ -0,0 +1,191 @@
+#!/bin/bash
+
+#-------------------  CHECKPOINT  DMTCP ex6 --------------------------- 
+#  
+#
+# commande: oarsub -S ./checkpoint-dmtcp-scratch-ex6.oar
+
+
+#  L'exemple 6 met en oeuvre la possibilité d'effectuer un checkpoint
+#  en travaillant sur le répertoire scratch ET avec une reprise
+#  automatique (option idemtpotent) sur un nœud potentiellement
+#  différent à chaque redémarrage. 
+#  - la seule difficulté est de récupérer les checkpoints sur le HOME_DIR
+#    à chaque fin de run «avorté» (si le walltime est atteint)
+#  - Pour la demo:
+#       - le timer est de 20 minutes
+#       - le walltime fixé à 10mn
+#       - donc 3 runs avec l'option --checkpoint 120 (checkpoint 10mn-120s=8mn)
+
+
+#-------------- paramètres OAR---------------------------
+
+# walltime de 10min
+#OAR -l core=1,walltime=00:10:00 
+#OAR -n dmtcp-scratch
+
+#les jobs successifs ecrivent dans des fichiers différents
+
+#OAR -O OAR-ckpt-dmtcp-ex6.%jobid%.out
+#OAR -E OAR-ckpt-dmtcp-ex6.%jobid%.err
+
+#OAR -q default
+
+# A EDITER apres consultation de :
+#  https://www-calculco.univ-littoral.fr/outils_visu/drawgantt/
+# Si pour une raison d'architecture ( option de compilation)
+# il faut des hôtes/processeurs du même type, par ex: 
+##OAR -p nodemodel = 'Dell_R630' 
+# ou:
+##OAR -p nodemodel = 'Dell_R820' 
+
+# au choix : default ou besteffort
+#OAR -t besteffort
+
+# pour une relance auto (c'est l'objectif!)
+#OAR -t idempotent
+
+# checkpoint OAR 120 s avant le walltime 
+# Pour un exemple réel ( plusieurs heures, gros contexte, 600s (10mn))
+
+#OAR --checkpoint 120
+
+# chargement du module dmtcp
+source /nfs/opt/env/env.sh   > /dev/null 2>&1
+module load dmtcp  > /dev/null 2>&1
+
+#---------- la tâche à exécuter   ------------------------ 
+# doit être contenu dans l'archive ./RUN_DIR.tgz
+
+PROG=timer20mn
+RUN_DIR=scratch-ex6
+
+#----------- pré-traitement -----------------------------
+
+GROUP=$(id -gn $OAR_USER)
+
+# Création du répertoire temporaire local dans scratch
+
+#SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME.$OAR_JOBID
+SCRATCHDIR=/scratch/$GROUP/$OAR_USER/$OAR_JOB_NAME
+[ ! -d $SCRATCHDIR ] && mkdir $SCRATCHDIR
+
+# Recopie de l'archive du  programme (et éventuels checkpoints
+# et données des runs précendents) dans le répertoire
+
+cd $SCRATCHDIR
+
+# au 1er lancement, par exemple:
+# backup de l'archive dans le rép d'origine
+# (celle-ci est modifiée à chaque run car contient les checkpoints)
+
+if [ ! -f $OAR_WORKDIR/$RUN_DIR.tgz.ORG ]; then
+    cp $OAR_WORKDIR/$RUN_DIR.tgz $OAR_WORKDIR/$RUN_DIR.tgz.ORG
+fi
+
+# copie sur le scratch
+cp $OAR_WORKDIR/$RUN_DIR.tgz .
+# deploiement de l'archive
+tar xzf $RUN_DIR.tgz 
+# supression de l'archive
+rm $RUN_DIR.tgz
+cd $RUN_DIR
+# sur quel noeud sommes-nous? 
+/bin/hostname
+echo "Debut du jobs ou restart ?"
+
+# si c'est une reprise
+if [ -f dmtcp_restart_script.sh ]; then
+    LAST_HOST=`cat hostname.txt`
+    # sur quel noeud ?
+    /bin/hostname
+    # si le dernier run était sur un autre noeud, modifier
+    # le script de redémarrage
+    if  [ $(hostname) != $LAST_HOST ]; then
+	echo " -> reprise du job sur autre noeud"
+	NEW_HOST=`/bin/hostname`
+	sed -i s/"$LAST_HOST"/"$NEW_HOST"/g dmtcp_restart_script.sh
+	# optionnel (pour debug)
+	cp hostname.txt hostname_last.txt
+	# backup du nouvel hostname
+	/bin/hostname > hostname.txt
+    else
+	echo "-> reprise sur le meme noeud"
+    fi
+    # relancer depuis le dernier checkpoint
+    ./dmtcp_restart_script.sh &
+    PROGPID=$!
+else
+    echo "  -> Debut du jobs"
+    # sauvegarde du hostname 
+    /bin/hostname > hostname.txt
+    dmtcp_launch  ./timer20mn &
+    PROGPID=$!    
+fi
+
+#---------------------------------------------------------
+# gestion du checkpoint  OAR  
+#---------------------------------------------------------
+
+# fonction de traitement du signal OAR
+sighandler() {
+    echo "reception checkpoint OAR (signal12)"
+    # demande de checkpoint (-c) au coordinateur dmtcp
+    dmtcp_command -c
+    sleep 5
+    # regroupement et ménage pour la relance du job
+    # ---------------------------------------------
+    mv $OAR_STDOUT .
+    mv $OAR_STDERR .
+    # archivage des fichiers :hosts, checkpoints ...
+    cd ..
+    tar czf $RUN_DIR.tgz ./$RUN_DIR
+    # recopie sur  $HOME
+    mv $RUN_DIR.tgz $OAR_WORKDIR
+    # menage
+    cd ..
+    rm -rf $SCRATCHDIR
+    # suicide avant que LEON s'en occupe!
+    [ -n "$PROGPID" ] && kill -9 $PROGPID
+    SCRIPT_CHECKPOINTED="YES"
+    }
+
+# signal Unix attendu par OAR (defaut = SIGUSR1/10, forcé ici
+# à 12 par le paramètre --signal 12 (cf. param OAR au début)
+CHKPNT_SIGNAL=12
+
+# valeur de sortie pour l'option "--idempotent"
+# (restart automatique) )
+EXIT_UNFINISHED=99
+
+# indique au script OAR de capter le signal 12 
+trap sighandler  $CHKPNT_SIGNAL
+
+# wait indispensable pour maintien des communucations
+# (signaux) entre ce script et le PROG
+while kill -0 "$PROGPID" 2>/dev/null; do
+    wait $PROGPID
+done
+
+# important : le code 99 doit être retourné pour que l'option
+# idempotent ( relance auto.) soit effective
+[ -n "$SCRIPT_CHECKPOINTED" ] && exit 99
+
+
+#---------------------------------------------------------
+# fin du programme:  postraitement 
+#---------------------------------------------------------
+# DWTFYW!
+echo "---post treatement---"
+# suppression des ckpt (ménage)
+echo "fin effective du programme, suppression des checkpoints"
+rm -f ckpt_*.dmtcp dmtcp_restart_script*
+# a supprimer?
+mv hostname.txt last_hostname.txt
+cd ..
+cp -rp $RUN_DIR $OAR_WORKDIR
+cd ..
+rm -rf $SCRATCHDIR
+# écrasement de la dernière archive intermédiaire par l'originale
+mv $OAR_WORKDIR/$RUN_DIR.tgz.OAR $OAR_WORKDIR/$RUN_DIR.tgz
+exit $?

BIN
checkpoint/scratch-ex6.tgz