BLCR

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Sommaire

Description

BLCR (Berkeley Lab Checkpoint/Restart) est un module du noyau de Linux qui a pour but de fournir une bibliothèque robuste de qualité production pour sauvegarder une vaste gamme d'applications sans nécessiter la modification du code de l'application. Le module se concentre sur la sauvegarde d'applications parallèles qui communiquent via MPI.

Limitations

  1. Les sockets TCP/IP ne sont pas sauvegardés ou rouverts.
  2. Pas de soutien pour les appels SysV IPC (interprocess call)
  3. Les processus zombie ne sont pas restaurés.
  4. Pas de soutien pour les applications liées statiquement.
  5. Pas de soutien pour les appels MPI-2 (communications à sens unique et MPI-IO).
  6. Une opération d'écriture est effectuée pour chaque unité de mémoire virtuelle contiguë. Si votre application a une structure de données complexe (par exemple, liste chaînée, arbre), les performances de sauvegarde pourraient être limitées.

Script easy_blcr.sh (Colosse uniquement)

Afin de faciliter les sauvegardes et redémarrages en utilisant BLCR, l'équipe de Colosse a rédigé un script qui rend la procédure très simple à l'utilisateur. Il s'agit de sourcer le fichier « /clumeq/bin/easy_blcr.sh » et de lancer vos programmes en utilisant les commandes « ckpt_run » ou « ckpt_run_task » après avoir réglé certains paramètres dans votre script de soumission. Le principe est relativement simple. La commande lance l'application via BLCR, puis lance un démon (daemon) qui observe l'exécution de l'application et commande des sauvegardes à intervalle régulier. Lors du lancement de la tâche, le script détecte automatiquement la présence d'anciens points de sauvegarde et relance à partir du dernier dans le cas où il existe.

Exemple #1

Voici un exemple où la sauvegarde serait réalisée automatiquement à toutes les heures.


Fichier : submit-blcr.sh
#!/bin/bash
#PBS -S /bin/bash
#PBS -N NOM       # Nom de la tâche
#PBS -A xxx-yyy-zz   # Identifiant Rap; ID
#PBS -l walltime=24:00:00    # Durée en secondes
#PBS -l nodes=1:ppn=8  # Nombre de processus. Doit être 8.
 
cd $PBS_O_WORKDIR
 
 
source /clumeq/bin/easy_blcr.sh
####################
## CONFIGURE
####################
CKPT_DELAY=60 					# Delay between checkpoints, in minutes
#CKPT_KEEP_BACKUPS=1 				# Do we keep backups of all checkpoints ?
#CKPT_DIR=checkpoints 				# Directory for the checkpoints
#CKPT_FILE=ckpt 				# Filename for the checkpoints
#CKPT_RESTART_FILE=$CKPT_FILE  		  	# Restart from this checkpoint file
#CKPT_LOG_FILE=ckpt.log 			# Log file
####################
 
ckpt_run ./mon_executable param1 param2
 
ckpt_wait


La commande « ckpt_run » lance une tâche en arrière-plan, puis lance un démon (daemon), qui exécute les sauvegardes à intervalle régulier. La dernière ligne s'assure que tant que le démon s'exécute, le script continue. Il est possible d'interagir avec le démon via des signaux envoyés à la job.

Exemple #2, avec plusieurs tâches

Vous avez plusieurs tâches série à exécuter sur un même nœud ? Pas de problème. Vous pouvez les lancer directement avec la commande « ckpt_run_task », de la façon suivante :

Fichier : submit-blcr.sh
#!/bin/bash
#PBS -S /bin/bash
#PBS -N NOM       # Nom de la tâche
#PBS -A xxx-yyy-zz   # Identifiant Rap; ID
#PBS -l walltime=24:00:00    # Durée en secondes
#PBS -l nodes=1:ppn=8  # Nombre de processus. Doit être 8.
 
cd $PBS_O_WORKDIR
 
source /clumeq/bin/easy_blcr.sh
####################
## CONFIGURE
####################
CKPT_DELAY=60 					# Delay between checkpoints, in minutes
#CKPT_KEEP_BACKUPS=1 				# Do we keep backups of all checkpoints ?
#CKPT_DIR=checkpoints 				# Directory for the checkpoints
#CKPT_FILE=ckpt 				# Filename for the checkpoints
#CKPT_RESTART_FILE=$CKPT_FILE  		  	# Restart from this checkpoint file
#CKPT_LOG_FILE=ckpt.log 			# Log file
####################
 
ckpt_run_task 1 ./mon_executable param1
ckpt_run_task 2 ./mon_executable param2
ckpt_run_task 3 ./mon_executable param3
ckpt_run_task 4 ./mon_executable param4
ckpt_run_task 5 ./mon_executable param5
ckpt_run_task 6 ./mon_executable param6
ckpt_run_task 7 ./mon_executable param7
ckpt_run_task 8 ./mon_executable param8
 
ckpt_wait


Notez que dans ce cas, il faut passer un paramètre supplémentaire à ckpt_run_task, qui indique un numéro de tâche. Cet identifiant doit être unique. Les sauvegardes seront créées dans un sous-répertoire portant le nom de cet identifiant à l'intérieur du répertoire des points de sauvegarde. Il faut aussi éviter d'exécuter la tâche en arrière plan (symbole & à la fin de la ligne) : le script s'en charge automatiquement.

Interagir avec le démon : forcer un point de sauvegarde

Lorsque vous utilisez le script « /clumeq/bin/easy_blcr.sh », vous pouvez forcer une sauvegarde d'une tâche qui s'exécute en utilisant la commande « mjobctl -N SIGCONT jobid ». Ceci envoie un signal au script pour demander une sauvegarde. Ceci fonctionnera aussi bien si vous utilisez ckpt_run ou ckpt_run_task.

Limitations

  1. Mêmes limitations que BLCR.
  2. Le script easy_blcr.sh ne supporte par les tâches MPI.

Liens utiles

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager