Sunteți pe pagina 1din 16

Introducere in Cluster Computing

Un cluster este un tip de sistem informatic paralel sau distribuit, care consta dintr-o colectie de
calculatoare inter-conectate si stand-alone care lucreaza impreuna ca o singura resursa de calcul
integrata. Arhitectura tipica a unui cluster este prezentata in figura 1.
Componentele cheie ale unui cluster includ, mai multe computere standalone (PC-uri, statii de lucru, sau
SMP-urile), un sistem de operare, o retea de viteza mare, software-ul de comunicare, middleware si
aplicatii.

Interconectarea se poate face in doua moduri:

Comunicare bazata pe mesaje


Partajarea spatiului de stocare

Alegerea modul de interconectare a unui cluster depinde de anumiti factori, incluzand compatibilitatea cu
sistemul de operare si configuratia hardware a clusterului, pret si performanta. Performanta sistemului
este masurata in termeni de latenta si latime de banda. Latenta este timpul de transmitere a datelor de la
un calculator la altul, incluzand atat overhead-ul determinat de timpul necesar construirii mesajului cat si
timpul necesar transferului de biti intre cele doua calculatoare. Latimea de banda reprezinta numarul de
biti pe secunda care pot fi transferati in retea. Ideal, aplicatiile distribuite sunt concepute astfel incat
cantitatea de date remote necesara sa fie minima. In general, insa, aplicatiile care utilizeaza mesaje de
dimensiuni mici vor avea un nivel al performantei mai mare deoarece este redusa latenta, iar aplicatiile
care transmit mesaje de dimensiuni mai mare vor avea performanta mai ridicata odata cu cresterea latimii
de banda. Latenta in comunicarea bazata pe transmiterea de mesaje este o functie dependenta atat de
comunicarea software cat si de partea hardware a retelei.

Single System Image(SSI)

SSI este proprietatea unui sistem care mascheaza natura eterogena si distribuita a resurselor
disponibile si le prezinta utilizatorilor si aplicatiilor ca o singura resursa de calcul, unificata. Mai mult,
SSI asigura continuitatea operationala a unui ansamblu, chiar si in caz de esec (high availability) a unei
subcomponente. De asemenea, de ocupa cu distribuirea echitabila a resurselor (resource management and
scheduling).

Obiectivele urmarite in crearea SSI pentru sistemele de clustere au urmarit


o
o
o

transparenta totala a managmentului resurselor


performanta scalabila
disponibilitatea sistemului in intretinerea aplicatiilor utilizatorilor

Serviciile cheie ale SSI cluster includ urmatoarele:

Single entry point: Un utilizator se poate conecta la cluster ca si gazda virtuala, desi clusterul poate avea
noduri fizice multiple implicate in sesiunea de logare. Sistemul distribuie transparent cererea utilizatorului
de conectare diferitelor gazde fizice pentru a balansa sarcina.

Single user interface: Utilizatorul ar trebui sa poata folosi clusterul prin intermediul unei singure interfete.
Aceasta ar trebui sa aiba acelasi look-and-feel cu cel oferit de calculatoarele simple.(ex: Windows XP
GUI, Solaris OpenWin)

Single process space: Toate procesele utilizator, indiferent de nodul pe care se executa, au un identificator
de process unic recunoscut in intreg sistemul. Un proces de pe oricare nod poate crea procese-copil pe
acelasi nod sau pe noduri diferite. Procesele pot comunica intre ele, indifferent daca se afla pe aceeasi
masina sau noduri difeite. Clusterele ar trebui sa continua un sistem global de administrare a proceselor si
ar trebui sa permita controlul proceselor, ca si cum ar rula pe masini locale.

Single memory space : Utilizatorii au impresia unei memorii principale mare, care in realitate este posibil
sa fie un set de memorii locale distribuite. A fost deja folosit software-ul DSM pentru a obtine un singur
spatiu de memorie in cadrul sistemelor de cluster. O alta abordare ar fi aceea de a lasa compilatoarelor
sarcina de a distribui structurile de date ale unei aplicatii de-a lungul nodurilor.
Single I/O space (SIOS): Acest model permite oricarui nod efectuarea de operatii I/O pe dispozitivele
periferice sau discuri aflate pe acelasi nod sau pe noduri din cadrul ansamblului.

Single file hierarchy: La intrarea in sistem, utilizatorul vede un singur sistem de fisiere imens. Acesta este
o imagine a tuturor ierarhiilor de fisiere si directoare care sunt integrate de pe discurile locale si globale ale
tuturor nodurilor din sistem (ex. NFS, AFS, xFS, Solaris MC Proxy).

Single virtual networking : Orice nod poate accesa orice legatura de retea din domeniul clusterului, chiar
daca reteaua nu este conectata fizic la toate nodurile din sistem.

Single job-management system : O sarcina-utilzator poate fi programata sa se execute pe oricate noduri din
cadrul oricarui nod prin intermediul unui manager de sarcini global. Sarcinile pot fi programate sa se
execute interactiv, in spatiu de lucru sau in paralel. Exemple de manageri de sarcini includ GLUnix, LSF
sau CODINE.

Single control point and management : Clusterul, dar si fiecare nod pot fi configurate, monitorizate,
testate si controlate cu ajutorul unei singure ferestre folosind instrumentele de interfata grafica.

Checkpointing and Process Migration : Checkpointing este un mecanism software prin care se salveaza
periodic, in memorie sau pe disc, starea proceselor si rezultatele intermediare ale calculelor. Aceasta
permite refacerea sistemului in caz de esec. Migrarea proceselor este necesara in balansarea dinamica a
sarcinilor intre noduri si in suportul checkpointing-ului.

Beneficiile SSI:

Asigura o interfata simpla si intuitiva a tuturor resurselor si activitatilor de sistem, din orice nod al
clusterului
Elibereaza utilizatorul de nevoia de a sti unde va fi executat o aplicatie
Elibereaza operatorul de nevoia de a sti unde se afla o resursa
Utilizatorul lucreaza cu o interfata familiara, iar administratorii de sistem lucreaza cu intregul
cluster ca si cum ar lucra cu o singura entitate

Performanta si timp de raspuns imbunatatite


Simplificarea managmentului de sistem

SSI poate fi implementat in unul sau mai multe dintre nivelurile urmatoare:

Hardware
Sistem de operare realizabil prin modificarea/extinderea kernelului sistemului de operare
Middleware cea mai comuna utilizare in clusterele actuale. Solutiile includ medii de dezvoltare
cum ar fi MPI sau PVM si sisteme de management al taskurilor cum ar fi CODINE
Aplicatii includ tool-uri GUI, precum PARMON sau PSE-uri (Problem Solving Environments)

Study Case. Bewoulf


In anul 1993, Donald Becker si Tomas Sterling au schitat idea unui sistem gandit ca o alternativa
ieftina si performanta la supercalculatoare.
Prototipul initial a fost un cluster format din 16 noduri, cu procesoare DX4, conectate printr-o
retea Ethernet.Sistemul a avut un success rasunator, iar idea lor de a folosi hardware si software COTS
(Commodity Off The Shelf) pentru a obtine o putere de calcul crescuta a facut ca proiectul sa ajunga
foarte popular in cadrul NASA si in mediul academic si de cercetare.
Beowulf este un ansamblu conceput, in principal pentru dezvoltarea aplicatiilor paralele si
optimizat in acest scop.Ofera un raport pret/performanta mai bun decat alte sisteme de clustere construite
din calculatoare de pe piata home userilor si utilizeaza software disponibil gratis.
Bewoulf utilizeaza, in arhitectura sa, modelul client/server, ca multe dintre sistemele distribuite
disponibile.Accesul la nodurile client se face printr-o conexiune remote de la nodul server, un nod
consola dedicat sau o consola seriala.
De cele mai multe ori, singura masina conectata la exterior este nodul server.Acesta contine in
plus o a doua placa de retea, special utilizata in acest scop.
Sistemele Beowulf pot fi construite dintr-o gama larga de produse software si hardware.Pentru a creste
performanta clusterelor Beowulf, o parte din componente pot fi echipamente specializate, cum ar fi
dispozitive de retea se inalta viteza si software specializat pentru acestea.

Cum se construieste un Bewoulf


Clusterul Beowulf ce urmeaza a fi construit va fi un cluster alcatuit din 20 de noduri, din care
unul Master, si 19 noduri Slave (Worker nodes).
Etape:
a) Stabilirea componentei clusterului: In functie de proiectul ce va fi lansat pe cluster acesta
va avea un numar de noduri, va fi nevoie de echipamentele de retea (cabluri, placi de retea) pentru fiecare
nod in parte, un switch, o tastatura si un monitor. Componenta fiecarui nod va fi dictata de buget cat si de
nevoile de putere de calcul. Se poate opta pentru un cluster in care nodurile sa nu aiba hard-disk propriu,
pentru a se reduce costurile.

