n°3
Novembre
2008
NARVAL : Un système d’acquisition modulaire

NARVAL est un système d’acquisition hautement distribué développé en ADA et qui se sert des mécanismes offerts par ce langage pour toutes les communications inter processus. Ces mécanismes permettent de voir tous les processus constituant le système d’acquisition comme un programme unique et ainsi facilitent les communications entre chaque processus. Ils permmettent d’avoir une vision unitaire de l’ensemble du système. La gestion du flot de données entre deux processus est basée sur les protocoles TCP/IP et Infiniband lorsque les processus sont sur deux machines distinctes, ou par des fifo UNIX lorsque les deux processus sont sur la même machine.

Le système d’acquisition utilise un nuage de processus pour gérer l’ensemble du flot de données. Chacun des processus hérite d’une classe abstraite nommée Acteurs définissant une interface commune. Il existe trois type d’acteurs :

  • Producteurs : Acteurs dédiés à la collecte des données
  • Intermédiaires : Acteurs permettant d’effectuer des traitements sur le flot de données ou servant de routeur NxM.
  • Consommateurs : Acteurs utilisés en fin de chaine afin de stocker ou de visualiser les données.

Rapide historique

Initialement, NARVAL a été développé à l’IPN Orsay pour remplacer OASIS, l’ancien système d’acquisition de l’IPN Orsay. De système d’acquisition interne à l’IPN Orsay, l’utilisation de NARVAL s’est étendu à d’autres laboratoires de l’IN2P3 et du CEA au fil des années et est, ou a été, utilisé dans des expériences au GANIL, à Los Alamos, ...

Depuis 3 ans, l’IPN Orsay et le CSNSM travail de concert à l’amélioration de cet outil. Plus récemment, le GANIL s’est intéressé à ce développement et effectue des tests afin de savoir si NARVAL peut servir de flux principal d’acquisition pour une future acquisition au GANIL.

Concepts

Le développement de NARVAL a été conditionné par 4 impératifs : la modularité, la fiabilité, la réutilisabilité et l’interconnexion avec d’autres programmes.

Chaque acteur hérite d’un ensemble de fonctionnalités définissant les protocoles de synchronisation entre acteurs, la structure du nuage d’acteurs, ... Ainsi, sans aucun ajout de code, un acteur est capable de communiquer avec l’ensemble du système d’acquisition, de recevoir les données des acteurs lui en fournissant et d’envoyer des données aux acteurs en attendant. La seule différence entre deux acteurs est le code métier embarqué.

Cette possibilité de créer facilement des acteurs permet de les spécialiser. Il existe des acteurs dédiés à l’acquisition de données, ayant la fonction de filtre, de constructeur d’évènements ... Le fait d’avoir spécialisé les acteurs et de pouvoir facilement multiplier le nombre d’acteurs, autorise à créer des acteurs ne remplissant qu’une seule tâche bien définie. Cela a une grande importance pour tout ce qui concerne le test et la correction d’erreurs. Effectivement, une fois l’erreur détectée, il est aisé d’isoler l’acteur erroné, puis de le corriger.

De la même manière, cette possibilité d’isoler chaque traitement, permet de simplifier la validation d’un nouveau traitement. Comme tous les acteurs possèdent le même code pour tout ce qui concerne la gestion du flot de données, ces fonctionnalités ont déjà été validés, et donc il ne reste plus qu’à tester le code spécifique. Enfin NARVAL est développé en ADA, langage doté d’un typage très fort et d’un compilateur strict, ce qui permet de s’affranchir assez simplement de beaucoup d’erreurs syntaxiques et sémantiques.

Enfin, grâce aux développements effectués pour le projet AGATA, NARVAL fournit des acteurs génériques. La norme ADA fournit un ensemble de règle pour lier du code C/C++ avec du code ADA. Nous nous sommes servis de cette définition, pour développer des acteurs contenant toute la "logistique" des acteurs standards (communication, transfert de données, synchronisations, ...), mais dont tout le code métier est géré par une librairie dynamique. L’interface de cette librairie est le résultat du travail de X. Grave (IPN Orsay) et V. Pucknell (Daresbury).Il est donc tout à fait possible de développer une librairie C/C++ et de se servir de NARVAL pour transporter les données.

NARVAL par l’exemple

Pour reprendre l’exemple du projet AGATA, NARVAL prend les données en sortie de cartes d’électroniques, effectue cinq types de traitements différents sur le flot de données, avant de stocker ces données. Lorsque le détecteur AGATA sera complètement opérationnel, NARVAL acquerra les données par un ensemble de 180 acteurs. Ces 180 flots de données parallèles seront traités par une première série d’acteurs dédiés au Pulse Shape Analysis, ensuite ces flots de données seront assemblés de manière à ne créer plus qu’un seul flot consistant. Ce flot unique transite par plusieurs acteurs et est enfin stocké.

Chaque acteur fournit un travail très spécifique, et a été développé dans diverses équipes européennes. La majorité des algorithmes de traitement des données ont été développés en C++ en se servant d’une librairie partagée pour effectuer tous les traitements spécifiques.

Eric LEGAY (CSNSM)