Parallèlisme, Clustering
Les différents types de clustering sous Linux :
- clustering pour applications scientifiques, qui nécessite
des logiciels de clustering, tels que ceux du projet Beowulf, ainsi que des
applications spécifiquement programmées pour tirer partie de
l'environnement distribué.
- front-end clustering, qui permet par exemple de diriger des réquetes
HTTP vers plusieurs serveurs web, permettant ainsi une tolérance aux
pannes, un équilibrage de charge. Exemple, le projet Linux Virtual
Server
produits : Understudy (Polyserve), TurboCluster (TurboLinux)
- back-end clustering, qui offre a plusieurs serveurs l'accés
a une ressource unique, par exemple une grosse base de données. Si
un des serveur crash, les autres sont toujours la pour assurer la continuité
de service.
Concepts
- High Throughput Computing (HTC) : environment that harness the ever
growing power of the desktop computer resources while protecting the rights
and needs of their interactive users.
Articles
Sociétés
- Alinka fondée par Antoine
Brenner et Benjamin Levy fournit des solutions logicielles de clustering
sous Linux, intégrant des fonctions de tolérance de panne et
de répartition de charge. Il permet l'ajout de machines sans interruption
du système et le monitoring de ces machines.
- Parabon
- Linux NetworX
Projets
- Linux Virtual Server
: The Linux Virtual Server is a highly scalable and highly available server
built on a cluster of real servers, with the load balancer running on the
Linux operating system. The architecture of the cluster is transparent to
end users. End users only see a single virtual server. The Linux Virtual Server
can be used to build highly scalable and high available network services,
such as a scalable web, mail or media service.
- MOSIX : Software package to enhance
the Linux kernel with cluster computing capabilities. It allows an arbitrarily-sized
cluster of computers to work cooperatively as if part of a single system.
With MOSIX there is no need to modify your applications, or to link applications
with any library, or even to assign processes to different nodes; it does
it automatically. The MOSIX algorithms are geared for maximal performance,
overhead-free scalability, and ease-of-use.
- Ensemble
Distributed Communication System (Cornell)
- Condor
- MPI : MPICH, MPI/Pro free implementation
- Globus
- NetSolve
- Eddie : Eddie provides advanced
automatic traffic management and configuration of geographically distributed
server sites, consisting of one or more Local Area Networks
- Fake : Fake has
been designed to switch in backup servers on a LAN. It has been used to success
over the last year to switch in backup Mail, Web and Proxy servers during
periods of both unscheduled and scheduled down time.
Fake allows you to take over the IP address of another machine in the LAN
by bringing up an additional interface and making use of ARP spoofing. The
additional interface can be either a physical interface or an IP alias.
Fake is easily configurable and is designed to enable automated invocation
via systems such as Mon that monitor the availability of servers. Fake can
also be used in
conjuction with load balancing mecahnisms such as The Linux Virtual Server.
- HeartBeat :
- http://www.linux-ha.org/
- Cplant (the Computational
Plant)
- The Portable Batch System : The
Portable Batch System (PBS) is a flexible batch queueing and workload management
system originally developed by Veridian Systems for NASA. It operates on networked,
multi-platform UNIX environments, including heterogeneous clusters of workstations,
supercomputers, and massively parallel systems. Continued development and
support of PBS is provided by the PBS Products Department of Veridian Systems.
- Grid Engine : permet
de localiser les ressources libres au niveau du réseau
et d'attribuer des jobs à ces ressources libres.
- Kimberlite
- the Linux FailSafe
Project permet d'ajouter des fonctions de HA a des applications telles
que Apache, sapDB, DB2
- Ganglia
Cluster Toolkit : Ganglia provides a complete
real-time monitoring and execution environment
Chercheurs
Roy Friedman
Beowulf
Les FAQ de Beowulf (copie locale)
PVM (Parallel Virtual Machine)
J'ai parallèlisé un calcul de bootstrap sur un cluster de 7
stations sous LINUX (et une sous IRIX). Les sources sont disponibles ici.
INSTALLATION DE PVM
- Telecharger pvm a l'adresse http://www.netlib.org/pvm3/index.html.
- decompresser avec tar xvfz
- placer :
PVM_ROOT=$HOME/pvm3
PVM_ARCH=LINUX
PATH=$PATH:$PVM_ROOT/lib
export PVM_ROOT PVM_ARCH PATH
dans le fichier .bashrc
- source .bashrc
- compiler avec make
rsh doit être autorisé sur toutes les machines (vérifier
dans inetd.conf). Il faut placer un fichier .rhosts dans chacun des $HOME
de l'utilisateur, contenant le nom des machines "trustées" et le login
sur ces machines. Ex :
sun olly
moon olly
Pour tester effectuer un simple rsh de la commande ls : rsh moon ls.
UTILISATION (Unix)
pvm lance le demon pvmd. Ensuite il est possible de :
- ajouter une machine : add moon
- enlever une machine : delete moon
- statut : conf
UTILISATION (win32)
- intaller rshd95 sur les machine sous Win
- ajouter une machine : ilfaut spécifier le chemin vers le demon pvm3
et vers les programmes PVM
Ex :
pvm> add "machine_win dx=c:\pvm3\lib\WIN32\pvmd3.exe ep=c:\pvm3\bin\WIN32"
ou bien
pvm> add machine_win avec la variable d'environnement suivante (exemple)
PVM_DPATH=c:\progra~1\pvm3.4\lib\win32\pvmd3.exe
wd permet de spécifier un rep de travail pour les processus engendrés.
UTILSATION MAITRE ESCLAVE
il faut recompiler le source de l'esclave pour chaque architecture, et le
placer dans pvm3/bin/ARCH (ex pvm3/bin/LINUX, ou pvm3/bin/SGI)
UNE INTRODUCTION A LA PROGRAMMATION PVM
Ce document est basé sur "An Introduction to PVM programming".
1 Introduction à PVM
PVM est un système de type "message passing", qui permet à
un ensemble de machines Unix en réseau d'être utilisées
comme une unique machine parallèle à mémoire distribuée.
C'est l'ensemble des machines que l'on appelle machine virtuelle ("Virtual
Machine").
Le code source, ainsi que énorme documentation de PVM3 sont stocké
à l'adresse http://www.netlib.org/pvm3/index.html.
2 Compiler et lancer un programme PVM
La compilation d'un source xxx.c utilisant les fonctions PVM se fait simplement
au moyen d'un ligne de commande telle que :
olly> cc -L~/pvm3/lib/ARCHI xxx.c -lpvm3 -o xxx
Le fichier xxx doit être placé dans le répertoire ~/pvm3/bin/ARCHI.
Si le réseau n'est pas en système de fichiers partagé
(NFS), la même procédure doit être effectuée sur
chacune des machines du réseau.
Il est ensuite nécéssaire d'éxécuter pvm, et
seulement alors de lancer xxx .
3 Les fonctions PVM de base
- pvm_mytid() permet de rejoindre le système PVM. La fonction
renvoie un entier, négatif si la procédure s'est mal déroulée.
- pvm_spawn("ma_tache", NULL, PvmTaskDefault, 0, n_tasks, tids)
permet d'engendrer n_tasks copies de la tache "ma_tache". Les
numéros associés aux taches sont renvoyés dans le tableau
d'entiers tids. La fonction renvoie le véritable nombre de
taches engendrées.
- pvm_config, pvm_parent, pvm_tasks permettent d'accéder
aux informations également accessible au travers de la console PVM
4 Les fonctions PVM de communication entre taches
La communication au sein d'une MV se fait au moyen de messages, en conséquences
des fonctions pvm permettent d'envoyer des messages, tandis que d'autres
permettent d'en recevoir.
- pvm_initsend(PvmDataDefault) permet d'initialiser le buffer
d'envoi de message et de spécifier l'encodage des messages. Elle doit
être éxécutée avant toute communication par la
tâche désireuse d'envoyer un ou plusieurs messages.
- pvm_mkbuf
- pvm_setrbuf
- pvm_freebuf
- pvm_packf() permet d'entasser ("pack") des données hétérogènes
dans le buffer d'envoi, à la manière d'un printf
- pvm_pkint(int *data, n, 1) permet d'entasser le tableau d'entiers
data de longueur n. Le 1 spécifie que tous les entiers du tableau doivent
être entassés (n aurait spécifié 1 sur n).
- pvm_pkdbl(..) permet d'entasser un tableau de doubles
- pvm_pkstr(char* str) permet d'entasser une chaine de caractères
(terminée par \0)
- pvm_send(tid, msgtask) permet d'envoyer le buffer à
la tache dont le numéro est tid, msgtag étant un entier
permettant de transmettre optionnellement des infos concernant la tache a
effectuer avec les données (ex : 1 -> tache1, 2 -> tache2, etc...).
- pvm_mcast(...) permet d'envoyer le même buffer à
plusieurs tâches, spécifiées dans le tableau tid.
Fonctions de réception
- pvm_recv(tid, msgtag) permet d'attendre un message en provenance
de la tache tid, avec un message msgtag, et renvoie un entier
comme identificateur de buffer . Si tid est égal à
-1, le message peut venir de n'importe quelle tache.
- pvm_re
- pvm_upkstr
- pvm_upkint
-
Debuggage de programmes PVM
Les sorties des programmes PVM (master et slaves) sont stockés dans
un fichier de logs de type /tmp/pvm.l501.
Il est aussi possible de voir ces sorties en utilisant la console PVM avec
spawn -> prog
Finalement :
spawn -? prog lance le debuggage de prog et des taches executées dans
d'autre xterm grace a GDB.
Systèmes de fichiers distants
Systèmes de Fichiers Journalisés
- Softupdates et filesystems
journaliséspar Thomas Pornin
- XFS
: Pourquoi faire : In the event of a crash, operations performed prior to
the crash can be redone using data present in the log to restore the filesystem
structure to a consistent state. This is done in the kernel at filesystem
mount time. XFS performs a binary search of the log for transactions to replay.
This eliminates the need to perform a slow total UNIX filesystem check (fsck)
after a system crash. Also, when fsck finds inconsistent data structures it
must throw away anything suspicious. XFS knows what was happening at the
time of failure, so it never needs to throw anything away; it simply finishes
what it started. Thus, XFS's journalled recovery provides higher filesystem
integrity than does standard UNIX.
- JFS
- ReiserFS : Tips
on installing ReiserFS
- Ext3FS