Asa va arata clusterul nostru:

Denumire Componenta

Bucati

Denumire
Componenta

switch 24 porturi

Placa
SVGA

Placa de baza

20

CD-ROM

20

Procesor Barton 2500

20

Tastatura

Carcasa

20

Monitor

256 MB DDR

20

60 GB HDD

20

100 Mb/s Ethernet Card

Bucati

video 20

21

Instalarea Software-ului: Aceasta etapa presupune echiparea tuturor nodurilor cu sisteme de operare
Linux, si asigurarea comunicativitatii prin intermediul retelei. Trebuiesc totodata stabilite si serviciile ce
vor fi lansate si disponibile pe nodul Master si celelalte noduri.
Pentru omogenitate este indicat ca, toate nodurile, indiferent de rolul lor sa aiba aceeasi
versiune de Linux, instalata. Inainte de instalare este necesara partitionarea hard-diskurilor. Astfel pentru
nodul pe care il vom considera Master, tabela sa de partitii ar putea arata astfel: o partitie primara de boot,
al carui mount point sa fie /boot, si care sa aiba ca dimensiune aproximativ 150 MB, o partitie extinsa , de
tip ext3 cu sistem de jurnalizare, al carui mount point sa fie /, iar ca dimensiune sa aiba aproximativ 5 GB,
o partitie swap, a carui tip sa fie swap, fara mount point, iar a carei dimensiune sa fie aproximativ 2.5 *
dimensiunea memoriei RAM, si o partitie extinsa, a carui mount point sa fie /proiect, iar ca dimensiune,
aceasta ramane la estimarea fiecarui proiectant. Celelalte noduri vor avea in tabela de partitii doar primele
3 partitii de la nodul Master, fara a mai fi nevoie sa aiba si partitia proiect, intrucat oricum aceasta va fi
incarcata cu NFS, prin retea de pe nodul Master.
Odata partitiile create, se va instala sistemul de operare Linux pe Master si apoi pe fiecare din
nodurile clusterului.
Dupa ce sistemul de operare Linux este operational pe fiecare masina, va fi nevoie sa se opereze
configurarile de retea. Este foarte important ca reteaua sa functioneze fara probleme, intrucat probleme la
un nod pot determina pierderi in viteza de procesare. Pentru a configura reteaua avem la dispozitie toolurile administrative ale sistemului, cum ar fi netconfig (pentru Linux Slackware), sau putem edita singuri
fisierul rc.inet1, din /etc/rc.d. Daca se opteaza pentru editarea acestui fisier este nevoie sa se reporneasca
serviciul de retea. Acest lucru se face prin comanda: /etc/rc.d/rc.inetd restart.

