Historique et fonctionnement des clusters Beowulf
D'après The Beowulf Project par Donald Becker, et PVM: Parallel Virtual Machine par A.Geist, A.Beguelin, J.Dongarra, W.Jiang, R.Manchek et V.Sunderam.
Qu'est-ce qu'un cluster?
Un cluster (mot anglais signifiant groupe, grappe...), au sens employé ici est un ensemble de machines connectées ensemble d'une façon ou d'une autre pour distribuer une tâche très lourde entre ces différentes machines.
Bref historique du projet Beowulf.
Le projet Beowulf est né en 1994 au Goddard Space Flight Center de la NASA. Le principe est de construire des clusters parallèles sous GNU/Linux avec du matériel commun (simples PCs), donc peu cher.
Une des premières réalisations concrètes de cluster date de 1995. Ils s'agissait alors de 16 PCs de type 486DX4@100MHz avec chacun deux interfaces Ethernet à 10Mbps et des disques durs de 250Mo, bref une architecture énorme pour l'époque. Ce cluster était employé par la NASA pour la simulation de phénomènes physiques et l'acquisition de données. ( d'après un document de la NASA ).
Après cette première approche très concluante, divers autres projets sont apparus, dont des architectures de l'ordre de 100 PCs P-II...
Aujourd'hui, les clusters Beowulf apparaissent dans le TOP-100 des super-calculateurs les plus puissants au monde, et peuvent aller jusqu'à plusieurs dizaines de stations chacune multi-processeurs et totalisant des Téra-octets (milliers de Giga) de capacité de disque dur et plusieurs dizaines de Giga-octets de RAM.
Comparaison Beowulf vs SMP.
L'architecture SMP est celle rencontrée dans les PCs multi-processeurs, les stations SGI, les stations SUN, les stations HP/PA, certains des super-calculateurs de type CRAY, ... Elle consiste à mettre une seule mémoire vive en commun pour plusieurs processeurs qui sont plus ou moins sur la même carte mère (il est clair que 16 ou 64 processeurs ne sont pas tout à fait sur la même carte) et en partagent toutes les ressources.
L'architecture de type Beowulf (et la majorité des clusters en général) est constituée quant à elle de machines indépendantes (processeur, mémoire, disque(s) dur(s), alimentation) connectées entre elles par un réseau de type Ethernet.
Alors que dans une architecture SMP les processeurs travaillent en communication permanente, dans un cluster une des machines répartit les tâches entre toutes les autres qui lui envoient le résultat une fois les calculs terminés.
Prenons un exemple: Une machine Bi-P-II ou Bi-Celeron va perdre 25% de sa fréquence totale à cause entre autres des communications entre processeurs. Avec 2 processeurs à 500MHz, on aura ainsi le même résultat qu'avec un processeur à 750MHz. En mettant 2 machines mono-processeur en parallèle, elles ne gaspilleront que quelques milisecondes de temps de calcul à communiquer.
Mais il y a une limitation. Dans les deux cas, les logiciels doivent être 'parallélisés' pour utiliser plusieurs processeurs (qu'ils soient dans la même machine ou pas). Mais dans le cas d'un cluster il faut faire en sorte que les 'processus' (en gros ce qui tourne sur un des processeurs) communiquent le moins possible entre eux. Une connexion réseau (même Gigabit Ethernet) est un peu juste pour que les processeurs se synchronisent tout le temps entre eux, alors qu'avec un logiciel 'bien programmé', une connexion 10Mbps peut éventuellement suffire.
Dernière raison et non la moindre, le coût. En admettant que vous arriviez à effectuer la maintenance du système de refroidissement à l'azote liquide de votre Cray, on constate généralement qu'un cluster de puissance équivalente coûte initialement 10 fois moins cher. Bien sûr, à ce prix, il faut le monter et le mettre en route soi-même, mais de plus en plus de constructeurs proposent ce genre de services.
Mais pourquoi GNU/Linux?
La raison est très simple : Imaginez un moment que vous voulez construire un cluster sur la base de 100 machines sous MS-Windows xx (où xx est au choix 95, 98, NT ou 00). Multipliez le prix d'une license d'un de ces systèmes par 100.
Multipliez maintenant 0 (zéro) par 100.
La première valeur que vous obtenez est le prix de l'OS si vous utilisez Windows (ça marche aussi avec d'autres, comme Solaris, MacOS,...), la deuxième est celui si vous choisissez GNU/Linux.
Mais ce n'est pas la seule raison. C'est en effet aussi pour des raisons de STABILITÉ du système que GNU/Linux à été la plate-forme choisie pour le calcul des effets 3D du célèbre film Titanic. Ainsi, plusieurs centaines de machines, dont une bonne partie de stations DEC/Alpha ont tourné toutes en parallèle sous GNU/Linux.
Comment ça marche?
Le fonctionnement d'un cluster Beowulf au niveau utilisateur n'est pas très compliqué à condition de faire attention à quelques détails.
Tout d'abord, l'allumage. Il y a une machine principale (appelons là SERVEUR) qui contient l'image dans un de ses répertoires du disque de démarrage (en particulier quelques utilitaires et accessoirement le logiciel parallélisé à faire tourner), et qui fait tourner un daemon qui attend des requêtes de type bootp.
Toutes les autres machines sont équipées de ROMs de boot sur leurs cartes réseau.
Le SERVEUR doit déjà être booté lors de l'allumage des autres machines. Celles-ci vont chercher leurs noyaux GNU/Linux sur le disque du SERVEUR et bootent elles-mêmes. Ensuite, elles se connectent (en général en NFS) sur le disque du SERVEUR et chargent le reste des fichiers nécessaires à leur fonctionnement. Les disques durs des machines (elles ne sont pas forcément diskless) peuvent contenir des fichiers de données et/ou de programmes, mais servent en général pour swapper et comme buffers pour les données (les clusters servent à traiter de gros volumes de données, ne l'oublions pas), ce qui permet encore de réduire les transferts pendant les calculs.
L'outil principal qui fait que cela marche est le daemon pvmd. Paradoxalement, PVM (pour Parallel Virtual Machine) a été créé pour utiliser des réseaux hétérogènes de machines très diverses en parallèle, et c'est dans les architectures les plus unifiées du type Beowulf que PVM est arrivé à son apogée.
En gros, PVM est une MPI (Message Passing Interface), c'est-à-dire une sous-couche logicielle qui sert aux processus ou logiciels pour communiquer entre eux. C'est ce qui sert au processus père à envoyer les données aux processus fils tournant sur les autres machines, les récupérer en fin de calcul, et avant tout lancer les processus fils.
Le déroulement d'un calcul sur un cluster de type Beowulf est le suivant :
- Lancement du processus père par l'utilisateur;
- Lancement des processus fils par le processus père;
- Émission des données à traiter aux processus fils tournant sur les machines autres que le SERVEUR;
- Attente des réponses du cluster;
- Affichage et/ou sauvegarde des données traitées.
Les 3 dernières étapes peuvent bien sûr être répétées, si la suite des calculs nécessite la connaissance de résultats intermédiaires.
Pour en savoir plus...
Pour obtenir PVM: Parallel Virual Machine, allez sur http://www.netlib.org/pvm3/book/pvm-book.html ou adressez vous directement à l'auteur de ce document en écrivant à mluczak@april.org. Si vous voulez construire vous-même un cluster, vous pouvez commencer par acheter Extreme Linux, qui est une RedHat 5.0 (ça date un peu) avec un noyau spécialement préparé pour le Beowulf et tous les outils nécessaires.
Sachez aussi que le noyau 2.2 contient tout ce qu'il faut, et une simple RedHat 6.0, Mandrake 6.0, SuSe 6.1 ou 6.2, Debian 2.2 (potato) suffit. Il faut simplement pour certaines de ces distribution charger quelques utilitaires supplémentaires.
Pour plus d'informations sur le projet original et des liens vers des clusters existants: http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html