Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En este material primero re!isamos cmo instalar "!irtualmente# y usar un cluster de cmputo con el sistema operati!o Roc$s y despu%s exploramos unas cuantas &erramientas y metodolog'as (tiles para &acer c)lculos intensi!os, *ue demandan muc&os recursos de procesamiento y/o memoria, del estilo de los *ue se &acen en +ioin,orm)tica- .n posi+le li+ro de texto para ampliar este material es /ig& 0er,ormance 1inux Clusters 2it& 3SCAR, Roc$s, 3pen4osix and 40I-
Rocks
Roc$s es una distri+ucin 1inux dise ada para construir clusters de cmputo- Incluye, adem)s del sistema operati!o, un con5unto de rolls, *ue son pa*uetes de so,t2are adecuados para tareas m)s especializadas, *ue se instalan opcionalmente-
"#ox$anage%crea!ehd%-- ilename%&/home/pepe/v'ocks5(-)ron!end.vdi&%--si.e%50000% --varian!%/!andard% "#ox$anage%s!oragec!l%&v'ocks5(-)ron!end&%--name%&/010%2on!roller&%--add%sa!a% --con!roller%3n!el0hci "#ox$anage%s!oragea!!ach%&v'ocks5(-)ron!end&%--s!oragec!l%&/010%2on!roller&% --por!%0%--device%0%--!*pe%hdd%--medi,m%&/home/pepe/v'ocks5(-)ron!end.vdi& "#ox$anage%s!oragec!l%&v'ocks5(-)ron!end&%--name%&34-con!rol&%--add%ide "#ox$anage%s!oragea!!ach%&v'ocks5(-)ron!end&%--s!oragec!l%&34-con!rol&%--por!% 0%--device%0%--!*pe%dvddrive%--medi,m% /home/pepe/so !/area51+base+bio+ganglia+hpc+kernel+os+sge+web-server+xen16.12.2009-15.16.53.i386.disk1.iso "#ox$anage%s!ar!vm%&v'ocks5(-)ron!end&
Cras estos comandos da comienzo el proceso normal de instalacin del nodo maestro o frontend , documentado en la 2e+ o,icial- El proceso es casi autom)tico, pero de+es recordar dos cosas> escri+e ron!end cuando aparezca el terminal de arran*ue boo!5 cuando llegue el momento elige como m'nimo estos rolls > kernel6%base6%web% server6%os .na !ez instalado el ron!end puedes a adir el pa*uete <irtual=ox guest additions para mayor comodidad En el terminal del nodo maestro teclea como superusuario 7%inser!-e!hers 0ara cada nodo compute *ue *uieras crear, empezando por el ?D?, &asta el ?DE teclea en el terminal de tu 1inux>
"#ox$anage%crea!evm%--name%&v'ocks5(-2omp,!e-0-0&%--os!*pe%'ed+a!%--regis!er "#ox$anage%modi *vm%&v'ocks5(-2omp,!e-0-0&%--memor*%1000%--vram%32%--nic1% in!ne!%--a,dio%none%--nic!*pe1%825(0-$%--boo!1%ne!%--boo!2%disk%--boo!3%none% --boo!(%none "#ox$anage%crea!ehd%-- ilename%&/home/pepe/v'ocks5(-2omp,!e-0-0.vdi&%--si.e% 50000%--varian!%/!andard% "#ox$anage%s!oragec!l%&v'ocks5(-2omp,!e-0-0&%--name%&/010%2on!roller&%--add% sa!a%--con!roller%3n!el0hci "#ox$anage%s!oragea!!ach%&v'ocks5(-2omp,!e-0-0&%--s!oragec!l%&/010%2on!roller&% --por!%0%--device%0%--!*pe%hdd%--medi,m%&/home/pepe/v'ocks5(-2omp,!e-0-0.vdi& "#ox$anage%s!oragec!l%&v'ocks5(-2omp,!e-0-0&%--name%&34-%2on!roller&%--add%ide% "#ox$anage%s!ar!vm%&v'ocks5(-2omp,!e-0-0&
En el terminal del nodo maestro teclea como superusuario la tecla F@ para terminar de a adir nodos
Figura 1: Cluster Roc$s B-; con un maestro y dos nodos compute so+re <irtual=ox-
Si alg(n nodo estu!iera con pro+lemas aparece en la columna s!a!es en el estado a, Cmo ver qu rolls estn instalados 0ara este ,in de+es teclear en el terminal> 7%rocks%lis!%roll "en el apartado ?-7-7 se explica cmo instalar un roll# Nombres de los nodos 0or de,ecto, Roc$s llama al nodo maestro ron!end- 1os nodos secundarios o compute se !an numerando al crearse, desde comp,!e-0-0 &asta comp,!e-0-@, donde EG9 es el n(mero total de nodos secundarios instalados Cmo ver la carga de trabajo en el cluster Si *uieres !er el estado actual de las colas de tra+a5os +asta con teclear 7%9s!a!%- en un terminal del maestro y podr)s !er *u% est) corriendo en el cluster y *u% est) en espera, y la carga de cada nodoSi *uieres !er la carga glo+al del sistema gr),icamente lo me5or es usar el so,t2are ganglia, *ue suele estar instalado en los clusters Roc$s- 0ara ello a+re un na!egador 2e+ desde el nodo maestro apuntando a la .R1 h!!p5//localhos!/ganglia, o si est) con,igurado el ser!idor 2e+, desde cual*uier otra ma*uina apuntando a la .R1 h!!p5//www.maes!ro.org/ganglia-
Figura : Estado de un cluster Roc$s "de 9H nodos# tal como lo muestra :anglia Cmo conectarte a uno de los nodos secundarios 0or de,ecto, Roc$s con,igura los nodos de manera *ue son parte de una red 1AE con el maestro e in!isi+les desde ,uera de ella, as' *ue solamente podremos conectarnos a ellos desde un terminal del nodo maestro> roo!;maes!ro%<=A%ssh%comp,!e-0-6 *ue dependiendo de la !ersin de Roc$s es e*ui!alente a>
:roo!;cl,s!er%<=7%ssh%c0-6
Cmo probar el sistema de colas para distribuir tareas a los nodos En Roc$s el mane5ador de colas por de,ecto es :rid Engine "S:E, incluido en el roll sge#, *ue se explica por medio de e5emplos en la documentacin o,icial documentacin o,icial<amos a pro+ar *ue el S:E de nuestro cluster ,unciona, en!iando una serie de tra+a5os sencillos al mane5ador S:E mediante el comando 9s,b- 0ara ellos, primero editamos este cdigo y lo guardamos en un arc&i!o llamado por e5emplo !es!/B-.pl >
AC/,sr/bin/perl% orDm*%7iE0F7iG30F7i++HI%sleepD2H%8 prin!%&okCJn&F
Cras &acer el arc&i!o e5ecuta+le con 7%chmod%+x%!es!/B-.pl podemos en!iar !arias instancias de este programita al cluster y compro+ar *ue los tra+a5os e,ecti!amente se e5ecutan
&aciendo>
:pepe;cl,s!er%<=7% or%DDiE1FiGE10Fi+E1HHF%do%9s,b%!es!/B-.plF%%done Ko,r%Lob%2%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%3%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%(%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%5%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%6%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%M%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%8%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%9%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%10%D&!es!/B-.pl&H%has%been%s,bmi!!ed Ko,r%Lob%11%D&!es!/B-.pl&H%has%been%s,bmi!!ed :roo!;cl,s!er%<=7%9s!a!%9,e,ename%%%%%%%%%%%%%%%%%%%%%%9!*pe%resv/,sed/!o!.%load>avg%arch% s!a!es -------------------------------------------------------------------------------all.9;comp,!e-0-0.local%%%%%%%%#3?%%%0/0/1%%%%%%%%%%0.05%%%%%lx26-x86%%%%%% AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/%-%?-@43@B%NO#/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA %%%%%%3%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%(%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%5%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%6%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%M%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%8%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%%9%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%10%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1% %%%%%11%0.55500%!es!/B-.pl%pepe%%%%%%%%%9w%%%%06/10/2011%095(15(5%%%%%1
0uedes indagar so+re todas las opciones de 9s,b en el terminal con 7%man%9s,b, por e5emplo para aprender a guardar los mensa5es de error y la salida est)ndar en arc&i!os, como se muestra en el e5emplo ?-7-9 Cmo ejecutar el mismo comando en diferentes nodos del cluster desde el terminal Es posi+le in!ocar comandos desde el s&ell del nodo maestro para *ue sean e5ecutados en !arios "o todos los# nodos usando la instruccin rocks%r,n%hos!, *ue sustituye al antiguo comando cl,s!er- ork- Como es &a+itual en sistemas 1inux, podemos consultar su ,orma de uso tecleando su nom+re en el terminal>
:roo!;cl,s!er%<=7%rocks%r,n%hos!%%% error%-%m,s!%s,ppl*%a%command :hos!=...%Icommand8%Imanaged8%Ix118%:commandEs!ring=
0or e5emplo, para compro+ar los procesos acti!os en todos los nodos compute de un cluster, podemos teclear en el terminal> 7%rocks%r,n%hos!%comp,!e%ps A&ora un e5emplo similar so+re un nodo en particular>
:roo!;cl,s!er%<=7%rocks%r,n%hos!%comp,!e-0-0%&ls%-l%/!mp& comp,!e-0-15%!o!al%12 comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%09528%pos!-91-sge-execd.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%09528%pos!-99-done.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%%2011%pre-09-prep-kernelso,rce.deb,g comp,!e-0-15%-rw-r--r--%1%roo!%roo!%%%%0%N,n%1(%%2011%pre-10-src-ins!all.deb,g comp,!e-0-15%drwx------%2%roo!%roo!%(096%N,n%1(%%2011%'2/ comp,!e-0-15%-rw-r--r--%1%roo!%roo!%3321%N,n%1(%%2011%sshd>con ig
comp,!e-0-15%drwx------%2%roo!%roo!%(096%N,n%1(%095(2%ssh-9PwOne33M5
o reboo! seg(n
En cuanto al nodo maestro, siendo superusuario, &ay *ue e5ecutar powero sea necesario Cmo eliminar nodos del cluster
Si por e5emplo el nodo ?D9? ,alla y lo *ueremos eliminar del sistema de colas, es su,iciente con 6 instrucciones en el terminal de superusuario>
inser!-e!hers%--remove%comp,!e-0-10F rocks%lis!%hos!F rocks%s*nc%con ig
!e&ras o t'reads
3tra posi+ilidad de sacar partido a los recursos de un cluster es apro!ec&ar los procesadores de sus nodos, *ue &a+itualmente son multiDn(cleo "multiDcore#- Este tipo de procesadores se pueden programar para resol!er !arias tareas en paralelo creando &e+ras o t&reads- 1a principal !enta5a de repartir un tra+a5o en &e+ras es ganar capacidad de procesamiento, pero si el tra+a5o a realizar necesita acceder de manera intensa al disco duro entonces di,erentes &e+ras en el mismo nodo compiten entre si, pudiendo e!aporarse el terico +ene,icio de &acerlo en paralelo- 0recisamente para este tipo de tra+a5os es pre,eri+le usar di,erentes nodos desde el mane5ador del cluster-
Este tipo de programacin puede ser comple5a, y re*uiere de ciertos conocimientos so+re la implementacin de las &e+ras en cada lengua5e, *ue puede di,erir +astanteEn lengua5e C &ay !arias implementaciones, pero posi+lemente las m)s est)ndar sean las 03SII pt&reads, de las *ue &ay a+undantes tutoriales en la Red, como %ste del 1a2rence 1i!ermore Eational 1a+oratory o %ste del 4ICEn 0erl la implementacin !igente son las interpreter t&reads "it&reads#, *ue ,orman parte del core de 0erl y por tanto est)n +ien documentadas, como los mdulos t&reads y t&reads>>s&ared- En el terminal puedes acceder a la documentacin de tu sistema con 7%perldoc%!hreadsEo &a sido %sta la cara m)s +rillante de la &istoria de 0erl, puesto *ue se &an pro+ado di,erentes implementaciones anteriormente, ya a+andonadas, y las actuales it&reads tienen pro+lemas de gestin de memoria en algunas !ersiones de 0erl so+re 1inux "no en Findo2s#- Ja *ue estos pro+lemas se &an resuelto desde la !ersin B-96-K parece *ue podremos programar it&reads con ciertas garant'as de continuidad- El siguiente e5emplo de it&reads, modi,icado de otro del curso 0erl en +ioin,orm)tica, muestra cmo coordinar y compartir datos entre &e+ras en el perl B-@-@ de Roc$s B-;, +astante m)s limitado *ue !ersiones posteriores>
AC/,sr/bin/perl%-w A%!es!ed%in%'ocks%5.(%wi!h%perl%5.8.8 ,se%s!ric!F ,se%!hreadsF ,se%!hreads55sharedF% m*%7$0T1+'-04/%E%(F m*%7/-X)3Y-%%%%E%Upro!ein>se9,ence>complexes. aaUF% A%descargado%con%wge!%-c% h!!p5// lores!a.eead.csic.es/3d oo!prin!/download/pro!ein>se9,ence>complexes. aa m*%D;hebras67sec,encia67hHF m*%;sec,encias%5%shared%E%DHF%A%da!os%compar!idos%en!re%hebras m*%D7!o!al6S rec,encias>globalesH%E%D0HF AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A%1H%lee%archivo%de%sec,encias%*%agregalas%a%,n%arreglo openD/-X67/-X)3Y-H%ZZ%die%&A%70%5%canno!%read%7/-X)3Y-Jn&F whileDG/-XWH I %%%nex!%i D/[A/%ZZ%/[W/HF %%%p,shD;sec,encias6Dspli!H:0=HF 8 closeD/-XHF A%1H%ins!ancia%7$0T1+'-04/%n,evas%hebras%9,e%se%ponen%a%procesar%las%sec,encias or%7h%D1%..%7$0T1+'-04/H I% %%%prin!%&A%lan.o%hebra%7hJn&F %%%p,shD;hebras6%!hreads-Wcrea!eDJ\calc,la> rec,encias67hHHF% 8 A%2H%espera%a%9,e%acaben%las%hebras%*%recoge%s,s%res,l!ados% or%7h%D;hebrasH I %%%m*%7re >res,l!s%E%7h-WLoinDHF %%% oreach%m*%7aa%Dke*sDS7re >res,l!sHH %%%I %%%%%%nex!%i DC7re >res,l!s-WI7aa8HF %%%%%%7 rec,encias>globalesI7aa8%+E%7re >res,l!s-WI7aa8F %%%%%%7!o!al%+E%7re >res,l!s-WI7aa8F %%%8
8 prin!%&A%!o!al%aminoacids%E%7!o!alJn&F
s,b%calc,la> rec,encias I %%%m*%D7hebraH%E%;>F %%%m*%D7sec,encia67h!o!al6S rec,enciasH%E%DUU60HF %%%whileD1H %%%I %%%%%%I% %%%%%%%%%A%acceso%excl,sivo%a%lis!a%compar!ida%;sec,encias% %%%%%%%%%lockD;sec,enciasHF %%%%%%%%%7sec,encia%E%popD;sec,enciasHF %%%%%%8 %%%%%%i D7sec,enciaH%A%9,edan%sec,encias %%%%%%I %%%%%%%%%whileD7sec,encia%E<%/D:0-P=H/gH %%%%%%%%%I %%%%%%%%%%%%7 rec,enciasI718++F %%%%%%%%%%%%7h!o!al++F %%%%%%%%%8 %%%%%%8 %%%%%%else %%%%%%I %%%%%%%%%prin!%&A%hebra%7hebra%!ermina%D!o!alE7h!o!alHJn&F %%%%%%%%%re!,rn%JS rec,enciasF% %%%%%%8 %%%8% 8
MPI
1a manera m)s so,isticada para &a+lar entre procesos, y &acer *ue unos esperen a otros si es necesario, es posi+lemente a tra!%s del protocolo de comunicacin 40I " $essage #assing %nterface #, *ue sir!e para programar tareas en paralelo y permitir *ue di,erentes procesadores se comuni*uen por medio de mensa5es- Este tipo de comunicacin es adecuado para coordinar tra+a5os *ue corren en paralelo en !arios procesadores, aun*ue sea en di,erentes nodos, como ocurre normalmente en un cluster Roc$s3riginalmente el protocolo 40I se cre en lengua5e F3RCRAE, pero posteriormente se &a implementado "!arias !eces# en lengua5e C "1A4/40I, 40IC/, open40I#- 0recisamente el roll &pc de Roc$s incluye open$?3 y podemos instalarlo "como superusuario# ya sea durante la instalacin del ron!end "!er ?-9-9# o en un cluster ya instalado- En el segundo caso es necesario descargar la imagen IS3 de &pc, por
e5emplo mediante el comando 7%wge!%-c%h!!p5//mirror1.k,.ac.!h/rocks/rocks5.(/lin,x/hpc-5.(-0.i386.disk1.iso para luego instalarlo mediante las siguientes instrucciones en el terminal>
rocks%add%roll%hpc rocks%enable%roll%hpc cd%/expor!/rocks/ins!all/ rocks%crea!e%dis!ro rocks%r,n%roll%hpc%Z%bash ini!%6 rocks%r,n%hos!%comp,!e%/boo!/kicks!ar!/cl,s!er-kicks!ar!-pxe
MPI desde C
El est)ndar 40I a+arca m)s de cien su+rutinas, accesi+les poniendo Aincl,de%Gmpi.hW en nuestro cdigo, aun*ue solamente unas pocas son esenciales- 40I declara tipos de datos e*ui!alentes a los preexistentes en C, como $?3>)YO016%$?3>4OR#Y-6%$?3>3@1, *ue se pueden intercam+iar entre procesos, pero tam+i%n permite de,inir tipos dise ados por el usuario.n concepto importante es el de comunicador, una coleccin de procesadores *ue tra+a5an so+re un tra+a5o en paralelo, numerados de ? a ED9 y guardados en la !aria+le glo+al $?3>2O$$>]O'Y4<eamos esto con un par de e5emplos>
Aincl,de%Gs!dio.hW Aincl,de%Gs!dlib.hW Aincl,de%Gmpi.hW % /^%?rograma%Uhola%m,ndoU%donde%cada%procesador%re9,erido%se%iden!i ica6 basado%en%eLemplos%orginales%de%1im%Qaiser%Dh!!p5//www.sdsc.ed,/<!kaiserH6 del%/an%4iego%/,percomp,!er%2en!er6%en%2ali ornia%^/ in!%mainDin!%argc6%char%^^argvH I %%%%in!%m*id6%n,mprocsF %%%%)3Y-%^archF % %%%%$?3>3ni!D\argc6\argvHF %%%%$?3>2omm>si.eD%$?3>2O$$>]O'Y46%\n,mprocs%HF%//%dev,elve%el%n,mero%de%procesos%en% es!e%2O$$>]O'Y4 %%%%$?3>2omm>rankD%$?3>2O$$>]O'Y46%\m*id%HF%%%%%//%iden!i ica!e%por%el%m*id%asignado% % %%%%prin! D&/o*%el%procesador%Sd%de%,n%!o!al%de%SdJn&6m*id6n,mprocsHF %%%% %%%%i Dm*id%EE%1H%//%solamen!e%para%el%procesador%1 %%%%I %%%%%%%//%aL,s!a%la%r,!a%del%archivo%si%es%necesario% %%%%%%%archE openD&/home/pepe/archivo.!x!&6&w&HF %%%%%%% prin! Darch6&+ola6%so*%el%procesador%1Jn&HF %%%%%%% closeDarchHF %%%%8 %%%%%%%% %%%%$?3>)inali.eDHF %%%%%%%% %%%%re!,rn%0F 8
Este cdigo lo guardamos en un ,ic&ero "por e5emplo /home/pepe/!es!$?3.c# y se compila con el siguiente comando> 7%mpicc%!es!$?3.c%-o%!es!$?3.exe En el contexto de un cluster Roc$s &a+itualmente *ueremos distri+uir las tareas entre di,erentes nodos, por e5emplo entre los ; procesadores o n(cleos de los nodos computeD?D? y computeD?D9- Eso lo
indicamos creando un ,ic&ero de texto con el siguiente contenido, *ue podemos llamar /home/pepe/lis!anodos.!x!>
comp,!e-0-0 comp,!e-0-0 comp,!e-0-1 comp,!e-0-1
Es posi+le usar 40I desde un programa en C para repartir tareas como en el e5emplo de perl ?-7-9, como se !e en el siguiente documento de Cim Laiser40I tam+i%n sir!e para coordinar procesos de escritura en paralelo, como se explica en este 0DF de Cim Laiser-
Al igual *ue con 0erl, &ay disponi+les inter,aces para usar 40I desde otros lengua5es de alto ni!el, como por e5emplo 0yt&on -