Configurarea nodului Master: In cazul in care clusterul va fi integrat intr-o retea mai mare, nodul
Master, trebuie sa fie echipat cu doua placi de retea. Una dintre acestea va asigura conexiunea cu reteaua,
iar cealalta va asigura conexiunea la switchul clusterului. Astfel pentru placa de retea ce face legatura cu
exteriorul, adresa IP va fi cea data de administratorul retelei externe. Pentru placa de retea destinata
comunicatiei cu clusterul, se poate opta pentru o clasa de IP uri de retea locala de clasa C. Vom configura
astfel, nodul Master cu IP-ul 172.16.0.1, si Subnet Mask 255.255.255.0. Nu va fi nevoie nici de Gateway
nici de DNS. Dupa ce s-a terminat configurarea adresei celor doua placi de retea, este necesara o
verificare. Pentru a vedea daca placile functioneaza cu noile adrese vom folosi comanda ifconfig.
Pentru nodurile Slave (Worker nodes), se va proceda in acelasi mod ca la nodul Master, cu
diferenta ca pe nodurile Slave nu exista decat o placa de retea. Adresele IP ale nodurilor Slave, este
recomandat ca pentru simplitate, sa fie alese ca succesori imediati de la un nod la altul, avand ca valoare
de start 172.16.0.2 (adresa nodului Master + 1). Atentie adresele IP trebuie sa fie unice!
Pentru a usura administrarea Beowulf clusterului, este indicat ca pentru fiecare adresa IP a
fiecarui nod sa ii fie alocat un nume unic de identificare. Acest lucru se face prin editarea fisierului
/etc/hosts, astfel:
Exemplu:
#/etc/hosts
172.16.0.1Master
172.16.0.2 node1
172.16.0.3 node2
172.16.0.4 node3
172.16.0.5 node4
172.16.0.6 node5
...................................
172.16.0.21 node20
Este foarte important ca inainte de a trece mai departe sa ne asiguram ca toate conexiunile de la
Master la nodurile Slave sunt functionale. Acest lucru se poate face cu ajutorul comenzii ping din linia de
comanda a Masterului: ping node1. Aceasta ar trebui sa intoarca in caz de succes ,,Reply. Se va proceda
la fel si pentru celelalte noduri. Acest Beowulf cluster, are un Master, fapt ce il face mai vulnerabil, caci
daca se intrerupe legatura acestuia cu reteaua clusterului, proiectul nu poate fi continuat, pe cand daca se
rupe legatura unui nod diferit de Master, proiectul poate fi continuat de celelalte noduri. Insa aceste detalii
sunt foarte sensibile si la modul in care este construit paralelismul programului.
Dupa ce s-a asigurat functionarea retelei, este nevoie sa se creeze un utilizator, care sa
administreze proiectul. Acestui utilizator i se vor conferi drepturi de executie scriere si citire asupra
/proiect, de catre root. Acest utilizator va fi creat nu numai pe Master, ci si pe toate nodurile Slave, cu
aceeasi denumire si drepturi. Este nevoie de acest utilizator pentru ca mediul de dezvoltare LAM-MPI
pentru programarea clusterelor este destul de neprotejat, si nu este de dorit sa fie lansat de catre
utilizatorul root.
Se vor configura apoi serviciile ce urmeaza a fi pornite pe fiecare sistem in parte. Am stabilit ca
se va folosi o singura tastatura si un singur monitor. Acest lucru inseamna ca odata instalat Linuxul pe

toate nodurile, vom avea nevoie sa stabilim conexiuni SSH intre Master si celelalte noduri, pentru toate
masurile de administrare si configurare ce vor mai fi necesare. Este deci nevoie sa pornim inca de la
instalare daca avem posibilitatea serviciul SSH. Un alt serviciu de care vom avea nevoie este NFS. Daca
NFS nu este asa de important in momentul administrarii clusterului, se observa importanta NFS, in
momentul in care se incepe scrierea programului. NFS face ca proiectul sa poata fi vazut unitar de fiecare
proces de pe nodurile Slave, desi modificarile si codul se scriu pe Master. De fapt codul sursa se va afla
pe nodul Master in /proiect, si va fi asociat in fiecare nod spre a putea fi rulat.
Pentru a activa SSH, NFS sau alte servicii, putem folosi diverse utilitare de administrare,
precum pkgtool (pentru Linux Slackware) sau setup (pentru RedHat si Mandrake).
Dupa activarea acestor servicii, pentru buna functionare a NFS, trebuie editat pe Master fisierul
/etc/exports astfel:

Continutul fisierului /etc/exports


Pe fiecare din nodurile Slave trebuie editat fisierul /etc/fstab pentru a contine urmatoarele
informatii:

Continutul fisierului /etc/fstab

Dupa finalizarea setarilor pentru NFS, trebuie resetate toate calculatoarele din cluster, pentru a
se putea incarca pe nodurile Slave, directorul asociat de pe Master. Daca dupa resetare, regasim in
directorul specificat in /etc/fstab continutul proiectului nostru, atunci NFS functioneaza corect.
Am construit astfel din punct de vedere hardware un cluster. Insa fara suport software, nu il vom
putea folosi. Ca suport software se poate folosi una din implementarile existente pe piata, (PVM sau
MPI), sau se poate opta pentru dezvoltarea unei mini-platforme de comunicare intre noduri, care sa fie
concentrata pe un caz particular al utilitatii clusterului. Pentru indeplinirea scopului pe care lucrarea si-l
propune, este mai potrivita folosirea platformei MPI.
Middleware
MPI este o biblioteca care cuprinde specificatii de functii pentru sincronizarea programelor cu
spatii de adresare diferite, si transferul de date intre spatiul de adresare al unui proces la cel al altuia,
trimitand si primind mesaje. MPI nu este un limbaj, ci mai degraba o colectie de subrutine si tipuri de
date.
Paralel Virtual Machine, reprezinta un instrument software care permite colectiilor de
calculatoare cu sistem de operare Unix, conectate printr-o retea, sa fie folosite ca un singur mare computer
paralel. PVM gestioneaza in mod transparent procesele de rutare a mesajelor, conversia datelor, si
planificarea activitatilor pe o retea de calculatoare cu arhitectura ce poate fi si diferita.
MPI
Incearca sa stabileasca un standard de pasare a mesajelor pentru portabilitate sporita
Pune la dispozitie suport pentru librarii compilate separat
Pune la dispozitie functionalitate sporita pe baza experientei din alte sisteme de pasare a mesajelor
Este construit spre a rula pe majoritatea platformelor
Pune la dispozitie biblioteci pentru limbajele C, C++ si Fortran.
PVM
A fost construit sa ruleze pe retele de statii de lucru
Versiunea PVM3 este construita pentru a suporta apeluri native multi-procesor.
Are daemoni ruland pe toate masinile care construiesc masina virtuala
Are de asemenea librarii pentru rutine de pasare a mesajelor, gestionare a proceselor si pentru a
modifica masina virtuala
Pune la dispozitie librarii pentru limbajele C, C++ si Fortran.

