C’est ainsi que je me retrouve en ce qui me concerne avec un serveur ayant un load moyen de 0.00 (sur 2 coeurs en HT) et un autre à 0.05; ca fait léger. Pour donner un peu de sens à ces capacités inutilisés, je me suis mis en tête de faire tourner BOINC sur mes serveurs.

BOINC (Berkeley Open Infrastructure for Network Computing) est une plateforme de calcul massivement distribué, qui à succédé à Seti@home, son but est précisement d’utiliser votre ordinateur lorsque que vous ne le faites pas pour réaliser des calculs destinés à la recherche scientifique (séquencage de génome, analyse d’ondes électromagnétiques, démonstration de conjectures…). Le projet est d’ampleur internationale : il compte presque 300.000 utilisateurs pour plus de 500.000 machines, dégageant une puissance moyenne de 1.800 TFLOPS, soit plus que le plus puissant supercalculateur actuel (IBM ”RoadRunner”, 1.400 TFLOPS).

BOINC

Boinc utilise relativement peu de place sur le disque dur, mais sera sans pitié pour votre processeur, dans mon cas, je suis passé sur amadeus d’un load de 0.00 à 4.00 en moins d’une minute, et si vous avez un htop qui tourne au moment de lancer la bête, vous pourrez voir une véritable vague qui amenera la totalité de vos cores à 100%. En réalité ce n’est pas BOINC qui travaille, ce n’est pas lui que vous verrez en tête des process, il se charge de manager les calculs fournis par les projets auxquels vous vous êtes inscrit. Par exemple, si vous vous inscrivez au projet Rosetta@home, vous verrez travailler des processus nommés minirosetta.

La mise en place est très simple, mais je le mets par écrit ici car mes recherches m’ont menées à beaucoup de réponses incomplètes ou fausses. On trouve notamment à plusieurs endroit qu’il faut lancer une première fois BOINC avec l’interface graphique afin d’initialiser l’environnement de calcul, ce qui est faux. Il est vrai cependant que le projet est essentiellement tourné vers un usage desktop du logiciel, la raison en est qu’ils considèrent que dans la très grande majorité des cas, les serveurs (donc sans GUI) sont des machines soient d’entreprises, soient des hosts partagés en datacenter… bref des machines sur lesquelles l’utilisateurs lambda n’a pas l’autorisation de faire tourner ce genre d’applications, voire pas le droit d’executer des binaires tout court.

Pour l’utilisation de Mme Michu, BOINC propose une interface graphique : Boinc-manager, en WxWidget, bien que pratique, elle gagnerai à être repensée. Dans le cas qui nous occupe cette solution n’est pas envisageable sur une machine sans serveur X, je conseille cependant de l’essayer sur une machine “avec écran” afin de se familiariser avec la plateforme.

BOINC utilise une architecture daemon<->interface de contrôle, bien que courante dans les serveurs, cette solution est plutôt inhabituelle pour les applications “grand public”. Elle est ici de mise même pour boinc-manager, autrement dit si vous quittez boinc-manager, vous ne faîtes que couper les ponts avec les unités de calcul, mais celles-ci continueront de tourner malgré tout tant que vous ne leur aurez pas expréssement dit de s’arreter. De plus elles reprendront même si vous avez arrêté votre ordinateur entre temps ! Ce comportement peut être source de surprises quand on ne s’y attend pas.



Mais trève de bavardages, passons à la pratique :
(dans ce qui suit, --passwd a été remplacé par - -passwd car Dotclear croit que j’essaye de barrer le texte…)

J’ai ici utilisé le package boinc-client sous Debian testing

Étape 1 : rejoindre un ou des projets

Il faut tout d’abord que vous vous inscriviez auprès des projets auxquels vous souhaitez participer (cela se fait depuis leurs propres sites et non depuis BOINC comme on pourrait l’espérer).

Étape 2 : lancer le daemon BOINC

