checkpoint-dmtcp2.oar 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/bin/bash
  2. #------------------- CHECKPOINT DMTCP ex2 ---------------------------
  3. #
  4. # Ce programme fait suite à l'exemple checkpoint-dmtcp1.oar.
  5. # le programme est "trop long", un système de checkpoint/restart
  6. # est bienvenu :
  7. # - pour tenir dans la queue "default" ( trop de ressources )
  8. # - par sécurité ( ne pas repartir de zéro en cas de ...?
  9. # - parce que, contrairement à l'ex. checkpoint-user1.oar, la
  10. # gestion du checkpoint au sein du programme utilisateur
  11. # (sauvegarde de tout le contexte, est trop compliqué)
  12. # commande: oarsub -S ./checkpoint-dmtcp2.oar
  13. # PRINCIPE:
  14. # Dans cette exemple, le cycle start/checkpoint/restart jusqu' à la fin
  15. # du job est automatique:
  16. # - le programme est lancé via dmtcp_launch ./PROG
  17. # - OAR est lancé avec l'option checkpoint
  18. # - le signal checkpoint OAR déclenche le checkpoint de PROG via dmtcp
  19. # (génère le fichier ckpt_xxxxxxx et le script dmtp_restart_script_.sh)
  20. # - l'option idempotent (OAR) relance dmtcp_restart_script.sh
  21. # - le tout, autant de fois que nécessaire
  22. # infos: http://dmtcp.sourceforge.net/
  23. #-------------- paramètres OAR---------------------------
  24. # walltime de 6mn ( donc trop court pour le prog/timer de 10mn)
  25. #OAR -l cpu=1/core=1,walltime=00:6:00
  26. #OAR -n dmtcp_ex2
  27. # Les fichiers de sortie sans paramètres $OAR_JOBID
  28. # (=> les jobs successifs écrivent dans les mêmes fichiers)
  29. #OAR -O OAR-ckpt-dmtcp2.out
  30. #OAR -E OAR-ckpt-dmtcp2.err
  31. #OAR -q default
  32. # À supprimer (détailler?)
  33. #OAR -p network_address = 'orval08'
  34. #OAR -t besteffort
  35. #OAR -t idempotent
  36. # checkpoint OAR 60 s avant le walltime (donc ~4mn)
  37. # Pour un exemple réel ( plusieurs heures, gros contexte, 600s (10mn))
  38. #OAR --checkpoint 60
  39. # signal envoyé par OAR (SIGUSR2)
  40. #OAR --signal 12
  41. # chargement du modeul dmtcp
  42. source /nfs/opt/env/env.sh
  43. module load dmtcp
  44. #---------- la tâche à exécuter ------------------------
  45. # compilation ( )
  46. gcc simpleCompteur10mn.c -o stimer10mn
  47. #----------- pré-traitement -----------------------------
  48. # DWTFYW !
  49. echo "Debut du jobs ou restart ?"
  50. # lancement du programme, récupération du PID
  51. if [ -f dmtcp_restart_script.sh ]; then
  52. echo " -> reprise du job "
  53. ./dmtcp_restart_script.sh &
  54. PROGPID=$!
  55. else
  56. echo " -> Debut du jobs"
  57. dmtcp_launch ./stimer10mn &
  58. PROGPID=$!
  59. fi
  60. #---------------------------------------------------------
  61. # gestion du checkpoint OAR
  62. #---------------------------------------------------------
  63. # fonction de traitement du signal OAR
  64. sighandler() {
  65. echo "reception checkpoint OAR (signal12)"
  66. # demande de checkpoint (-c) au coordinateur dmtcp
  67. dmtcp_command -c
  68. sleep 5
  69. [ -n "$PROGPID" ] && kill -9 $PROGPID
  70. SCRIPT_CHECKPOINTED="YES"
  71. }
  72. # signal Unix attendu par OAR (defaut = SIGUSR1/10, forcé ici
  73. # à 12 par le paramètre --signal 12 (cf. param OAR au début)
  74. CHKPNT_SIGNAL=12
  75. # valeur de sortie pour l'option "--idempotent"
  76. # (restart automatique) )
  77. EXIT_UNFINISHED=99
  78. # indique au script OAR de capter le signal 12
  79. trap sighandler $CHKPNT_SIGNAL
  80. # wait indispensable pour maintien des communucations
  81. # (signaux) entre ce script et le PROG
  82. while kill -0 "$PROGPID" 2>/dev/null; do
  83. wait $PROGPID
  84. done
  85. # important : le code 99 doit être retourné pour que l'option
  86. # idempotent ( relance auto.) soit effective
  87. [ -n "$SCRIPT_CHECKPOINTED" ] && exit 99
  88. #---------------------------------------------------------
  89. # fin du programme: postraitement
  90. #---------------------------------------------------------
  91. # DWTFYW!
  92. echo "---post treatement---"
  93. # suppression des ckpt
  94. echo "c'est FINI (10mn)! ... suppression des checkpoints"
  95. rm ckpt_*.dmtcp dmtcp_restart_script*
  96. # => idempotent devrait entraîner un redémarrage auto.
  97. exit $?