Instalarea distributiei MPI:


Distributia LAM, este furnizata ca o arhiva in format gzip sau bzip2 pe pagina principala a siteului LAM www.lam-mpi.org. Dupa copierea arhivei aceasta se va dezarhiva astfel:
shell$ gunzip c lam7.1.tar.gz | tar xf
sau
shell$ tar zxf lam7.1.tar.gz
Procesul de configurare a aplicatiei, se poate face lansand scriptul de configurare configure
care in functie de arhitectura sistemului, de versiunea sistemului de operare si de variabilele de mediu, va
seta optiunile de instalare cu niste valori.
Implicit, scriptul de configurare, seteaza directorul de instalare al LAM la directorul parinte
unde este gasita comanda lamclean (daca aceasta se afla in cale stabilita de utilizator pentru situatia in
care se doreste reinstalarea LAM-MPI), sau /usr/local/ daca lamclean nu este gasit in calea stabilita de
utilizator.
Aceste setari pot fi modificate atat in timpul rularii dar si in pasul de configurare prin furnizarea
de parametri de configurare.
shell$ ./configure <option>
Compilarea se va face astfel:
shell$ make
Efectul acestei comenzi este crearea fisierelor binare si a bibliotecilor din sursa. Dupa
finalizarea acestui pas este necesara instalarea acestora:
shell$ make install
Odata aceasta faza incheiata trebuie sa testam corectitudinea instalarii. Acest lucru il putem
face lansand comanda laminfo, care, daca instalarea a decurs corect, va afisa urmatoarele informatii:

Inainte de a se putea executa orice program care necesita suport MPI, trebuie lansat mediul
LAM. Aceasta operatiune se mai numeste si booting LAM (incarcarea mediului LAM). Un proces de
incarcare s-a desfasurat cu succes atunci cand se creeaza o instanta in executie a mediului LAM denumita
universul LAM.
Pentru procesul de incarcare a LAM, vom avea nevoie de un fisier care sa contina toate gazdele
pe care se va incarca universul LAM. Acest fisier este denumit fisierul de gazde (hostfile), sau schema de
incarcare (boot schema) si contine urmatoarele informatii:
# My boot schema
node1.cluster.example.com
node2.cluster.example.com

