URL: https://linuxfr.org/users/jben/journaux/cjm-un-frontend-a-dmtcp Title: cjm, un frontend à dmtcp Authors: jben Date: 2012年06月28日T20:38:57+02:00 Tags: Score: 32 Synopsis : Je vais vous parler de checkpointing de processus. Je vous préviens, je ne suis pas un expert juste un utilisateur. Pour répondre à mes besoin j'ai écrit un petit (minuscule) frontend à une solution existante. # Problèmatique # Lançant régulierement des calculs coûteux (en temps) sur des machines (dont certaines qui n'ont pas la chance de m'avoir comme utilisateur root), je suis confronté à plusieurs problèmes de calculs interrompus par des causes multiples. Voici quelques exemples vécus. * Coupure ERDF (d'un temps supérieur à la capacité de l'onduleur) * kernel panic (un autre utilisateur a un processus qui consomme 31.8 GiB sur 32 GiB, l'OOM-killer est bourré, il tire sur tout ce qui bouge sauf lui) * administrateurs qui décident d'une mise à jour (même si ils préviennent à l'avance certains calculs peuvent prendre plusieurs mois) Bref il me fallait un moyen d'avoir de la reprise sur état. # Ce qui existe # Quelques recherchent m'ont mené au mot clef [Application_checkpointing](http://fr.wikipedia.org/wiki/en:Application_checkpointing "Définition Wikipédia"). Ok, c'est cool. En gros deux outils correspondent à mes besoins * [cryptopid](http://cryopid.berlios.de) * [dmtcp](http://dmtcp.sourceforge.net/) Le premier est simple et correspond exactement à ce que je veux, mais misèricorde ! il fait n'importe quoi quand je l'essaie. Je me détourne donc de cette solution. Le second est un vrai couteaux suisse, après avoir mis 3 heures à comprendre comment ça marche, j'ai compris qu'il pouvait faire ce que je voulais, et bien plus. En plus il ne necessite pas de dépendances (autres qu'un compilateur à la compilation, ☺), je peux l'installer facilement dans mon home sans faire le resolveur de dépendances dans ma tête (ou sans installer une [gentoo prefix](http://www.gentoo.org/proj/en/gentoo-alt/prefix/), ça dépend de la religion). Bon le problème c'est qui est super-casse-bonbons à utiliser, il faut lancer le coordinateur pour chaque travail, lancer le prcessus, causer au coordinateur... bref c'est légèrement énervant. # Ma solution # Ne voulant faire qu'un usage restreint des fonctionnalités de dmtcp, et ayant envie d'avoir un gestionnaire sympa, j'ai écrit un petit script qui fait le boulot pour moi. À l'origine c'était juste pour moi, je ne pensais pas le publier, ça ne mérite pas grand chose, surement pas une page web. Bon je me suis quand même motivé, j'ai rajouté un header avec une [licence vraiment libre](http://media.paperblog.fr/i/411/4116481/troll-facebook-polemiques-L-sooWYO.jpeg), et j'en fais un journal. [Voici le script en question, il s'appelle cjm pour _checkpointed job manager_.](http://darcs.jben.info/repos/checkpointed_job_manager/cjm) Voici une petite démo (avec GNU Octave) * Sur le premier terminal je demarre octave : jben@ginette ~ $ cjm start octave -q cjm start: job id 5 warning: X11 DISPLAY environment variable not set octave:1> A=rand(2) A = 0.99239 0.98673 0.14165 0.91403 octave:2> * Bon c'est le job numéro 5, voyons voir le fonction list et info, sur un autre terminal : jben@ginette ~ $ cjm list # id host status command -------------------------------------------------------- 4 ginette stopped octave 5 ginette launched octave -q jben@ginette ~ $ cjm info 5 Job id : 5 Host : ginette Command : octave -q Last start : 28/06/2012 20:20:34 +0200 Status : Launched Automatic checkpointing : disabled Size : 24K No checkpoint found * Bon on peut lui demander manuellement un checkpoint jben@ginette ~ $ cjm checkpoint 5 * Et regarder le résultat jben@ginette ~ $ cjm info 5 Job id : 5 Host : ginette Command : octave -q Last start : 28/06/2012 20:20:34 +0200 Status : Launched Automatic checkpointing : disabled Size : 25M Last checkpoint : 28/06/2012 20:21:10 +0200 * Maintenant on quitte la session d'octave, on ferme le terminal (on reboote si on a envie), et dans un terminal on repart du checkpoint jben@ginette ~ $ cjm restart 5 cjm restart: job id 5 octave:2> A A = 0.99239 0.98673 0.14165 0.91403 octave:3> On peut configurer un checkpointing automagique, à utiliser avec modération, lors de la création d'un checkpoint le processus est arrêté, cela peut prendre beaucoup de temps si l'espace mémoire occupé est grand. comme mon but c'est de pouvoir relancer un travail *long*, je ne suis pas à une heure près, je ne descend jamais en dessous d'une periode de une heure. Cerise sur le gateau, avec plusieurs machines identiques, un home partagé en NFS, je le stoppe sur l'un je le redemarre sur l'autre. Voila, ça vaut ce que ça vaut. Moi je trouve cela génial, mais je suis comme un gosse avec ce qui brille... Pour ceux que ça n'interesse pas, une [nimage](http://www.locatou.be/images/big/motoculteur-moinsde10CV.jpg).