Sur la machine cible, créez un dossier boinc/ dans votre home ou même créez un utilisateur boinc dédié et lancez $ boinc depuis le dossier. Un certain nombre de fichiers sont créés si c’est le premier lancement, et entre autres gui_rpc_auth.cfg : ce fichier contient une clé destinée à la communication entre l’interface graphique et le daemon, bien que nous n’ayons pas de GUI, il nous faut tout de même cette clé pour piloter BOINC.

Étape 3 : se connecter aux projets

Tapez à présent
boinccmd - -passwd <cle dans gui_rpc_auth.cfg> --lookup_account <URL du projet> <adresse mail> <mot de passe>
(note: je trouve très désagréable et assez abhérent de devoir entrer mon mot de passe en clair dans la ligne de commande)

Vous obtiendrez alors si tout va bien :

status: Success
poll status: operation in progress
poll status: operation in progress
account key: <cle>

Cela signifie simplement que nous avons réussi à nous connecter au projet et que la machine à bien été inscrite, elle peut désormais commencer à travailler avec la clé indiquée.

Attention : pour certains projets, notamment le World Community Grid, ce n’est pas l’adresse email, mais le nom d’utilisateur qu’il faut entrer.

Étape 4 : lancer les calculs

C’est le moment, nous allons demander à BOINC de récupérer du travail et de le traiter, pour celà :
boinccmd - -passwd <cle> --project_attach <URL du projet> <cle projet obtenue precedemment>

Faites un ptit top, vous remarquerez que les unités lancées par Boinc ont une niceness de 19, soit la plus faible priorité d’éxecution, ainsi les calculs pourront être préemptés à n’importe quel moment afin de garantir le fonctionnement normal de la machine.

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
29379 gliss     39  19  181m 174m  180 R   99  8.7  24:16.71 minirosetta_1.6
29391 gliss     39  19  193m 186m  224 R   99  9.3  22:31.44 minirosetta_1.6
29381 gliss     39  19  221m 214m  192 R   99 10.6  24:14.24 minirosetta_1.6
29380 gliss     39  19  191m 184m  180 R   98  9.2  24:01.70 minirosetta_1.6

Vous pouvez mettre en pause le travail sur un projet avec
boinccmd - -passwd <cle> --project <URL du projet> suspend

Quelques commandes utiles :

boinccmd - -passwd <cle> --quit : demande au demon de nous foutre la paix maintenant, allez

boinccmd - -passwd <cle> --get_state : affiche de manière inbuvable plein d’infos sur les calculs présents et passés

boinccmd - -passwd <cle> --set_run_mode auto : s’assure que le daemon ne calculera que lorsque les CPU sont dispos

Ce que je n’aime pas :

  • Pas d’enregistrement unique à la plateforme BOINC, il faut créer un compte pour chaque projet que l’on souhaite rejoindre, puis pour chaque équipe, pour chaque générateur de stats… c’est interminable et très désagréable; seul un cross project ID existe;
  • Mots de passe et clés à taper en clair à chaque fois;
  • Tellement tourné vers la GUI boinc-manager (par ailleurs très simple à utiliser) que pour se la faire 100% CLI c’est un peu “démerde toi”;
  • Les arguments de boinccmd sont du style --do_this_please au lieu de --do-this-please;
  • Erreurs non expliquées, un client zombie que vous avez oublié, un fichier de conf mal foutu et boinc plantera sans vous dire ce qui ne lui plait pas, ou pire, démarrera mais sans être pilotable par boinccmd. Pas de confirmation des op réussies;
  • incohérences dans les noms de commandes : --lookup_account mais --project_attach;
  • Affichage des données illisible en version CLI encore.

Mais malgré tout, BOINC ca déboite du mulot, l’organisation est un peu confuse, mais derrière c’est vraiment une prouesse technologique pour la bonne cause qui mérite qu’on s’y intéresse.