node3.cluster.example.com cpu=2
node4.cluster.example.com cpu=2
In acest fisier de gazde sunt specificate patru noduri, prin includerea in fisier a numelor de
gazda (hostnames) corespunzatoare IP-ului lor. Este de observat si specificarea numarului de procesoare
pentru ultimele doua noduri. Insa, desi se specifica numarul de procesoare pentru aceste noduri, acest
lucru nu are nici o legatura cu arhitectura fizica a nodurilor respective, ele dispunand in realitate de un
singur procesor. Acest procedeu este un mod de a informa LAM despre numarul de procese pe care dorim
sa le lansam pe masina respectiva.
Comanda lamboot:
Comanda lamboot este folosita pentru a incarca mediul LAM. Fiecare masina specificata in
schema de incarcare, trebuie sa indeplineasca urmatoarele conditii pentru ca universul LAM sa porneasca
in mod corect:
masina respectiva trebuie sa fie conectata la retea, si operationala;
utilizatorul trebuie sa poata executa diferite comenzi de la distanta pe
masina fara a i se cere parola
executabilele LAM trebuie sa se gaseasca pe masina in calea data ca variabila de mediu de
catre utilizator;
utilizatorul trebuie sa poata sa scrie in directorul aferent sesiunii LAM (care de obicei este
stabilit in /tmp)
shell-ul nu trebuie sa scrie nimic la iesirea pentru erori;
toate masinile trebuie sa fie capabile sa transforme in adresa IP numele tuturor masinilor,
inclusiv numele sau (resolving hostnames).
In momentul in care toate aceste conditii sunt indeplinite, putem lansa comanda lamboot:
shell$ lamboot v ssi boot rsh hostfile
LAM 7.0/MPI 2 C++/ROMIO Indiana University
n0<1234> ssi:boot:base:linear: booting n0 (node1.cluster.example.com)
n0<1234> ssi:boot:base:linear: booting n1 (node2.cluster.example.com)
n0<1234> ssi:boot:base:linear: booting n2 (node3.cluster.example.com)
n0<1234> ssi:boot:base:linear: booting n3 (node4.cluster.example.com)
n0<1234> ssi:boot:base:linear: finished
Parametrii pentru comanda lamboot in exemplul de mai sus, au urmatoarea semnificatie:
-v: determina mediul LAM sa afiseze informatii asupra modului in care decurge incarcarea
LAM (verbouse mode);
-ssi boot rsh: seteaza rsh ca mod de comunicare cu nodurile pentru a incarca universul
LAM;
hostfile: numele fisierului in care am scris schema de incarcare.

Compilarea si rularea unei aplicatii in LAM-MPI


Pentru compilarea unui program nu este obligatoriu sa avem pornit universul LAM. Este insa
necesar sa folosim aceleasi compilatoare care au fost folosite pentru compilarea mediului LAM.
Mediul LAM-MPI pune la dispozitia dezvoltatorilor de aplicatii compilatoare de suprafata
care de fapt nu fac decat sa apeleze compilatoarele de baza aferente, adaugand parametrii si legaturile
necesare la bibliotecile mediului LAM, pentru a realiza compilarea.
shell$ mpiCC salut.cpp o salut
Pentru lansarea in executie a programului, trebuie incarcat universul LAM. Lansarea, si
gestionarea programelor se poate face cu suportul urmatoarelor comenzi: mpirun, mpiexec, lamclean,
mpitasks si lamhalt.
Comanda mpirun:
Este folosita pentru a porni programe care ce se executa in paralel.Cel mai simplu mod de a
lansa in executie programul salut este:
shell$ mpirun C salut
Optiunea C semnifica pentru LAM incarcarea a cate o copie a programului salut pe fiecare din
procesoarele specificate in fisierul de gazde (schema de incarcare).
Daca insa dorim sa ignoram specificatiile din schema de incarcare asupra numarului de
procesoare, putem face acest lucru compiland programul astfel:
shell$ mpirun N salut
Pentru a specifica numarul de procese care vor participa la executia programului se procedeaza
in felul urmator:
shell$ mpirun np 4 salut
Parametru np impreuna cu numarul 4 specifica faptul ca programul va fi executat de 4
procese. Distributia proceselor intre masinile din universul LAM se va face in functie de precizarile asupra
numarului de procesoare pe fiecare masina, in schema de incarcare a LAM. Alocarea proceselor intre
masini se face dupa algoritmul Round Robin. Rezultatul comenzii ar fi urmatorul:
1 * salut ar fi lansat pe n0 (numit nodul 1)
1 * salut ar fi lansat pe n1 (numit nodul 2)
2 * salut ar fi lansat pe n2 (numit nodul 3)

Se observa ca nu se foloseste ultimul nod pentru lansarea nici unui proces.


Daca insa lansarea in executie a programului salut se face astfel:
shell$ mpirun np 10 hello

Rezultatul va fi urmatorul:

2 * salut ar fi lansat pe n0 (numit nodul 1)


2 * salut ar fi lansat pe n1 (numit nodul 2)
4 * salut ar fi lansat pe n2 (numit nodul 3)
2 * salut ar fi lansat pe n3 (numit nodul 4)

