#!/bin/bash #------------------- CHECKPOINT DMTCP ex1 --------------------------- # # Ce programme met en œuvre le checkpoint via dmtcp de la façon la # plus simple qui soit en utilisant l'option [ -i secondes ] de # dmtcp. les échanges de signaux entre ce script OAR et le programme # sont complètement ignorés, de sorte que l'option «idempotent» d'OAR # est inutile: il n'y a pas de redémarrage automatique. L'utilisateur # doit relancer lui-même relancer ce script. Il peut toutefois être # utile: # - ex1: programme de 200 h, un checkpoint toutes les 24h (au cas où...?) # - ex2: limiter les ressources demandées en prenant le risque d'un # walltime « trop court »: il suffira de relancer à partir d'un # checkpoint. # commande: oarsub -S ./checkpoint-dmtcp1.oar # infos: http://dmtcp.sourceforge.net/ # PRINCIPE: # # - le programme est lancé via dmtcp_launch -i x ./PROG, où "x" (secondes) # inférieur au walltime prévu dans l'es paramètre OAR. # - deux cas se présentent: # 1) le programme finit dans les temps, très bien. # 2) le programme ne finit pas avant le walltime: il suffit de relancer # ce même script qui repartira à partir du checkpoint # - c'est le cas 2) qui est mis en œuvre ici: timer 4mn /walltime 3mn #-------------- paramètres OAR--------------------------- # walltime de 3mn ( donc trop court pour le prog/timer de 4mn) #OAR -l cpu=1/core=1,walltime=00:3:00 #OAR -n dmtcp_ex1 # Les fichiers de sortie sans paramètres $OAR_JOBID # (=> les jobs successifs écrivent dans les mêmes fichiers) #OAR -O OAR-ckpt-dmtcp1.out #OAR -E OAR-ckpt-dmtcp1.err #OAR -q default # les tests sont mis au point sur orval08. # Note: une reprise de checkpoint sur une autre machine nécessite # l'édition du script dmtcp_restart_script.sh #OAR -p network_address = 'orval08' # optionnel #OAR -t besteffort # chargement du modeul dmtcp source /nfs/opt/env/env.sh module load dmtcp #---------- la tâche à exécuter ------------------------ # compilation ( ) gcc simpleCompteur4mn.c -o stimer4mn #----------- pré-traitement ----------------------------- # DWTFYW ! echo "Debut du jobs ou restart ?" # si c'est une reprise if [ -f dmtcp_restart_script.sh ]; then echo " -> reprise du job " # piste (changement de nœuds): sed -i '/ancien_noeud/nouveau_noeud/' dmtcp_restart_script.sh # (-> testé -OK- a la mano, à scripter!) ./dmtcp_restart_script.sh else # 1er démarrage avec ordre de checkpoint toutes les 2mn 50 (walltime 3mn) # Rq: sur un vrai exemple, prendre plus de marge! echo " -> Debut du jobs" dmtcp_launch -i 170 ./stimer4mn # pas d'éperluette! (&) sinon le script OAR # continue et les checkpoint supprimés cf plus bas fi #--------------------------------------------------------- # fin du programme: postraitement #--------------------------------------------------------- # DWTFYW! echo "---post treatement---" # suppression des ckpt (ménage) echo "fin effective du programme, suppression des checkpoints" rm ckpt_*.dmtcp dmtcp_restart_script* exit $?