SLURM (de l'anglès Simple Linux Utility for Resources Management), és un sistema de planificació de tasques i gestió de clústers. Es caracteritza per ser portable, tolerant a errors, de codi obert i amb una escalabilitat molt alta. Com a sistema de gestió té tres processos claus:
Assignar nodes de còmput durant un temps determinat perquè els usuaris puguin executar tasques. Gestionar les tasques mitjançant un framework que permet iniciar, executar i supervisar-les. Administrar una cua de tasques pendents per tal d'assignar els recursos de còmput per ordre de prioritat.
Existeixen dos tipus de Daemons que interactuen entre ells. Slurmctld, l'administrador del sistema, i Slurmd. El primer s'executa en un únic node actiu i unifica la visió del Clúster gestionant nodes i planificacant els treballs. Slurmd, en canvi, resideix en tots els nòdes de còmput i s'encarrega d'acceptar treballs i executar-los.
Els usuaris interaccionen amb el sistema mitjançant ordres. Les més freqüents són sinfo, srun, sbatch, squeue, scancel i scontrol.
Arquitectura SLURM està format per dos tipus de daemons: slurmd, que s'executa a cada node i té com a missió executar tasques, i l'slurmctld, que s'executa a un node i s'encarrega de monitorar recursos i tasques. Aquesta eina de Linux té la capacitat de gestionar:
Nodes: unitats de còmput Particions: agrupació lògica de nodes o set de recursos assignats a un usuari per una quantitat determinada de temps. Cada node ha de pertànyer a almenys una partició però el mateix node no té per què pertànyer a una sola. Les particions poden ser considerades com a cues, cadascuna de les quals té una sèrie de restriccions o condicions, com per exemple: el límit de temps de la tasca, els usuaris als quals es garanteix accés, mida de la tasca, etc. Tasques: dins d'una partició l'assignació de tasques es fa en ordre de prioritat fins que s'esgoten els recursos de la partició. Subtasques: processos que conformen o una tasca, normalment s'executen en paral·lel.
miniatura|Comunicació enter Slurmctld i Slurmd
Slurmd Aquest daemon s'executa en paral·lel a tots els nodes membres del clúster. El seu funcionament es compara amb el d'un daemon de terminal remota; és a dir, llegeix els arxius de configuració comuns d'SLURM, notifica al controlador que és actiu, espera a rebre una tasca, executa les tasques que rep, retorna l'estatus de sortida de la tasca i llavors torna a esperar una altra tasca.
El fet que SLURM executi tasques per diversos usuaris fa que hagi de ser executat com usuari root o administrador.
Slurmd té quatre components o serveis principals que posa a disposició del node central:
Serveis d'estatus de màquina i tasques: respon a les peticions del controlador quan sol·licita el seu estat i envia respostes asíncrones quan canvia d'estat, per exemple, quan slurmd s'inicia. Execució remota: executa, gestiona i neteja l'entorn una vegada un procés s'hagi finalitzat, allotjat els recursos amb dependències, inicialitza l'stdio, etc. Fil de servei de copia: permet la gestió de stderr, stdout i stdin de tasques remotes. Control de tasca: permet la comunicació asíncrona entre el node i l'entorn remot des de del qual s'executa una tasca.
Slurmctld Slurmctld és el node central del clúster. Aquest daemon té, per cada estructura de dades, bloquejos d'escriptura i lectura independents entre si. Aquest factor proporciona escalabilitat al sistema.
Quan slurmctld arrenca llegeix l'arxiu de configuració i tota dada d'estatus guardada. Periòdicament va guardant a disc dades del seu propi estat.
Aquest controlador pot estar en funcionament o en pausa, depenent de l'estat del seu daemon bessó, en cas de tenir-ne.
Al contrari que el slurmd, no s'ha d'aixecar amb un usuari arrel, de fet s'aconsella la creació d'un usuari únicament dedicat a l'execució i la gestió del controlador d'SLURM.
Com succeeix en el cas de lslurmd aquí també tenim components o serveis principals, en aquest cas tres:
Administrador de nodes: Monitora l'estat de cada node membre del clúster, això inclou assegurar-se que cada node té una determinada configuració abans de ser considerats disponibles per la presa de tasques. Administrador de particions: agrupa els nodes en sets lògics anomenats particions. Aquest administrador també s'encarrega de repartir les tasques en funció de la configuració de cada partició així com del seu estat. Administrador de tasques: Accepta les tasques d'usuari i les introdueix a una cua de tasques ordenada per prioritat. Aquest administrador no només es crida de forma periòdica sinó que també s'invoca cada vegada que hi ha algun canvi que podria permetre que una tasca es comenci a executar.
Slurmdbd Existeixen més daemons complementaris a SLURM. N'és un exemple slurmdbd que s'utilitza com interfície per una base de dades per SLURM.
Com funciona? Ordres El sistema proporciona unes ordres a l'usuari per enviar treballs a la cua i que s'executin. Les més comunes són: ORDREDEFINICIÓsrunEnviar un treball per a ser executat.sbatchEnvia guions de treballs al sistema per a ser executats (a la cua).sallocEnviar un treball per a ser executat o inicialitzar el treball en temps real.scancelCancel·la un treball.scontrolS'utilitza per mostrar l'estat de Slurm. Hi ha varies opcions només disponibles para rootejar.sinfoMostrar estat de particions y nodes.squeueMostrar estat de treballs.sacctDona informació tant de les tasques actives com de les ja complertes.sattachAfegeix una entrada o sortida estàndard a una tasca.sbcastS'utilitza per enviar un arxiu als nodes de còmput assignats a una tasca.striggerEns permet la visualització, l'obtenció o la creació d'esdeveniments d'activació.sviewInterfase gràfica per obtenir informació sobre l'estat dels jobs, particions i nodes de còmput. Modes d'execució Cada tasca té el seu propi identificador numèric, nom, temps límit i mida d'especificacions. D'aquesta manera el controlador pot saber quin és l'estat de la seva tasca en cada moment. Abans d'enviar una tasca, s'ha de tenir en compte que el fet d'augmentar la quantitat de recursos que es sol·licita pot disminuir el temps que comporta l'execució però pot augmentar el temps d'espera a la cua de Slurm. La principal causa d'això és perquè altres usuaris també han de poder utilitzar aquests mateixos recursos.
Hi ha 3 modes d'executar tasques. El primer i més simple, anomenat Interactive Mode, permet la comunicació interactiva entre el terminal de l'usuari i la tasca en temps real. El segon és el Queued Mode, on les tasques esperen la disponibilitat dels recursos necessaris en una llista per ser executats remotament sense interacció externa. En l'últim, Allocate Mode, la tasca i la gestió dels recursos s'assigna a l'usuari el qual programa manualment les execucions. miniatura|Interactive Mode
Interactive Mode (srun) L'usuari executa l'ordre srun indicant les opcions desitjades de l'execució. Slurmctld tracta d'assignar-li els recursos necessaris demanats i envia la resposta de la sol·licitud al node des d'on s'ha executat l'ordre srun. El node usuari es comunica amb el deamon slurmd dels diferents recursos sol·licitats per tal d'iniciar el procés. Slurmd crea un socket de comunicació entrada/sortida entre el port del node extern de l'usuari i els recursos. D'aquesta manera els processos es comuniquen amb l'usuari mitjançant stdout, stdin i stderr. Una vegada establerta la connexió s'executa la tasca. A través del canal de comunicació l'usuari té la possibilitat d'enviar ordres mitjançant la terminal i els nodes d'execució poden respondre. Depenent de l'especificació del programa les ordres seran unes o unes altres. Quan l'usuari indica la finalització del procés, els diferents nodes de còmput envien un missatge de sortida conforme la tasca ha finalitzat correctament i s'alliberen. El node de l'usuari envia a slurmctld que el recursos ja estan disponibles per acceptar noves tasques. Slurmctld envia un procés d'epíleg on s'especifica com ha anat l'execució i els nodes utilitzats responen.
Un exemple per enviar una tasca és:$ srun -N 2 -n 48 -t 30 -A xz0123 ./tascaminiatura|Queued Mode
Queued Mode (sbatch) L'usuari executa l'ordre sbatch indicant les opcions desitjades de l'execució en un guió. Slurmctld crea un directori de treball, amb fitxer de sortida per poder gestionar les E/S estàndards stdout, stdin i stderr, i envia la resposta de la sol·licitud. En aquest moment el treball sol·licitat es posa a la cua esperant recursos disponibles. Quan els recursos estan disponibles i la prioritat del treball és superior a altres, slurmcltd envia les variables d'entorn, el directori de treball i el guió a un node slurmd. Aquest slurmd farà la gestió dels recursos a utilitzar en l'execució de la tasca. Fent ús d'una o varies crides de l'ordre srun, indicada al guió, enviarà treballs paral·lels a altres slurmd. Farà una funció similar a la funcionalitat Interactive Mode. A diferencia del mètode anterior, les comunicacions d'E/S es realitzen de slurmd a slurmctld. Així doncs, cada subtasca comunica directament amb slurmctld. Una vegada finalitzada la tasca, el node slrumd que gestiona l'execució envia a slurmctld que els recursos ja estan disponibles per acceptar noves tasques. Slurmctld envia un procés d'epíleg on s'especifica com ha anat l'execució i els nodes utilitzats responen.
L'ús de guions és útil a l'hora de llençar les tasques al clúster, els quals estan basats en ordres bash d'execució anomenades Scheduler directives. Un exemple podria ser:#!/bin/bash #SBATCH --job-name=test #nom de la tasca #SBATCH --output=resultat.txt #fitxer de sortida #SBATCH –N 1 #numero de nodes #SBATCH -n 8 #numero de cores #SBATCH --exclusive #recursos exclusius
gcc <arxiu>.c -o tasca # compilar srun ./tasca # executarPer tal d'executar-lo s'ha de realitzar la comanda:$ sbatch <fitxer_script>miniatura|Allocation Mode
Allocation Mode (salloc) L'usuari executa l'ordre salloc indicant els recursos que requereix. Slurmctld, quan disposa dels recursos sol·licitats, respon a l'usuari amb la credencial d'identificació i la llista de nodes. En aquest punt, els recursos s'assignen a l'usuari però no tenen una tasca assignada. Quan l'usuari executa l'ordre srun s'inicia un procés similar a Interactive Mode. Es fa una petició de treball a Slurmctld, el qual retorna la resposta dels requeriments i permet inicialitzar la tasca. El deamon slurmd del node usuari envia a slurmd els diferents recursos assignats per tal d'iniciar la tasca i es creen els sockets de comunicació per les entrades i sortides estàndards. Una vegada establerta la connexió s'executa la tasca. Els diferents nodes realitzen la computació pertinent i es realitza la comunicació establerta. Quan els nodes acaben la feina assignada s'envia un missatge de finalització. Encara que hi hagi treballs en cua els recursos es mantenen assignats a l'usuari. El node de l'usuari ha d'especificar a slurmctld l'alliberament dels recursos implícitament mitjançant scancel i el número de credencial (en el cas que l'ordre srun s'hagi indicat posteriorment de la salloc). Una vegada finalitzat el procés s'alliberen els recursos i Slurmctld requereix l'epíleg als nodes.
Exemple d'execució:$ salloc -N5 $ srun -n10 ./tasca $ exitSLURM té la seva pròpia sintaxis per sol·licitar recursos informàtics. Per obtenir una llista complerta d'aquesta sintaxis s'ha d'executar l'ordre: “man <ordre a consultar>”. A continuació es mostra una petita part de la sintaxis més utilitzada per norma general: SINTAXISDESCRIPCIÓ--ntasks = <número>Número de processos a executar --nodes = <número>Nodes diferents on s'executa --cpus-per-task = <número>CPUs per executar cada tasca --ntasks-per-node = <atribut>Tasques a executar a cada node--partition = <nom de la partició> Sol·licitar partició / cua especificada.
Estats d'un treball miniatura|Estats possibles d'un treball.|317x317px
Pending: Treball en cua.