Comanda mpiexec:
Standardul MPI 2 recomanda folosirea comenzii mpiexec pentru executarea proceselor MPI. In
LAM-MPI functia mpiexec este similara cu mpirun, insa cateva optiuni sunt particulare fiecareia.
Rezultatul final al folosirii celor doua comenzi este practic acelasi.
Totusi mpiexec este mai potrivita spre a fi folosita in unul din cazurile:
La rularea de programe care implementeaza paradigma MPMD (programe paralele tip
manager/worker in care codul este separat in doua parti dupa functionalitate);
La rularea de programe pe platforme eterogene care pot sa functioneze diferit si la nivel
retea (din punct de vedere al semnificatiei informatiilor transportate pe retea little
endian/ big endian);
La rularea de programe MPI de moment ( pornirea universului LAM executarea aplicatiei
si la finalizarea acesteia, inchiderea universului).

Sintaxa de folosire a comenzii mpiexec este urmatoarea:


shell$ mpiexec <global options> <cmd1> : <cmd2> : ...

Aplicatii
1. Linux Virtual Server
Un cluster de servere, conectate printr-o retea de mare viteza ofera a plafortma viabila pentru construirea
de servicii Internet scalabile. Acest tip de arhitectura este scalabila, eficienta din punctual de vedere al
pretului si mai fiabila decat un sistem multiprocesor intrucat nodurile care pica pot fi izolate intr-un mod
eficient iar sistemul poate functiona in continuare fara a afecta disponibilitatea serviciilor oferite.
Linux Virtual Server este un server construit pe un cluster de servere reale cu proprietatile de high
scalability si high diponibility. Arhitectura clusterului este transparenta end user-ului, iar utilizatorului
interactioneaza cu sistemul ca si cum ar fi un singur server virtual de mare performanta.

Arhitectura sistemului este bazata pe trei nivele. Functionalitatea fiecarui nivel este:

Load Balancer: interfata serviciului asa cum etse vazuta de catre client. Prin intermediul load
balancer-ului cererile clientilor care acceseaza o singura adresa IP pentru un anumit serviciu sunt
redirectate catre un set de servere care ofera serviciul cerut.

Server Pool: este format dintr-un cluster de servere care implementeaza serviciile oferite, cum ar
fi Web, Ftp, mail, DNS, etc.

Backend Storage: spatiu de stocare partajat cu scopul de a avea disponibile aceleasi resurse pentru
toate serverele.

Linux Virtual Server redirecteaza cererile clientilor catre servere diferite in functie de anumiti algoritmi
de programare si extinde stiva TCP/IP a kernelului Linux pentru a suporta trei tehnici de IP loadbalancing:
1. NAT (Network Address Translation): Realizeaza maparea de adrese IP de la un grup la altul.
NAT este folosit atunci cand se doreste accesarea Internetului in cadrul retelelor interne

2. IP tunneling: Incapsularea unei datagrame IP in datagrame IP. Aceasta tehnica permite


impachetarea datagramelor destinate unei adrese IP si redirectarea acesteia spre o alta adresa
IP
3. Direct routing: Permite routarea raspunsului catre utilizatorul real in schimbul managerului de
sarcini
Linux Virtual Server ofera partu algoritmi de programare pentru selectia serverelor clusterului pentru
conexiunile noi:
1. Round robin directioneaza conexiunile de retea la servere diferite folosind paradigma round
robin
2. Weighted round robin trateaza serverele reale cu capacitati diferite de procesare. O secventa
de programare va fi generate in functie de capacitatea serverului. Cererile clientilor sunt
redirectate utilizand paradigma round robin
3. Least-connection directionarea cererilor clientilor catre server se realizeaza cu un numar
minim de conexiuni
4. Weighted least-connection O rata performantei poate fi atribuita fiecarui server. In functie
de aceasta rata, un server cu o performanta mai mare va primi un procent mai mare de
conexiuni disponibile in orice moment.

Concluzii
Clusterele, prin puterea procesarii paralele si raportul pret/performanta sunt una dintre solutiile cele mai
bune pentru utilizatorii care isi doresc cresterea performantei si a sigurantei datelor.

Bibliografie:
1) W. Gropp and E. Lusk, Goals Guiding Design: PVM and MPI.pdf, Proceedings of the IEEE
International Conference on Cluster Computing, Chicago, September 2002
2) Thomas Sterling, William Gropp, Ewing Lusk, "Beowulf Cluster computing with Linux, 2nd Edition",
MIT Press, 2003
3) Cluster Computing and Applications, Mark Baker (University of Portsmouth, UK), Amy Apon
(University of Arkansas, USA), Rajkumar Buyya (Monash University, Australia), Hai Jin (University of
Southern California, USA)