UNIVERSITÀ DEGLI STUDI DI PARMA
FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI
CORSO DI LAUREA INFORMATICA
OTTIMIZZAZIONE CRITERI DI SCHEDULING
PER JOB MULTIPROCESSO IN AMBIENTE GRID
RELATORE:
Chiar.mo Prof. ROBERTO ALFIERI
CANDIDATO:
LEONARDO MUTTI
Anno Accademico 2007-2008
A coloro che nel mio percorso
hanno sempre creduto.
Grazie.
Indice
1 Premessa........................................................................................................................8
2 Teoria delle code..........................................................................................................10
2.1 Schema di un processo a coda.............................................................................10
2.1.1 Processo degli arrivi.....................................................................................11
2.1.2 Capacità della coda.......................................................................................11
2.1.3 Processo di servizi........................................................................................11
2.1.4 Canali di servitori.........................................................................................12
2.1.5 Descrivere una coda – Notazione Kendall...................................................12
2.1.6 Indici di efficienza........................................................................................13
2.1.7 Valutazione indici di efficienza – Legge di Little........................................15
2.2 Fair Queuing........................................................................................................16
2.2.1 Proprietà.......................................................................................................17
2.2.2 Weighted fair queuing..................................................................................18
2.3 Preemption...........................................................................................................19
2.4 Starvation.............................................................................................................20
2.5 Checkpointing......................................................................................................21
3 Scenari.........................................................................................................................22
3.1 Reti.......................................................................................................................22
3.2 Sistemi Operativi.................................................................................................24
3.2.1 Scheduler della CPU....................................................................................25
3.2.2 Scheduling con diritto di prelazione............................................................25
3.2.3 Criteri di scheduling.....................................................................................27
3.2.4 Algoritmi di scheduling................................................................................28
3.3 Job Manager.........................................................................................................28
3.3.1 Algoritmi di assegnazione dei nodi..............................................................30
4 Grid..............................................................................................................................32
4.1 Evoluzione del Grid Computing..........................................................................33
4.2 Il Cluster Grid di Parma.......................................................................................35
5 Job Sheduler................................................................................................................37
5
5.1 Controllo del traffico............................................................................................38
5.2 Obbiettivo primario..............................................................................................38
5.3 Ottimizzazione.....................................................................................................38
5.4 MAUI...................................................................................................................38
5.4.1 Filosofia e obbiettivi dello scheduler Maui..................................................39
5.4.2 Scheduling Object........................................................................................39
5.4.3 Risorse..........................................................................................................40
5.4.4 Class (or Queue)...........................................................................................41
5.4.5 Partitions......................................................................................................41
5.4.6 Account........................................................................................................42
5.4.7 Priorità..........................................................................................................42
5.4.8 Preemption...................................................................................................42
5.4.9 Fairness........................................................................................................47
5.4.10 Fairshare.....................................................................................................47
5.4.10.1 Obbiettivi del fairshare......................................................................51
5.4.11 Reservation.................................................................................................52
5.4.12 Backfill.......................................................................................................56
5.4.13 Checkpointing............................................................................................58
5.5 MOAB..................................................................................................................59
5.6 LSF.......................................................................................................................59
5.7 Job Multiprocesso................................................................................................60
6 Sviluppo del progetto...................................................................................................61
6.1 TORQUE.............................................................................................................61
6.1.1 Installazione di TORQUE............................................................................61
6.1.2 Creazione dei pacchetti RPM.......................................................................63
6.1.3 Il file “server_name”....................................................................................63
6.1.4 Il file "nodes"...............................................................................................64
6.1.5 Installare Torque in un nodo.........................................................................64
6.1.6 Il file "config"...............................................................................................64
6.1.7 Creazione delle code....................................................................................65
6.1.8 Il comando qsub...........................................................................................66
6
6.2 MAUI...................................................................................................................67
6.2.1 Installazione di Maui....................................................................................67
6.2.2 Configurazione iniziale................................................................................68
6.2.3 Maui testing..................................................................................................69
6.2.4 File layout.....................................................................................................69
6.3 MOAB..................................................................................................................71
6.3.1 Installazione di Moab...................................................................................71
6.3.2 Variabili d'ambiente......................................................................................71
6.3.3 Avviamo Moab Workload Manager.............................................................72
6.3.4 Installazione Moab Cluster Manager...........................................................72
6.4 Gestione del job CERT........................................................................................73
6.5 Esecuzione di un job multiprocesso.....................................................................74
7 Conclusioni..................................................................................................................75
8 Bibliografia..................................................................................................................77
9 Sitografia.....................................................................................................................78
10 Appendice A : maui.cfg.............................................................................................80
7
1
Premessa
La necessità di utilizzare strumenti informatici che consentano operazioni molto
complesse in tempi molto ristretti, ha portato l'idea di raccogliere risorse di calcolo per
ottenere strumenti sempre più performanti, al fine di soddisfare le richieste di molti.
Da questa idea nasce Grid: una struttura complessa di strumenti informatici distribuiti
su rete geografica che permetta, a chi né ha la possibilità, di svolgere operazioni
all'interno di siti di calcolo.
Da questa vasta disponibilità di risorse e da un numero sempre più ampio di possibili
fruitori nasce il problema affrontato in questo elaborato di tesi: come è possibile
ottimizzare la gestione di tali risorse in modo da soddisfare tutte le richieste, e renderla
“giusta”, così da ripartirle in modo equo e bilanciato ?
Da queste due domande e stato estrapolato un contesto di studio dal quale non
potevamo esulare, la gestione delle code e dei criteri di scheduling.
Partendo da un analisi teorica di come le code possano essere rappresentate per essere
gestite e studiate e stato analizzato come esse vengano risolte in due contesti informatici
fondamentali: i sistemi operativi e le reti di calcolatori.
Una volta compresi i concetti chiave di tali gestioni si è studiato più nel dettaglio i
diretti gestori di code nei siti di calcolo in ambiente Grid, ovvero i job scheduler.
Analizzando le loro principali caratteristiche e metodi di funzionamento ci siamo
imbattuti nelle problematiche della gestione di code di job come: la gestione degli
utenti, l'assegnazione delle risorse a tali utenti, la preemption, il problema della
starvation, l'introduzione della tecnica del fairshare e altre ancora.
Lavorando sul sito di calcolo dell'Università di Parma si è proceduto a configurare il job
scheduler, in modo da risolvere tali problematiche e ad introdurre con successo alcune
tecniche avanzate di gestione code come la backfill e il fairshare.
In tale contesto si è manifestata la ormai sempre più attuale necessità di gestione di job
multiprocesso, che richiedono una configurazione più complessa e accorta del sito di
8
calcolo dovuta alla loro particolare necessità di risorse in modo simultaneo.
9
2
Teoria delle code
La teoria delle code è lo studio matematico delle linee di attesa (o code) e di vari
processi correlati, quali il processo di arrivo in coda, l'attesa (essenzialmente un
processo di immagazzinamento) e il processo di servizio. Può essere applicata ad
un'ampia varietà di problemi reali, soprattutto nel campo dei trasporti, delle
telecomunicazioni, della fornitura di servizi pubblici (ad es. in sanità) e delle operazioni
aziendali.
Usualmente, la teoria delle code è considerata una branca della ricerca operativa. Le sue
origini vengono fatte risalire al 1909 quando l'ingegnere danese Agner Krarup Erlang
pubblicò un articolo intitolato “The theory of probability and telephone conversations”
relativo alle attese nelle chiamate telefoniche.
2.1
Schema di un processo a coda
Schematicamente un processo in coda possiamo rappresentarlo nel seguente modo:
Sorgente di arrivi
Clienti
Coda
Stazione
di servizio
Clienti serviti
Gli elementi fondamentali che caratterizzano un sistema di servizio sono:
•
Processo degli arrivi
•
Caratteristiche proprie della coda
•
Capacità della coda
•
Processo di servizio
•
Canali di servitori
10
2.1.1
Processo degli arrivi
La dimensione della sorgente degli arrivi per ipotesi è infinita. Il processo degli arrivi
viene definito in base ai tempi di interarrivo, cioè il tempo che intercorre tra due entrate
di due clienti successivi. In genere si ipotizza che il processo degli arrivi sia stazionario
cioè non dipende dal tempo e che le variabili aleatorie siano indipendenti ed
identicamente distribuite.
Le caratteristiche della coda, sono di due tipi:
•
Disciplina del servizio: cioè l'ordine con cui il cliente viene scelto dalla coda per
poter usufruire del servizio:
◦ FCFS (FIFO) First In First Out
◦ LCFS (LIFO) Last In Firs Out
◦ SIRO (Servizio in ordine casuale)
◦ Basata sulla classe di priorità
•
Comportamento del cliente: che può essere diverso, ad esempio:
◦ Rinuncia, il cliente aspetta poi si scoraggia
◦ Indecisione, cioè cambia coda
◦ Corruzione, paga un prezzo per avanzare di posto nella coda
◦ Inganno, avanza senza pagare il prezzo
2.1.2
Capacità della coda
Può essere o finita o infinita e questo va a influenzare la capacità del sistema, infatti se
la coda è finita e viene saturata il cliente non può accedere al servizio e deve cambiare
coda.
2.1.3
Processo di servizi
Descrive il modi in cui viene erogato il servizio, viene definito per mezzo dei tempi di
11
servizio nel caso in cui essi siano dipendenti, indipendenti ed identicamente distribuiti.
Il più comune è quello con i tempi di servizio esponenziale di Poisson. Può capitare che
il tempo di servizio dipenda dalla dimensione della coda, oppure avere dei servitori a
sequenza cioè una catena di servitori per poter ottenere il servizio completo.
2.1.4
Canali di servitori
Possiamo avere:
•
Più canali ed un unico servitore, cioè una fila davanti a un posto di servizio.
•
Un unico canale e più servitori, dove i clienti sono in un unica coda e appena un
servitore si libera si accede al servizio.
2.1.5
Descrivere una coda – Notazione Kendall
Nel 1953, David George Kendall introdusse la notazione A/B/C, successivamente estesa
come A/B/s/c/z/p nella quale i numeri sono sostituiti con quanto segue.
•
A è la distribuzione dei tempi di interarrivo (processo degli arrivi)
•
B è la distribuzione dei tempi di servizio
•
s è il numero dei servitori (capacità di servizio)
•
c è la capacità del sistema o capacità della sorgente di arrivi (il sistema può
accettare al massimo c clienti, per default è infinita)
•
z è la disciplina del servizio (per default è FCFS)
•
p è la capacità dell'intero sistema o dimensione della sorgente degli arrivi (per
default è infinita)
A è B possono assumere i seguenti valori:
•
M per "di Markov", implicante una distribuzione esponenziale negativa unilatera
per i tempi di servizio o tra gli arrivi: ciò implica l'assenza di memoria di questi
ultimi;
•
D per distribuzione "degenere" o "deterministica" dei tempi di servizio, tutti i
12
clienti hanno lo stesso valore;
•
Ek per una distribuzione di Erlang con k come parametro di forma;
•
G per una distribuzione "Generale".
z invece può assumere i valori:
•
First Come First Served (FCFS) (o First In First Out - FIFO) (il primo che arriva
viene servito per primo);
•
Last Come First Served (LCFS) (o Last In First Out - LIFO) (l'ultimo che arriva
viene servito per primo);
•
Service In Random Order (SIRO) (servizio in ordine casuale).
Esempi di code definiti con tali convenzioni sono:
M/M/1: Questa è una coda molto semplice. Qui il tempo di arrivo e il tempo di servizio
rispettano una distribuzione esponenziale negativa (Poisson). Il sistema prevede solo un
server. Questo tipo di coda può essere applicato a una grande varietà di problemi come
un qualsiasi sistema costituito da un numero ampio e indipendente di clienti
approssimabili con un processo di Poisson.
Purtroppo l'uso del processo di Poisson per stimare il tempo di servizio spesso non è
applicabile in modo fedele ma rimarrà solo una cruda approssimazione.
M/D/n: Qui il processo di arrivo è un processo di Poisson mentre il processo di servizio
rispetta una distribuzione deterministica. Il sistema ha n server. Qui il tempo di sevizio
di può essere stimato uguale per tutti i clienti. Per esempio una biglietteria con n
cassieri.
G/G/n: Questa è il sistema più generale dove l'arrivo del cliente e il tempo di servizio
sono entrambi casuali. Il sistema ha n server. Nessuna soluzione analitica è tuttora
conosciuta per questo tipo di code.
2.1.6
Indici di efficienza
Per analizzare le prestazioni del sistema è possibile utilizzare degli indici di efficienza:
13
•
L numero medio di clienti nel sistema
•
Lq numero medio di clienti in coda
•
W tempo medio per cliente nel sistema
•
Wq tempo medio per cliente in coda
quando è passato poco tempo dalla fornitura del servizio si dice che siamo in uno stato
transitorio che è uno stato difficile da gestire e valutare. Se passa un tempo sufficiente il
sistema passa a condizioni di regime ovvero il sistema diventa stazionario, questa è la
condizione più semplice da considerare. Questi indici valgono solo per condizioni a
regime.
Un altro indice che consideriamo è:
•
ρ fattore di utilizzazione del posto di servizio
Altre notazioni in input al nostro sistema sono:
•
λ frequenza media dei tempi di interarrivo (ovvero il numero medio di arrivi
nell'unità di tempo)
•
µ velocità media del servizio o tasso di servizio (ovvero il numero medio di
clienti per i quali è espletato il servizio nell'unita di tempo)
Partendo da λ e µ possiamo ottenere il tempo medio di interarrivo e il tempo medio di
servizio:
•
1/ λ tempo medio di interarrivo
•
1/ µ tempo medio di servizio
C'è una relazione che lega tutte e tre queste variabili ed è:
ρ = λ/ µ
Esempio
Consideriamo i seguenti intervalli di interarrivo:
3' 7' 10' 4' 6' in 30 minuti
14
e di voler calcolare il numero medio di arrivi nell'unità di tempo e il tempo medio di
interarrivo.
Il numero medio di arrivi nell'unità di tempo sarà dato da:
5/30 = 1/6 = λ
per cui il tempo medio di interarrivo sarà:
1/ λ = 6'
2.1.7
Valutazione indici di efficienza – Legge di Little
Schematicamente abbiamo una situazione del genere:
Range di arrivo
L
Modello
W
Range di servizio
Variabili
Il progettista avrà delle variabili per minimizzare il costo del servizio. Se L e W sono
grandi il modello non funziona bene, e per farlo funzionare bene posso variare il
numero di servitori, la disciplina, le regole del sistema, ecc...
Esiste una legge che ci viene in aiuto:
Legge di Little
L=λW
Lq=λWq
15
Se µ è costante → W = Wq + 1/µ
Applichiamo ora queste nozioni ad un caso base:
caso D/D/1, è il più facile da analizzare ma anche il più difficile che esista nella realtà:
Informazione
a(i) = istante di arrivo del cliente i
s(i) = durata del servizio del cliente i
Variabili
X(i) = istante di uscita del cliente i dal sistema
W(i) = tempo di attesa del cliente i
Se supponiamo che X(0) = 0 allora:
X(i) = s(i) + max {a(i), X(i-1)}
W(i) = X(i) – a(i) - s(i)
Il numero medio di clienti nel sistema è dato dalla somma dei clienti che soddisfano la
relazione:
a(i) ≤ t ≤ X(i)
Ora andremo ad analizzare alcuni delle nozioni più importanti, utili per una corretta
gestione delle code.
2.2
Fair Queuing
Il Fair Queuing è una algoritmo di scheduling usato in informatica sia nei computer per
la gestione di processi che nelle telecomunicazioni per permettere a flussi di pacchetti di
condividere equamente la capacità di trasmissione o ricezione del collegamento.
La nascita del Fair Queuing avviene nel 1985 grazie a John Nagle durante i suoi studi
nel campo delle telecomunicazioni.
16
Il vantaggio rispetto agli algoritmi di gestione delle code convenzionali è la migliore
gestione di flussi ad alto carico di lavoro, con la possibilità di sfruttare a pieno le
potenzialità del sistema. Fair Queuing può essere vista come una approssimazione del
processo di sharing della CPU in un calcolatore.
2.2.1
Proprietà
Il fair queuing è usato principalmente nei router, switch e multiplexer che inoltrano i
pacchetti da un buffer, con l'evolversi della tecnologia il fair queuing è stato utilizzato
anche per risolvere altri tipi di problemi, come nel nostro caso, la gestione di job
multiprocesso in un ambiente Grid.
Il fair queuing lavora con un buffer che può essere visto come un insieme di code dove i
pacchetti o i job vengono temporaneamente depositati prima di essere trasmessi o
eseguiti. Il buffer è suddiviso appunto in code dove vengono memorizzati i pacchetti o i
job in base alle loro caratteristiche. Ad esempio per quanto riguarda i pacchetti di rete
vengono suddivisi in base all'IP di destinazione oppure per quanto riguarda i job sono
assegnati ad una coda specifica in base a chi sottomette il job, quale è la sua priorità
oppure in base alle risorse richieste per la sua computazione.
La proprietà principale del fair queuing è quella di fissare degli obbiettivi di
massimizzazione o minimizzazione di alcuni valori, e in base a questi obbiettivi
l'algoritmo modula la gestione delle code.
Ecco il motivo del suo nome fair queuing, “code giuste”, infatti tramite l'assegnazione
di obbiettivi efficienti e corretti l'algoritmo si sviluppa nel tempo e si modula per gestire
al meglio il flusso di lavoro.
Ad esempio possiamo impostare come obbiettivo la minimizzazione del tempo di attesa
medio per ogni utente che sottomette un job, oppure nell'ambito delle reti il tempo di
attesa di ogni pacchetto in base all'IP di destinazione. L'algoritmo lavorerà per ottenere
questa minimizzazione così da soddisfare tutti i “clienti” delle code da esso gestite in
modo equo. Per ottenere tale obbiettivo l'algoritmo di scheduler farà in modo di
memorizzare tutti i dati relativi a quanto ogni utente che sottometto job oppure che deve
17
ricevere dei pacchetti di rete è stato già soddisfatto e in base a questi dati deciderà quale
utente ha ora la priorità di gestione.
2.2.2
Weighted fair queuing
WFQ è un algoritmo della famiglia degli algoritmi fair, è stato sviluppato nel 1989,
quattro anni dopo l'introduzione di Nagle del Fair Queuing, da Lixia Zhang. Questo
algoritmo è stato introdotto sempre nell'ambito della gestione delle reti in modo da
garantire un accesso equo alle risorse di rete, così da evitare che una flusso potesse
occupare tutte le risorse del canale di comunicazione.
Infatti a differenza del Fair Queuing classico dove i pacchetti vengono distribuiti su
varie code e le code vengono processate tutte simultaneamente suddividendo il canale
per le code presenti, il Weighted Fair Queuing classifica al momento dell'arrivo il
pacchetto, assegnando ad esso un peso (weight) in base ai dati contenuti nell'header del
pacchetto stesso e in base a questo peso andrà a posizionare il pacchetto in una coda
opportuna così da poter classificare le code presenti in base al peso dei pacchetti e in
base a tale peso lo scheduler andrà a ripartire la capacità di banda.
18
Illustrazione 1: Weighted Fair Queuing
2.3
Preemption
La preemption (o prelazione) è, in informatica, l'operazione in cui un processo viene
temporaneamente interrotto e portato al di fuori della CPU, senza alcuna richiesta di
cooperazione e con l'intenzione di ripristinarlo in un secondo momento, per dare spazio
ad un altro processo a priorità più alta. Tale scambio è noto come context switch (o
cambiamento di contesto). La preemption può avvenire tramite uno scheduler, che ha il
compito di interrompere e/o ripristinare i processi presenti nel sistema operativo a
seconda del loro stato; in tal caso si parla di preemptive scheduling (o scheduling con
diritto di prelazione).
Tramite il metodo di preemption vengono gestiti i sistemi operativi più performanti e
vengono gestiti i Batch System che necessitano di riservare maggiore attenzione e
priorità di esecuzione a certi job rispetto altri già in esecuzione.
19
La preemption è un metodo che interviene su due processi distinti, un primo processo
subisce la preemption e viene sospeso durante l'esecuzione per rilasciare risorse ad un
altro processo detto “processo preemptor”. Con risorse non intendiamo solo la CPU
come citato precedentemente ma vengono intese tutte le risorse necessarie al processo
“preemptor” presenti nel sito di calcolo.
2.4
Starvation
In informatica, per starvation (termine inglese che tradotto letteralmente significa
inedia) si intende l'impossibilità, da parte di un processo pronto all'esecuzione, di
ottenere le risorse di cui necessita.
Un esempio tipico è il non riuscire ad ottenere il controllo della CPU da parte di
processi con priorità molto bassa, qualora vengano usati algoritmi di scheduling a
priorità. Può capitare, infatti, che venga continuamente sottomesso al sistema un
processo con priorità più alta. Un aneddoto riguardo questo problema è la storia del
processo con bassa priorità, scoperto quando fu necessario fermare il sistema sull'IBM
7094 al MIT nel 1973: era stato sottomesso nel 1967 e fino ad allora non era ancora
stato eseguito.
Per evitare questi problemi si possono utilizzare, oltre ad algoritmi di scheduling
diversi, come Round Robin, le cosiddette tecniche di invecchiamento (aging). Ovvero si
provvede ad aumentare progressivamente, ad intervalli regolari, la priorità dei processi
qualora questi non siano riusciti ad ottenere le risorse richieste. Questo fa sì che anche
un processo con la priorità più bassa possa potenzialmente assumere quella più alta,
riuscendo così ad ottenere, in un tempo massimo predefinito, quanto di cui necessita.
Altri usi del termine starvation sono in relazione alle risorse di accesso alla memoria o
CPU: si dice che un programma è bandwidth-starved quando la sua esecuzione è
rallentata da un'insufficiente velocità di accesso alla memoria, o CPU-starved quando il
processore è troppo lento per eseguire efficacemente il codice.
20
2.5
Checkpointing
Il checkpointing è una tecnica utilizzata per fornire fault tolerance nei sistemi
informatici. Fondamentalmente si basa sulla memorizzazione dello stato corrente di una
applicazione così da poter utilizzare tali informazioni salvate per ripristinare
l'applicazione in caso di blocco o chiusura inaspettata dell'applicazione stessa.
Abbiamo 3 diverse tipologie di checkpointing: la prima cosiddetta kernel-checkpoint
dove è il kernel linux stesso che si occupa di fornire il servizio di checkpointing , la
seconda, user-checkpointing dove sono software definita dall'utente ad occuparsi di
effettuare checkpointing della applicazione in esecuzione e la terza, applicationcheckpointing dove è l'applicazione stessa che è stata progettata e programmata per
effettuare checkpointing.
Come vedremo il checkpointing è ampiamente utilizzato anche nei Batch System per
una corretta gestione dei processi.
21
3
Scenari
In questo capitolo vogliamo porre l'attenzione su come la gestione delle code sia
fondamentale nelle componenti più importanti di un sistema informatico.
Sia la progettazione di reti di calcolatori che la progettazione dei sistemi operativi base
dei nostri calcolatori ha dovuto scontrarsi con la gestione di code. Senza una gestione
corretta di tali code non si sarebbe mai arrivati ad avere reti cosi preformanti e sistemi
operativi così complessi come siamo abituati ad usare.
3.1
Reti
Il primo scenario dove incontriamo la necessita di gestire le code è nella gestione dei
protocolli di comunicazione di reti di calcolatori. Infatti proprio sugli algoritmi utili alle
comunicazioni telefoniche è nata la teoria delle code che si è andata via via
approfondendosi con l'avvento delle reti di calcolatori.
Con la trasmissione di dati in formato di pacchetto la prima necessità è stata quella di
suddividere in modo equo un unico canale di comunicazione evitando il più possibile la
perdita di dati e la congestione del canale.
Con congestione del canale si intende quando il traffico offerto dalla rete è vicino o
superiore alla capacità della rete stessa.
Proprio nella gestione della congestioni si individuano gli algoritmi più complessi e il
primo approccio per una gestione “Fair” della problematica.
La congestione può essere causata da più fattori. Se improvvisamente diversi flussi di
pacchetti cominciano ad arrivare attraverso tre o quattro linee di input e tutti i pacchetti
necessitano della stessa linea di output, inizia a formarsi una coda. Se la memoria non è
sufficiente, non sarà possibile conservare tutti i dati, perciò alcuni pacchetti andranno
persi. Aggiungere memoria può aiutare fino ad un certo punto, ma Nagle (1987) ha
scoperto che se i router hanno memoria infinita la congestione peggiora anziché
migliorare, poiché quando raggiungeranno il fronte della coda, i pacchetti saranno già
22
scaduti (ripetutamente) e quindi saranno già stati trasmessi dei duplicati.
Si conoscono molti algoritmi di controllo della congestione, e per organizzarli in modo
sensato, Yang and Reddy (1995) hanno sviluppato una tassonomia. I due studiosi hanno
diviso prima di tutto gli algoritmi in soluzioni a ciclo aperto e soluzioni a ciclo chiuso;
poi hanno diviso gli algoritmi a ciclo aperto in soluzioni che agiscono sulla sorgente e
soluzioni che lavorano sulla destinazione. Anche gli algoritmi a ciclo chiuso sono stati
divisi in due categorie: soluzioni a retroazione esplicita e soluzione a retroazione
implicita.
Con algoritmi a ciclo aperto si intende quegli algoritmi che cercano di prevenire il
verificarsi della congestione ricorrendo ad una buona progettazione della rete. Mentre
gli algoritmi a ciclo chiuso si basano sul concetto di controreazione; la rete viene
costantemente monitorata, al verificarsi di una congestione i router si scambiano
informazioni al fine di migliorare la situazione.
Le tecniche più utilizzate per il controllo della congestione sono:
•
Bit di allarme
Tramite un bit all'interno del pacchetto viene segnalato uno stato di congestione così da
poter diminuire il flusso di dati sino al ristabilirsi della condizione normale.
•
Chole packet
In questo caso la comunicazione di congestione viene data tramite l'invio di un
pacchetto “chole packet” che comunica alla sorgente lo stato di congestione ed eventuali
altri canali da sfruttare per effettuare l'invio di pacchetti.
•
Chole packet hop-by-hop
•
Load shedding
Con load shedding indichiamo l'azione di eliminazione intrapresa dai router inondati da
troppi pacchetti.
•
RED (Random Early Detection)
Si tratta di un algoritmo che permette ai router di scartare i pacchetti prima che tutto lo
23
spazio del buffer sia completamente esaurito, in pratica, facendo in modo che i router
scartino i pacchetti prima che la situazione diventi senza speranza è possibile bloccare il
problema sul nascere
Illustrazione 2: Random Early Detection
•
Jitter
Con jitter viene indicata la variazione nel tempo di arrivo del pacchetto, tramite il
controllo di questo valore è possibile effettuare controllo della congestione è diminuire
il flusso appena si osserva che i tempi di consegna stanno aumentando.
3.2
Sistemi Operativi
Il secondo scenario informatico in cui possiamo trovare la problematica della gestione
delle code è quello dei sistemi operativi. Infatti il sistema operativo ha come compito
principale quello di gestire in modo ottimale i processi in esecuzione sul calcolatore.
Tali processi vengono spesso eseguiti in modo concorrenziale richiedendo risorse come
CPU, memoria e dispositivi di input e output per essere portati a termine, proprio il
sistema operativo si occupa di tale gestione così da evitare lunghe attese dell'utente per
24
l'esecuzione del proprio processo e situazioni di stallo del sistema operativo e quindi del
calcolatore stesso.
In questo contesto andremo ad dare una breve analisi di come il sistema operativo
gestisce l'allocazione della risorsa più importante la CPU, chi in particolare si occupa di
tale gestione, che algoritmi usa e quali problematiche possono sorgere se tale risorsa
non fosse gestita correttamente.
3.2.1
Scheduler della CPU
Lo scheduling della CPU è alla base dei sistemi operativi multi programmati: attraverso
la commutazione del controllo della CPU tra i vari processi, il sistema operativo può
rendere più produttivo il calcolatore.
L’obbiettivo della multi programmazione è avere sempre processi in esecuzione al fine
di massimizzare l’utilizzo della CPU. In un sistema con una sola unità di elaborazione si
può eseguire al più un processo alla volta; gli altri processi, se presenti, devono
attendere che la CPU si liberi e possa essere nuovamente sottoposta a scheduling.
Ogni qualvolta la CPU passa nello stato d’inattività il sistema operativo sceglie per
l’esecuzione uno dei processi presenti nella coda dei processi pronti. In particolare è lo
scheduler a breve termine, o scheduler della CPU che, tra i processi nella memoria
pronti per l’esecuzione, sceglie quale assegnare alla CPU.
La coda dei processi pronti non è necessariamente una coda in ordine di arrivo (FIFO).
Come si nota analizzando i diversi algoritmi di scheduling, una coda dei processi pronti
si può realizzare come una coda FIFO, una coda con priorità, un albero o semplicemente
una lista concatenata non ordinata.
3.2.2
Scheduling con diritto di prelazione
Le decisioni riguardanti lo scheduling della CPU si possono prendere nelle seguenti
circostanze:
1. Un processo passa dallo stato di esecuzione allo stato di attesa
2. Un processo passa dallo stato di esecuzione allo stato pronto
25
3. Un processo passa dallo stato di attesa allo stato pronto
4. Un processo termina
Il primo e l’ultimo caso non prevedono alcuna scelta di scheduling; a essi segue la scelta
di un nuovo processo da eseguire, sempre che ce ne sia uno nella coda dei processi
pronti per l’esecuzione; in questo caso si dice che lo schema di scheduling è senza
diritto di prelazione (non preemptive). Una scelta si deve invece fare nei due casi
centrali; in tal caso parliamo di scheduling con diritto di prelazione (preemptive).
Nel caso dello scheduling senza diritto di prelazione, quando si assegna la CPU ad un
processo, questo rimane in possesso della CPU fino al momento del suo rilascio, dovuto
la termine dell’esecuzione o al passaggio nello stato di attesa. Questo metodo di
scheduling è impiegato nell’ambiente Microsoft Windows ed è l’unico che si può
utilizzare in certe architetture che non prevedono la presenza di un temporizzatore,
necessario per lo scheduling con diritto di prelazione.
La capacità di prelazione si ripercuote anche sulla progettazione del nucleo del sistema
operativo. Durante l'elaborazione di una chiamata del sistema, il nucleo può essere
impegnato in attività a favore di un processo; tali attività possono comportare la
necessità di modifiche a importanti dati del nucleo, come le code I/O. Se si ha la
prelazione del processo durante tali modifiche e il nucleo deve leggere e o modificare
gli stessi dati, si può avere il caos.
Alcuni sistemi operativi, tra cui la maggior parte delle versioni dello UNIX, affrontano
questo problema attendendo il completamento della chiamata del sistema o che si abbia
il blocco dell'I/O prima di eseguire un cambio di contesto (context switching).
Purtroppo questo modello d'esecuzione del nucleo non è adeguato alle computazioni in
tempo reale e alle multielaborazioni.
Per quel che riguarda lo UNIX, sono ancora presenti sezioni di codice a rischio. Poiché
le interruzioni si possono, per definizione, verificare in ogni istante e il nucleo non può
sempre ignorarle, le sezioni di codice eseguite per effetto delle interruzioni devono
essere protette da un uso simultaneo. Il sistema operativo deve ignorare raramente le
interruzioni, altrimenti si potrebbero perdere dati in ingresso, o si potrebbero
26
sovrascrivere dati in uscita.
Per gestire in modo efficiente sistemi con sempre più numerose unità di elaborazione, si
devono ridurre al minimo le modifiche allo stato del sistema delle interruzioni, e si deve
aumentare al massimo la selettività dei meccanismi di bloccaggio.
3.2.3
Criteri di scheduling
Diversi algoritmi di scheduling della CPU hanno proprietà differenti e possono favorire
una particolare classe di processi. Prima di scegliere l'algoritmo da usare in una
specifica situazione occorre considerare le caratteristiche dei diversi algoritmi.
Per il confronto tra gli algoritmi di scheduling della CPU son stati suggeriti molti criteri.
Le caratteristiche usate per il confronto possono incidere in modo rilevante sulla scelta
dell'algoritmo migliore. Di seguito riportiamo alcuni criteri:
•
Utilizzo della CPU. La CPU deve essere più attiva possibile. Teoricamente,
l'utilizzo della CPU può variare dallo 0 al 100 per cento. In un sistema reale può
variare dal 40 per cento, per un sistema con poco carico, al 90 per cento per un
sistema con utilizzo intenso.
•
Produttività. La CPU è attiva quando si svolge un lavoro. Una misura del lavoro
svolto è data dal numero dei processi completati nell'unità di tempo: tale misura
è detta produttività (throughput). Per processi di lunga durata questo rapporto
può essere di un processo all'ora, mentre per brevi transazioni è possibile avere
una produttività di 10 processi al secondo.
•
Tempo di completamento. Considerando un processo particolare, un criterio
importante può essere relativo al tempo necessario per eseguire il processo
stesso. L'intervallo che intercorre tra la sottomissione del processo e il
completamento dell'esecuzione è chiamato tempo di completamento (turnaround
time), ed è la somma dei tempi passati nell'attesa dell'ingresso in memoria, nella
coda dei processi pronti, durante l'esecuzione nella CPU e nel compiere
operazioni di I/O.
•
Tempo di attesa. L'algoritmo di scheduling della CPU non influisce sul tempo
27
impiegato per l'esecuzione di un processo o di un operazione di I/O; influisce
solo sul tempo di attesa nella coda dei processi pronti. Il tempo d'attesa è la
somma degli intervalli d'attesa passati nella coda dei processi pronti.
•
Tempo di risposta. In un sistema interattivo il tempo di completamento può non
essere il miglior criterio di valutazione: spesso accade che un processo emetta
dati abbastanza presto, e continui a calcolare i nuovi risultati mentre quelli
precedenti sono in fase d'emissione. Quindi, un'altra misura di confronto è data
dal tempo che intercorre tra la sottomissione di una richiesta e la prima risposta
prodotta. Questa misura è chiamata tempo di risposta, ed è data dal tempo
necessario per iniziare la risposta, ma non dal suo tempo di emissione.
Generalmente il tempo di completamento è limitato dalla velocità del dispositivo
d'emissione dati.
Utilizzo e produttività della CPU si devono aumentare al massimo, mentre il tempo di
completamento, il tempo d'attesa e il tempo di risposta si devono ridurre al minimo.
Nella maggior parte dei casi si ottimizzano i valori medi; in alcune circostanze è più
opportuno ottimizzare i valori minimi o massimi, anziché i valori medi; ad esempio, per
garantire che tutti gli utenti ottengano un buon servizio, può essere utile ridurre al
massimo tempo di risposta.
3.2.4
Algoritmi di scheduling
•
Scheduling in ordine d'arrivo
•
Scheduling per brevità
•
Scheduling per priorità
•
Scheduling circolare
•
Scheduling a code multiple
3.3
Job Manager
In questo paragrafo viene descritto lo scenario in cui andrà a definirsi l'attività di
28
tirocinio.
Con Job Manager o anche detti Batch System si intende tutti quegli applicativi che si
occupano della gestione dei processi sottoposti ad un calcolatore o ad un insieme di
calcolatori collegati tra loro, i così detti cluster.
In maniera molto semplificata un Job Manager può essere visto come il sistema di
gestione della CPU di un sistema operativo con la capacità di gestire molteplici risorse
sia del calcolatore su cui risiede il Job manager che di altri calcolatori che tramite rete
mettono a disposizione le loro risorse computazionali.
Le risorse gestite da un Job Manager posso essere di tipo hardware e software, infatti il
Job Manager di un sito di calcolo ha in gestione le CPU, la memoria RAM e i dischi
fissi presenti sui calcolatori; inoltre il Job Manager si occupa di gestire anche le risorse
software necessarie di volta in volta ai job a lui sottomessi, infatti possono essere
richieste librerie o sistemi operativi specifici per l'esecuzione di un determinato job.
I Job Manager per svolgere il loro compito di “organizzatori del sito” sfruttano
principalmente le code, in tali code vengono inseriti i vari job sottomessi al sito di
calcolo per poi essere eseguiti.
Le code possono essere organizzate e servite in moltissimi modi diversi, infatti tramite
diversi algoritmi, diverse policy e tramite l'uso di preemption e di QoS i job vengono
serviti con criteri ben precisi e definiti dall'amministratore del sito.
I Job Manager per prima cosa devono essere configurati in modo da poter conoscere le
risorse a disposizione del sito così da poterle distribuire hai vari processi in modo
ottimale.
I Job Manager per la gestione delle code si avvalgono di un altro applicativo in diretta
collaborazione con il Job Manager stesso i così detti Job Scheduler, è proprio sull'analisi
e configurazione ottimale di tali applicativi che si snoderà il percorso pratico dell'attività
di tirocinio. In particolare andremo ad analizzare principalmente due Job Scheduler:
Maui e Moab, secondariamente andremo ad analizzare le principali caratteristiche di un
terzo Job Scheduler: LSF.
29
3.3.1
Algoritmi di assegnazione dei nodi
Mentre la priorità dei job permette al sito di calcolo di determinare quale job eseguire, le
policy di allocazione dei nodi permettono al sito di specificare quale è lo stato delle
risorse disponibili e come può essere allocato a ciascun job.
L'algoritmo usato per l'assegnazione delle risorse è specificato nel file di
configurazione, più precisamente per quanto riguarda Maui e Moab nel parametro:
NODEALLOCATIONPOLICY
Da Maui e Moab vengono messi a disposizione più algoritmi che permettono di
eseguire la selezione delle risorse su canoni di valutazione diversi.
FIRSTAVAIABLE, LASTAVAIABLE, MACHINEPRIO, CPULOAD,
MINRESOURCE, CONTIGUOUS, MAXBALANCE, FASTEST and LOCAL
Altri tipi di algoritmi possono essere aggiunti attraverso estensioni di librerie.
Ora analizziamo come questa servizio offerto da Maui e Moab può essere al meglio
sfruttato, abbiamo osservato che una gestione dell'allocazione delle risorse diviene
fondamentale soprattutto in alcune situazioni:
•
nei sistemi eterogenei
•
nei sistemi a nodi condivisi
•
nei sistemi basati sulla prenotazione del nodo
•
nei sistemi senza una connessione “illimitata”
Descriviamo ora le caratteristiche principali dei vari algoritmi.
•
CPULOAD
I nodi vengono scelti sulla base del carico della CPU, o meglio, viene selezionato il
nodo maggiormente scarico. Tale algoritmo può essere applicato ai job che entrano in
esecuzione immediatamente, infatti, la valutazione del carico della CPU è una
30
valutazione istantanea, se volessimo gestire job con partenza ritardata l'algoritmo
consigliato e il MINRESOURCE.
•
FIRSTAVAIABLE
Questo algoritmo molto semplicemente assegna il primo nodo libero che è stato
elencato nel Resource Manager. Algoritmo molto veloce.
•
LASTAVAIABLE
Questo algoritmo è un algoritmo “best fit in time” infatti minimizza l'impatto della
prenotazione dei nodi.
•
MACHINEPRIO
Questo algoritmo permette di specificare la priorità di assegnazione dei nodi, è una
versione personalizzabile del MINRESOURCE.
•
MINRESOURCE
Questo algoritmo seleziona il nodo con le caratteristiche e le risorse il più possibile
simili a quelle richieste da job.
•
CONTIGUOUS
Questo algoritmo assegna i nodi in modo lineare uno dopo l'altro, era un algoritmo
richiesto dal Compaq RMS system.
•
MAXBALANCE
Questo algoritmo tenta di allocare il più “bilanciato” set di nodi al job, la maggior parte
dei casi la misura per effettuare la scelta è data dalla velocità. Ad esempio se sono
richieste due CPU l'algoritmo tenta di assegnare CPU con la stessa velocità.
•
FASTEST
Questo algoritmo seleziona il nodo che presenta la CPU più veloce.
•
LOCAL
Questo è l'algoritmo di default, non ha nessun criterio particolare.
31
4
Grid
Il termine Grid Computing (calcolo a griglia) sta ad indicare un paradigma del calcolo
distribuito,
di
recente
introduzione,
costituito
da
un'infrastruttura
altamente
decentralizzata e di natura variegata in grado di consentire ad un vasto numero di utenti
l'utilizzo di risorse (prevalentemente CPU e storage) provenienti da un numero
indistinto di calcolatori (di potenza spesso non particolarmente elevata) interconnessi da
una rete (Internet). Il termine “griglia” deriva dalla similitudine fatta dai primi ideatori
del Grid Computing secondo i quali in un prossimo futuro si sarebbe arrivati a poter
reperire risorse di calcolo con la stessa facilità con la quale oggi si può usufruire
dell'energia elettrica, ovvero semplicemente attaccandosi ad una delle tante prese
presenti nel nostro appartamento Power Grid.
Le prime definizioni di Grid Computing, di cui si sente spesso parlare come della
prossima rivoluzione dell'informatica, (come a suo tempo fu per il Word Wide Web),
risalgono di fatto a circa metà degli anni novanta.
Le griglie di calcolo vengono prevalentemente utilizzate per risolvere problemi
computazionali di larga scala in abito scientifico e ingegneristico (la cosiddetta eScience). Sviluppatesi originariamente in seno alla fisica delle alte energie, il loro
impiego è già da oggi esteso alla biologia, all'astronomia e in maniera minore anche ad
altri settori.
I maggiori player dell'ITC in ambito commerciale hanno già da tempo cominciato ad
interessarsi al fenomeno, collaborando ai principali progetti grid word-wide con
sponsorizzazioni o sviluppando propri progetti grid in vista di un utilizzo finalizzato al
mondo del commercio e dell'impresa.
32
Illustrazione 3: LHC Grid Project
L'idea del Grid Computing è scaturita dalla constatazione che in media l'utilizzo delle
risorse informatiche di un organizzazione è pari al 5% delle sue reali potenzialità. Le
risorse necessarie sarebbero messe a disposizione da varie entità in modo da creare
un'organizzazione virtuale (VO) con a disposizione un 'infrastruttura migliore di quella
che la singola entità potrebbe sostenere.
LHC@home è un progetto di calcolo distribuito partito il 1º settembre 2004 con lo
scopo di raccogliere dati per simulare l'attività del Large Hadron Collider, un progetto
del CERN di Ginevra in Svizzera per la costruzione di un acceleratore di particelle,
divenuto operativo nel settembre 2008.
4.1
Evoluzione del Grid Computing
Il progetto SETI@home, lanciato nel 1999 da Dan Werthimer, è un esempio molto noto
di un progetto, seppur semplice, di Grid Computing. SETI@home è stato seguito poi da
33
tanti altri progetti simili nel campo della matematica e della microbiologia.
Illustrazione 4: The Directory Information Tree (DIT)
A differenza di quella utilizzata da SETI@home, attualmente una grid viene concepita
prevedendo un livello middleware fra le risorse di calcolo, dette computing element
(CE) e memoria, dette storage element (SE) e gli utenti della griglia stessa.
Lo scopo principale del middleware è quello di effettuare il cosiddetto match-making,
ossia l'accoppiamento tra le risorse richieste e quelle disponibili in modo da garantire il
dispatching dei job nelle condizioni migliori avendo sempre visibilità dello stato
dell'intera grid.
Attualmente, la più importante grid europea è quella del CERN di Ginevra che ora si
chiama EGEE (gLite è il nome del middleware che viene utilizzato; precedentemente
LCG e prima ancora DataGrid), sviluppato da un team italo-ceco e prevalentemente
presso l'IFN, Istituto Nazionale di Fisica Nucleare.
L'organismo di riferimento per lo sviluppo di omogeneità e standard dei protocolli usati
dalle grid è GGF (Global Grid Forum), che ha creato gli standard OGSA (Open Grid
Services Architecture). Nel 2004 è stato emanato WSRF (Web Services Resource
34
Framework), che è un insieme di specifiche per aiutare i programmatori a scrivere
applicazioni capaci di accedere alle risorse di Grid.
Illustrazione 5: GridLab
4.2
Il Cluster Grid di Parma
Presso INFN di Parma sono attivi diversi gruppi di ricerca che si occupano di
simulazione numerica, particolarmente nei campi della Relatività Generale e della
Teoria di Gauge su Reticolo.
Riguardo la simulazione numerica della Relatività Generale, Parma fa parte di una
collaborazione nazionale che ha installato a Parma 2 cluster MPI:
•
Albert100, installato nel 2002, è composto da 44 Dual PIII a 1.13 GHz, con
interconnessioni in Fast Ethernet.
•
Albert2, installato nel 2004, è dotato di 16 Dual Opteron e Infiniband.
35
Le simulazioni su reticolo della QCD vengono svolte prevalentemente con strumenti di
calcolo dei progetti APE, con cui Parma collabora attivamente, anche con cluster di PC.
Attualmente vi sono 2 installazioni:
•
HAM, composto da 10 Dual Athlon a 2GHz con rete Myrinet.
•
Exalibur, dotato di un blade con 7 DualXeon.
Esiste inoltre una farm di Calcolo Dipartimentale, senza supporto MPI, con 4 nodi di
calcolo a 64 bit e 3 nodi a 32 bit, a disposizione di tutti gli utenti locali del sito.
Infine, dal 2004, è attivo un sito INFN-Grid con 4 dual Xeon 2.4GHz dedicato
prevalentemente per il calcolo Mpi e per lo storage di dati delle Virtual Organization di
Theophys e ILDG (International Lattice Data Grid).
Il Resource Manager utilizzato da tutti i cluster (che ne fanno uso) è OpenPBS o
Torque/Maui.
Illustrazione 6: Il cluster Grid di Parma
36
5
Job Sheduler
L'obbiettivo di uno scheduler nel senso più ampio è quello di rendere gli utenti e gli
amministratori felici. Gli utenti desiderano la possibilità di specificare le risorse,
svolgere rapidamente il loro job e ricevere affidabile allocazione delle risorse. Gli
amministratori desiderano utenti soddisfatti e gestione semplice e completa. Così da
comprendere al meglio sia il carico di lavoro alla quale il loro sistema è sottoposto che
le risorse a loro disposizione. Questo include stato del sistema, statistiche dettagliate e
informazione su cosa sta avvenendo all'interno del sistema.
Gli amministratori dei siti necessitano di un completo set di comandi e funzioni che
permettano la gestione del sistema, la gestione degli utenti e la regolazione delle
statistiche.
I job scheduler sono componenti fondamentali di sistemi più ampi, i Sistemi Batch
(Batch system), tali sistemi si occupano dei meccanismi per sottomettere, lanciare e
tracciare un job all'interno di un pool di risorse condivise. Il servizio di scheduling
provvede a fornire un accesso gestito e centralizzato di tali risorse.
I job-scheduler spesso sono integrati in un batch-system, il batch system è colui che si
occupa di eseguire il match-making tra le richieste e le risorse, i batch-system
maggiormente utilizzati sono principalmente 4:
•
LSF: (Load Sharing Facility), sviluppato da Platform, fa sia da batch-system che
da job-scheduler. E' il sistema attualmente in uso dal CNAF, è a pagamento.
•
SGE: (Sun Grid Engine), sistema sviluppato da Sun a pagamento.
•
TORQUE-MOAB: sviluppati dalla Cluster Resource inc., Moab è un scheduler a
pagamento.
•
TORQUE-MAUI: in questo caso il batch-system è Torque mentre il jobscheduler è Maui, sono entrambi open source. Vengono sviluppati dagli stessi
produttori di Moab.
La soluzione Torque-Maui è quella attualmente utilizzata dall'Università di Parma e sarà
37
il sistema di riferimento durante lo svolgimento di questa tesi.
Avendo la possibilità di usufruire di alcune licenze di LSF a basso costo tramite
particolari accordi con l'INFN durante il nostro lavoro ci preoccuperemo di paragonare
l'uso e le potenzialità di Maui con LSF.
5.1
Controllo del traffico
Lo scheduler deve prevenire che i vari job interferiscano tra di loro. Se più job
dovessero contendersi delle risorse l'un l'altro può verificarsi un calo delle performance
del cluster, allungare i tempi di esecuzione dei job o perfino portare al fallimento di
alcuni job. Quindi lo scheduler dovrà tenere traccia delle risorse utilizzate dai vari job
cosi da prevenirne l'uso concorrente.
5.2
Obbiettivo primario
Quando un cluster per il calcolo Grid viene creato, viene creato sempre per uno scopo
primario. Tale scopo porta a definire diverse regole su come il sistema potrà essere
utilizzato, chi o cosa potrà essere eseguito, per fare ciò lo scheduler dovrà implementare
una serie di policies che vincoleranno lo scheduler stesso durante l'assegnazione delle
risorse.
5.3
Ottimizzazione
Spesso le richieste sottomesse ad un sistema sono superiori alle sue possibilità. Uno
scheduler intelligente dovrà prevedere tale situazione e prendere decisioni corrette così
da permettere un completo svolgimento di tutti i job sottomessi e una rapida
assegnazione delle risorse che al termine di ogni singolo job andranno a liberarsi.
5.4
MAUI
Ora analizzeremo le principali funzionalità dei job-scheduler come queste funzionano e
come esse intervengono nella gestione delle code.
Tali funzionalità verranno analizzate nell'ambito del job-scheduler Maui, essendo quello
38
utilizzato durante il lavoro di tirocinio.
Tale scelta non è particolarmente limitante, infatti, abbiamo osservato che le tecniche di
gestione delle code sono comuni a tutti i job-scheduler, in alcuni casi sono molto simili
anche le tecniche di configurazione.
5.4.1
Filosofia e obbiettivi dello scheduler Maui
I gestori di un sistema rivolto al calcolo Grid desiderano il massimo ritorno degli
investimenti, spesso ciò significa un alto utilizzo del sistema e la possibilità di offrire
diversi servizi a vari utenti o gruppi di utenti. Hanno bisogno di capire come vengono
assegnate le risorse agli utenti che ne fanno richiesta e hanno bisogno di amministratori
capaci di soddisfare gli obbiettivi del sito.
Cosa avviene in uno scheduler può essere determinato solo tramite l'uso di misuratori
che devono essere stabiliti e condivisi. Successivamente tramite l'analisi delle statistiche
del sito tali misuratori potranno essere utilizzati al fine di stimare il buon o il cattivo
funzionamento del sito, la soddisfazione degli utenti e il carico complessivo o
temporaneo del sito.
Lo Scheduler Maui è stato sviluppato con un intensa collaborazione degli utenti,
amministratori e dei gestori. E' un tool studiato per gestire le risorse e fornire tutte le
informazioni dello stato attuale del sistema. Creato per soddisfare le necessità dei
sistemi batch e degli amministratori di tali sistemi impegnati costantemente nella ricerca
della configurazione ottimale per soddisfare le richieste degli utenti di gruppi e dei
gestori.
5.4.2
Scheduling Object
Maui funziona mediante l'uso di 5 oggetti primari: job, nodo, reservation, QoS structure
e policies.
•
Job, il job da Maui è visto semplicemente come un set di richieste di risorse,
indipendentemente da cosa il job dovrà fare, per Maui il job possiede alcuni
parametri dove vengono specificati il tipo e la quantità di risorse necessarie, tali
39
informazione vengono passate da Resource Manager.
•
Nodo, il nodo è un insieme di risorse con caratteristiche simili. Spesso il nodo è
semplicemente un PC ma sempre più frequentemente con l'avvento dei cluster
multiprocessore il nodo non è più visto come singolo PC ma come insieme di
tanti PC che forniscono risorse in modo condiviso. Le informazioni su nodi
vengono fornite dal Resource Manager.
•
Reservation, è un oggetto che serve per riservare un blocco di risorse specifiche
per un uso particolare o per un utente particolare in un determinato periodo di
tempo.
•
QoS Policies (Quality of Service Policies), vengono specificate nei file di
configurazione, e prevedono: job priority, fairness policies, fairshare
configuration e policy di scheduling.
•
QoS Structure (Quality of Service Structure), è un set di policies che permettono
a Maui di gestire varie classi, utenti e gruppi.
5.4.3
Risorse
In Maui le risorse sono classificate in base a 4 parametri principali e 2 parametri
secondari.
I parametri principali sono: processore, memoria, swap e disco, mentre i parametri
secondari sono: task e processor equivalent (PE).
I task sono una collection di risorse che devono essere utilizzate insieme, come un
singolo nodo.
Il concetto di processor equivalent (PE) è necessario per tradurre in modo efficace le
capacità di calcolo di un nodo multi risorsa. Attraverso una semplice formula Maui
utilizzando le richieste di un job inviato dal Resource Manager calcola le effettive
necessita del job e le risorse che possono essere destinate a tale job.
PE = MAX(ProcsRequestedByJob / TotalConfiguredProcs,
MemoryRequestedByJob / TotalConfiguredMemory,
DiskRequestedByJob / TotalConfiguredDisk,
40
SwapRequestedByJob / TotalConfiguredSwap) *
TotalConfiguredProcs
5.4.4
Class (or Queue)
In Maui le code vengono chiamate Class, sono dei contenitori logici che vengono
utilizzati per assegnare le policies ai vari job sottomessi al sistema. Spesso dei vincoli di
coda possono essere imposti dal Resource Manager così da indirizzare Maui nella
gestione del job. Vedremo successivamente come definire una coda in Maui, quali sono
i suoi utilizzi e possibilità.
Le classi vengono impostate nel file maui.cfg tramite il comando:
CLASSCFG[nomeclasse] ...parametri...
5.4.5
Partitions
Partizioni sono un costrutto logico utilizzato per suddividere le risorse a disposizione.
Un job può utilizzare per la sua esecuzione una o più partizioni (il default è una).
Tramite le partizioni lo scheduler può assegnare in modo efficiente le risorse rispettando
sia i vincoli di tempo di esecuzione che di priorità in base all'utente o al gruppo di utenti
che hanno lanciato il job.
La definizione delle partizioni viene data nel file di configurazione di Maui (maui.cfg)
tramite il comando:
NODECFG[nomenodo] PARTITION=nomepartizione
Con il comando NODECFG viene definito un nodo, come descritto sopra un nodo è un
insieme di caratteristiche simili, nell'ambiente GRID i nodi vengono detti WN (Worker
Node) e spesso sono vere e proprie macchine fisiche messe a disposizione del sito di
calcolo.
I nodi vengono definiti nel dettaglio nel Resource Manager, li sono definiti con il loro
nome e le loro caratteristiche (processore, memoria, disco …) nello scheduler vengono
semplicemente richiamati per poter essere assegnati a partizioni diverse.
41
5.4.6
Account
La credenziale account è spesso riferita ad un progetto o ad un gruppo di utenti che
devono lavorare su un progetto condiviso. Possiamo definire uno o più account
all'interno del file di configurazione tramite il parametro
ACCOUNTCFG[nomeaccount] ...
5.4.7
Priorità
Il concetto fondamentale che governa l'intero meccanismo di gestione delle code negli
scheduler per sistemi batch è il concetto di priorità.
Infatti il primo parametro con cui andremo a gestire le nostre code sarà il parametro
PRIORITY.
Maggiore sarà la priorità di un job e maggiore sarà la sua priorità nell'assegnamento
delle risorse da parte dei job scheduler.
Sulla priorità si basano anche tutti gli altri meccanismi di gestione di job degli
scheduler, sia di Moab che di Maui, tramite modifiche sulla priorità di un job viene
gestito il Fairshare anche la preemption come primo parametro di controllo usa il
parametro PRIORITY.
Il parametri PRIORITY può essere impostato in qualunque oggetto dello scheduler,
infatti la priorità di un job può essere data tramite la coda di assegnamento, l'account
con il quale viene eseguito oppure tramite la policy QoS che gli viene assegnata.
Ad esempio per assegnare ad una coda la priorità 1000:
CLASSCFG[nomecoda]
5.4.8
PRIORITY=1000
Preemption
Molti siti possiedono cicli di job di diversa importanza. Mentre per alcuni job è
importante che le risorse siano assegnate immediatamente per altri job è possibile
attendere maggiormente la disponibilità delle risorse e quindi la loro terminazione.
Questi job a bassa priorità una volta cominciata la loro esecuzione possono anche essere
sospesi, per liberare risorse necessarie all'esecuzione di job a maggiore priorità, per poi
42
essere ripresi successivamente.
La gestione di questo meccanismo in Maui viene svolta tramite l'uso di due flag che
definiscono due tipologie di QoS. Certe QoS possono essere marcate con il flag
PREEMPTOR mentre altri vengono marcate con PREEMPTEE.
Con questa configurazione i job a bassa priorità o preemptee job vengono lanciati solo
quando ci sono risorse libere, e tali job possono essere eseguiti fino a che non arriva un
job classificato preemptor, in quel momento il job preemptee viene sospeso allo stato di
esecuzione a cui era arrivato e le risorse da lui occupate vengono liberate per il job a
maggiore priorità.
Solo dopo il termine del preemptor job il job appena sospeso verrà ricaricato e rimesso
in esecuzione.
Con questo approccio di gestione delle risorse possiamo mantenere il nostro cluster
vicino al 100% di utilizzo delle risorse.
Il comando per definire un QoS preemptee or preemptor è:
QOS[nomeQoS] QFLAGS=PREEMPTEE
QOS[nomeQoS] QFLAGS=PREEMPTOR
Abbiamo quattro tipologie di gestione per un job che deve essere sospeso: suspend,
checkpoint, requeue, e cancel. La prima soluzione cerca di sospendere il job allo stato in
cui è arrivato per poi riprenderlo appena la risorsa richiesta viene a liberarsi, questa
soluzione è anche la soluzione che Maui adotta se non né vengono specificate altre. La
soluzione checkpoint utilizza la tecnologia di checkpointing per interrompere un job in
esecuzione, per sfruttare tale tecnologia sono necessarie alcune modifiche a livello di
kernel inoltre il codice del processo che verrà sospeso deve essere implementato
mediante la tecnologia di checkpointing.
La terza soluzione, quella probabilmente più utilizzata, interrompe il job in esecuzione e
lo rimette in coda, ovviamente cosi facendo viene perso lo stato in cui il job era giunto,
il job verrà rilanciato facendo ripartire la sua esecuzione dall'inizio. La quarta soluzione
adottata solo in casi estremi prevede l'eliminazione del job senza possibilità che esso
venga successivamente rieseguito.
43
Per impostare che tipologia di gestione lo scheduler deve utilizzare durante la
preemption dobbiamo impostare il parametro:
PREEMPTPOLICY
Resource
Manager
SUSPEND
Torque
PBSPro
LoadLeveler
LSF
Cancel
Yes
Yes
Yes
Yes
Requeue
Yes
Yes
Yes
Yes
Suspend
Yes
Yes
Yes
Yes
Checkpoint
Yes on IRIX
Yes on IRIX
Yes
Dipende da OS
Tabella 1: Resource Manager Preemption Constraints
In base alla policy scelta bisogna specificare alcuni flag, che andranno a caratterizzare i
job che verranno eseguiti, infatti in ogni classe andrà inserito il parametro
JOBFLAGS=RESTARTABLE
oppure se si è scelto di sospendere i job:
JOBFLAGS=SUSPENDABLE
se è stata impostata la policy “suspend” bisogna impostare anche il parametro
SUSPENDSIG=19
nel parametro RMCFG.
Per prima cosa vanno impostati alcuni parametri generali sulla gestione delle
preemption policies:
PREEMPTPOLICY può assumere due valori: REQUEUE o SUSPEND, tali valori
indicano come viene gestito il job che viene sospeso per lasciare spazio al preemptor
job, nel primo caso il job viene rimesso in coda insieme ad eventuali altri job e si dovrà
aspettare nuovamente il suo turno per l'esecuzione, nel secondo caso invece il job viene
solamente sospeso senza perdere la sua posizione nello scheduler cosi che al termine del
44
preemptor job il job sospeso venga immediatamente ripreso.
PREEMPTPOLICY REQUEUE
PREEMPTPOLICY SUSPEND
Ora impostati questi parametri generali possiamo procedere a definire le nostre QoS
Policies.
I comandi di preemption in Maui non sono flessibili come in altri sistemi, infatti
possiamo definire una coda o preemptor o preemptee e non entrambi e possiamo
definire una coda come preemptor e le altre come preemptee oppure una coda come
preemptee e le altre come preemptor.
Ora per impostare una coda come preemptee o preemptor andremo a generare duo o più
QoS Policies cosi da poterle poi assegnare ad ogni coda in modo generale.
Per creare una QoS Policy preemptee usiamo:
QOSCFG[nomeQoS] QFLAGS=PREEMPTEE
altrimenti per generare una QoS Policy preemptor usiamo:
QOSCFG[nomeQoS] QFLAGS=PREEMPTOR
Prima però di andare a gestire le QoS Policies dobbiamo attivare il parametro
QOSWEIGHT.
QOSWEIGHT 1
Ora una volta create le nostre policy possiamo assegnarla alle code (CLASS) usando
l'opzione QDEF nel parametro CLASSCFG
CLASSCFG[nomecoda] QDEF=nomeQoS
Il parametro QDEF assegna una o più QoS ad una coda, per assegnare ad una coda solo
ed esclusivamente una QoS dobbiamo usare il simbolo “&” al termine del nome della
QoS, nel nostro caso:
CLASSCFG[fast]
PRIORITY=1000 QLIST=hi& QDEF=hi&
Assegnamo la QoS “hi” come unica QoS.
45
Un altro flag che bisogna impostare nella nostra coda “preemptee” è il flag che specifica
che i job sottomessi a tali code possono essere o sospesi o riaccodati.
CLASSCFG[slow]
FLAGS=RESTARTABLE
Nel nostro caso abbiamo scelto di usarle la tecnica del riaccodamento quindi la coda
denominata “slow” ha il flag RESTARTABLE che indica che i job presenti in tale coda
potranno essere riaccodati in presenza di job “preemptor”.
La priorità della coda “preemptor” dovrà essere comunque posta molto maggiore delle
code “preemptee”, se i job con flag “preemptor” non avranno priorità maggiore dei job
“preemptee” non godranno della meccanismo di preemption.
Affinché la funzionalità di preemption funzioni correttamente dobbiamo impostare un
parametro anche in Torque; infatti alle code di Torque va comunicato che risorsa
utilizzare per mettere in esecuzione il job preemptor.
set queue <NOMECODA> resources_default.nodes=1:ppn=1
Cosi facendo comunichiamo alla coda che la risorsa di default da utilizzare è la 1 e la
CPU di default è la 1.
Ora possiamo testare la funzionalità della preemption infatti lanciando prima una job
sulla coda “preemptee” e poi un job sulla coda “preemptor” osserviamo che dapprima il
job preemptor viene messo in stato “idle” successivamente viene bloccato il job in
esecuzione che abbiamo lanciato per primo e il job “preemptor” viene messo in
esecuzione, il primo job che avevamo lanciato passa dallo stato “blocked” allo stato
“idle” pronto per essere eseguito appena vi saranno risorse disponibili.
Questa tecnologie la utilizzeremo durante lo sviluppo del progetto per risolvere la
problematica del job certificatore lanciato dalla comunità GRID per il test dei siti di
calcolo.
46
5.4.9
Fairness
Maui implementa la gestione del Fairness in diversi modi con diverse possibilità di
gestione e livelli di dettaglio.
In particolare in Maui il Fairness viene gestito tramite la combinazione dei parametri
indicati nella tabella sottostante:
Facility
Description
Example
Throttling
Policies
Imposta i limiti di
utilizzo di ogni risorsa
disponibile.
USERCFG[john] MAXJOB=3
GROUPCFG[DEFAULT] MAXPROC=64
GROUPCFG[STAFF] MAXPROC=128
(permette a John di eseguire solo 3 job alla
volta, permette al gruppo staff di utilizzare
non più di 128 CPU e a tutti gli altri gruppi
di utilizzare non più di 64 CPU)
Job
Prioritization
Specifica che parametro
è il più importante al
livello di policy per lo
scheduler.
SERVWEIGHT 1
QUEUETIMEWEIGHT 10
(provoca l'incremento di priorità dei job di
10 punti ogni minuto che passano in coda)
Fairshare
Specifica l'obbiettivo di
uso per limitare l'accesso
alle risorse, basato sullo
storico dell'uso di risorse.
USERCFG[steve] FSTARGET=25.0+
FSWEIGHT 1
FSUSERWEIGHT 10
(abilita il fairshare basato sulla priorità e
specifica un obbiettivo di fairshare per
l'utente steve, i job di steve verranno
favoriti all'esecuzione in modo da
mantenere al 25% il totale di uso
dell'utente steve)
Allocation
Management
Specifica credenziali a
BANKTYPE QBANK
lungo termine, e limiti di BANKSERVER server.sys.net
uso a lungo termine.
(abilita il sistema di allocazione Qbank,
permette di assegnare una maggiore
attenzione alla priorità dei job lanciati dal
sito server.sys.net)
5.4.10
Fairshare
E' il Fairshare lo strumento più innovativo e potente di Maui, infatti tramite il Fairshare
47
possiamo ottenere un perfetto bilanciamento del carico di lavoro del nostro sito,
mantenendo, come dice la parola stessa, una gestione giusta del sito.
Tramite il Fairshare possiamo applicare policy di gestione a tutte le nostre entità
presenti nella configurazione del sito di calcolo. Possiamo applicare Fairshare in modo
indipendente ad utenti, gruppi, code, account e a livello di QoS.
Il Fairshare in Maui è configurato in due livelli. Il primo, livello di sistema, riguarda
tutte quelle configurazioni che indicano come lo scheduler deve raccogliere e processare
tutte le informazioni di uso del nodo di calcolo. Il secondo livello si occupa di
configurare come le informazioni raccolte in base alle configurazioni del sito andranno
ad influenzare direttamente i job sottomessi.
I parametri a livello di sistema sono i seguenti:
•
FSINTERVAL, indica la durata delle finestre di Fairshare.
•
FSDEPTH, indica quante finestre dovranno essere conteggiate durante l'utilizzo
di Fairshare.
•
FSDECAY, specifica il fattore di decadimento per ogni finestra.
•
FSPOLICY, indica la metrica utilizzata durante l'utilizzo di Fairshare.
48
Abbiamo diverse metodologie con la quale possiamo tenere traccia dell'utilizzo delle
risorse, tale metodologia viene impostata dall'amministratore del sito tramite il
parametro FSPOLICY
Metrica
Descrizione
DEDICATEDPES
Viene memorizzato il tempo di utilizzo del
valore “processore equivalente” per ogni
job.
DEDICATEDPS
Viene memorizzato il tempo di utilizzo del
processore per ogni job.
PDEDICATEDPS
Viene memorizzato il tempo di utilizzo del
processore in funzione della velocità della
CPU del nodo per ogni job.
SDEDICATEDPES
Viene memorizzato il tempo di utilizzo del
valore “processore equivalente” in
funzione della velocità del nodo per ogni
job.
UTILIZEDPS
Viene semplicemente memorizzati e
secondi di uso del processore per ogni job.
Con il sistema di Fairshare il tempo viene suddiviso in un numero distinto di finestre
dette “fairshare windows”, la durata di tali finestre temporali viene specificata tramite il
parametro FSINTERVAL mentre tramite il parametro FSDEPTH viene stabilito quante
finestre nel tempo l'algoritmo di fairshare deve considerare, quindi il tempo di
valutazione del fairshare è dato dal valore FSINTERVAL*FSDEPTH.
Molti siti vogliono limitare l'impatto del fairshare in base al tempo di utilizzo. Il
parametro FSDECAY permette di assegnare maggiore importanza ai dati più recenti e
minore rilevanza ai fini de fairshare ai dati più obsoleti.
Il parametro è specificato con un valore compreso tra 0 e 1, di default è 1, cioè non c'è
decadimento nel tempo.
Riportiamo una tabella che permette di comprendere meglio il significato del parametro.
49
Decay Window Window Window Window Window Window Window Window
Factor
0
1
2
3
4
5
6
7
1,00
100%
100%
100%
100%
100%
100%
100%
100%
0,80
100%
80%
64%
51%
41%
33%
26%
21%
0,75
100%
75%
56%
42%
31%
23%
17%
12%
0,50
100%
50%
25%
13%
6%
3%
2%
1%
Quando Maui deve determinare l'uso fairshare di una particolare credenziale calcola il
peso del decadimento medio delle informazioni di uso del sito di calcolo per tale
credenziale utilizzando l'intervallo fairshare più recente, utilizzando il parametro
FSDEPTH per controllare il numero di finestre da valutare.
Per esempio, vogliamo conoscere la posizione dell'utente John avendo settato i
parametri di fairshare in modo seguente:
FSINTERVAL
FSDEPTH
FSDECAY
12:00:00
4
0.5
e assumendo che gli intervalli di fairshare hanno il seguente valori di utilizzo per
l'utente:
Fairshare Interval
Total User John Usage
Total Cluster Usage
0
60
110
1
0
125
2
10
100
3
50
150
Basandosi su queste informazioni, il valore corrente di uso fairshare per l'utente John
viene calcolato nel modo seguente:
USAGE = (60 + 0.5^1 * 0 + 0.5^2 * 10 + 0.5^3 *50) / (110 +0.5^1 * 125 + 0.5^2 * 100
+ 0.5^3 * 150)
50
5.4.10.1
Obbiettivi del fairshare
Una volta configurate tutti i parametri delle policy di fairshare, bisogna impostare come
le le informazioni di fairshare andranno a modificare il comportamento dello scheduler.
Questo viene fatto tramite le specifiche degli obbiettivi di fairshare.
Gli obbiettivi di fairshare possono essere applicati a utenti, gruppi, account, QoS o code
utilizzando il parametro FSTARGET. Questo parametro permette alle informazioni di
fairshare di avere effetto sulle priorità dei job, il parametro può avere tre tipi di
impostazione che differiscono per il comportamento dello scheduler durante
l'applicazione delle policy di fairshare.
Tipo di
Valore
Impatto
obbiettivo parametro sul job
Formato
Descrizione
Meno
-
Priorità
Uso percentuale Aggiusta la priorità del job
abbassandola quando l'uso
supera l'obbiettivo di fairshare
Più
+
Priorità
Uso percentuale Aggiusta la priorità del job
alzandola quando l'obbiettivo di
uso scende
Priorità
Uso percentuale Aggiusta la priorità del job
quando l'uso non ha l'obbiettivo
di fairshare
Obbiettivo
Ad esempio vogliamo che lo scheduler incrementi le priorità dei job di John sino a che
non viene raggiunto il 16.5 % dell'uso totale del cluster. Mentre le priorità di tutti gli
altri job vengono alzate o abbassate per portare il valore di uso del cluster al 10 % per
ogni job.
FSWEIGHT
FSUSERWEIGHT
1
100
USERCFG[john]
FSTARGET=16.5+
USERCFG[DEFAULT] FSTARGET=10
Esiste anche un parametro che va a imporsi sulle richieste di aumento della priorità dei
job dovute al fairshare. Il parametro FSCAP può essere applicato a utenti, gruppi,
account, code e QoS e viene impostato con un valore relativo o assoluto e permette allo
51
scheduler di bloccare un job se tale job a raggiunto la percentuale di uso del cluster
impostata con tale parametro. Una volta che tale percentuale tornerà a scendere il job
verrà reinserito in coda per essere eseguito.
Tipo di limite Parametro
Impatto
sul job
Formato
Descrizione
Limite assoluti
^
Esecuzione Uso
assoluto
Costringe il job ad attendere
per la sua esecuzione
Limite relativo
%
Esecuzione Uso
Costringe il job nella sua
percentuale esecuzione
Il seguente esempio costringe l'account “Marketing” ad un uso non superiore di 16.500
secondi di processore durante un periodo di una settimana, allo stesso tempo tutti gli
altri account sono costretti ad un uso non superiore al 10 %.
FSPOLICY
FSINTERVAL
FSDEPTH
DEDICATEDPS
12:00:00
14
ACCOUNTCFG[marketing] FSCAP=16500
ACCOUNTCFG[DEFAULT]
FSCAP=10%
Osserviamo come la finestra di valutazione di una settimana è data dal parametro
FSINTERVAL = 12 ore e il parametro FSDEPTH impostato a 14.
Per far si che le politiche di fairshare vengano utilizzate dobbiamo impostare il “peso”
che il fairshare assumerà durante i calcoli di priorità dei job, per fare questo dobbiamo
impostare il parametro FSWEIGHT.
Esistono politiche di gestione del fairshare anche più complesse, ma tali politiche
possono essere sfruttate solo utilizzando il job scheduler a pagamento Moab.
5.4.11
Reservation
La reservation è un meccanismo con il quale Maui garantisce la disponibilità di risorse
o set di risorse in un particolare momento.
Ogni reservation è formata da tre componenti principali: la lista delle risorse da
52
riservare, lo spazio temporale e la access control list (ACL). Esiste anche una Advanced
Reservation che abilità la gestione della reservation tramite la tecnologia di backfill,
dealine, QoS e meta scheduling.
La lista delle risorse per una reservation in Maui è specificata utilizzando un unico
oggetto “task” che descrive le risorse necessarie per la reservation. Ogni reservation può
contenere uno o più task che specificano le risorse necessarie.
Riportiamo un esempio per chiarire:
La reservation A necessita di 4 task. Ogni task è definito da 1 processore e 1GB di
memoria.
Abbiamo 3 nodi:
Node X ha 2 processori e 3 GB di memoria
Nodo Y ha 2 processori e 1 GB di memoria
Nodo Z ha 2 processori e 2 GB di memoria
Nel tentativo di raccogliere le risorse necessarie per la reservation Maui esamina ogni
nodo a turno. Maui trova che il Nodo X supporta 2 dei 4 task necessari riservando 2
processori e 2 GB di memoria, lasciando 1 GB di memoria non riservata.
Analizzando il Nodo Y osserva che può supportare solamente 1 task dei 4 necessari
riservando 1 processore e 1 GB di memoria, lasciando 1 processore inutilizzato.
Purtroppo non possiamo combinare la memoria rimasta libera del Nodo X con il
processore libero del Nodo Y, infatti per soddisfare le richieste di un “task” Maui
necessità che le risorse siano situate in un nodo solo.
Alla fine Maui analizza il Nodo Z che può supportare 2 task terminando la reservation
di tutte le risorse necessarie.
Attualmente le risorse che possono essere assegnate ad una reservation sono: processori,
memoria, swap, disco locale, periferiche, licenze software e tape drives.
Associata ad ogni reservation c'è il timeframe. Il timeframe specifica quando le risorse
dovranno essere riservate o dedicate al job che utilizzano la reservation. Il timeframe
53
consiste semplicemente in una data e ora di inizio e una data e ora di fine, oppure una
durata.
Le access control list sono utilizzate dalla reservation per specificare quali jobs hanno
diritto ad utilizzare la reservation. Solamente i job che vengono abilitati dai criteri della
ACL possono utilizzare le risorse riservate.
Attualmente le reservation access control list possono includer: utenti, gruppi, account,
classes, QoS, e anche la durata del job.
Ovvero possiamo creare reservation che possono essere assegnate hai job in base alla
loro durata prevista.
Mentre una reservation ACL permette ad un particolare job di utilizzare delle risorse
riservate, la reservation non impone ad un job di utilizzare tali risorse. Per ogni job
Maui tenta di assegnare la migliore combinazione di risorse possibile scegliendo tra
risorse riservate e non riservate.
Ad esempio
Illustrazione 7: Reservation
54
Nella figura 7 osserviamo che il job X rispetta i criteri di ACL di entrambe le
reservation A e B, Maui assegna le risorse per il job scegliendo sia dalle risorse riservate
che dalle risorse non riservate (in grigio).
Maui può comunque essere configurato in modo da obbligare i jobs a utilizzare solo le
risorse riservate, ovviamente se il job ne ha la possibilità.
Ci sono due tipologie di reservation con la quale i siti di calcolo possono lavorare.
Il primo, la reservation amministrativa, e tipicamente usata per creare reservation una
volta sola per soddisfare necessità di progetti o richieste speciali. Questo tipo di
reservation viene creata tramite il comando SETRES, questo tipo di reservation può
essere molto comoda se si presenta la necessita di riservare risorse in tempi brevi e per
situazioni temporanee.
Da notare che questo comando può sfruttare la tecnica delle espressioni regolari.
setres -g staff -d 8:00:00 'node[1-4]'
Il secondo tipo di reservation è la reservation permanente, viene utilizzata quando si
presenta la necessita di prenotare risorse in modo ricorrente e continuativo. Tale
reservation viene configurata all'interno del file di configurazione di Maui (maui.cfg).
Per esempio, la seguente configurazione crea una reservation permanente di 6
processori e 3 GB di memoria che possono essere utilizzati dalla coda “interactive”
durante le ore di lavoro.
SRNAME[0] interactive
SRTASKCOUNT[0] 6
SRRESOURCES[0] PROCS=1;MEM=512
SRPERIOD[0] DAY
SRDAYS[0] MON TUE WED THU FRI
SRSTARTTIME[0] 9:00:00
SRENDTIME[0] 17:00:00
SRCLASSLIST[0] interactive
Dalla versione 3.2 di Maui possiamo configurare le reservation utilizzando il parametro
SRCFG ad esempio:
SRCFG[interactive] STARTTIME=9:00:00
55
ENDTIME=17:00:00
SRCFG[interactive] PERIOD=DAY
DAYS=MON,TUE,WED,THU,FRI
SRCFG[interactive] TASKCOUNT=6
RESOURCES=PROCS:1;MEM:512
SRCFG[interactive] CLASSLIST=interactive
RESERVATIONPOLICY indica se un job che aveva conquistato una certa priorità in
una coda e quindi aveva riservato per se delle risorse può o non può essere scavalcato da
un job giunto successivamente ma con priorità maggiore.
Infatti pensiamo ad un job in esecuzione che deve essere sospeso a causa dell'arrivo di
un preemptor job, il job sospeso tiene riservate per se delle risorse che tra l'altro stava
già utilizzando, mentre il job è sospeso viene sottomesso un job a maggiore priorità che
potrebbe scavalcare il job sospeso facendo perdere al job la prenotazione delle risorse.
Tale parametro specifica il comportamento dello scheduler in queste occasioni, le
opzioni possibili sono tre: CURRENTHIGHEST, HIGHEST, NEVER.
La prima opzione se impostata indica che solamente il job con un apposito parametro di
prenotazione (RESERVATIONDEPTH) più alto del job sospeso può passare avanti, la
seconda opzione indica che il job che a preso la prenotazione la potrà mantenere anche
se altri job con priorità maggiore sono stati sottomessi al sistema, l'ultima opzione
indica che non viene utilizzata la gestione delle prenotazioni.
RESERVATIONPOLICY CURRENTHIGHEST
RESERVATIONPOLICY HIGHEST
RESERVATIONPOLICY NEVER
5.4.12
Backfill
La backfill è una ottimizzazione dello scheduling che permette allo scheduler di ottenere
un impiego delle risorse migliore eseguendo i job a lui sottomessi non in ordine di
sottomissione. Infatti quando Maui ha assegnato la priorità ai job nella loro coda di
destinazione, in base ai fattori che influenzano la priorità di un job, Maui ordina i job in
funzione della priorità a loro assegnata. Dopo di che Maui cerca di eseguire il primo job
della lista, quello con la priorità maggiore. Siccome tutti i job e tutte le reservation
56
possiedono un tempo di partenza e un limite per essere eseguito, Maui può determinare i
tempi di completamento di tutti i job in coda. Di conseguenza Maui può determinare
quali risorse saranno disponibili prima per il job a maggiore priorità.
La backfill sfrutta proprio questa informazione, siccome Maui conosce le risorse
necessarie al job con maggiore priorità e conosce il tempo necessario perché le risorse
per tale job vengano liberate, Maui può determinare quali job possono essere eseguiti
senza influenzare i tempi di esecuzione del job in testa alla coda.
Abilitando la backfill lo scheduler può eseguire job a minore priorità senza che tali
esecuzioni influenzino la priorità del job in testa. Maui utilizzando la reservation
prenota le risorse necessarie per il job a maggiore priorità di volta in volta che esse
vengono liberate, così facendo tali risorse non potranno essere occupate al momento
dell'esecuzione del job.
E' stato osservato che l'utilizzo della backfill incrementa del 20 % le prestazioni di un
sito di calcolo di grandi dimensioni. Infatti molto spesso il 90 % dei job di breve durata
godono della tecnica del backfill.
Ci sono pero alcuni “lati negativi” nell'uso della backfill, il primo si osserva quando
l'uso della backfill comporta una diminuzione dell'influenza della priorità dei job
impostata dagli amministratori del sito di calcolo.
Maui utilizza tre algoritmi per la gestione della backfill:
•
FIRSFIT
•
BESTFIT
•
GREEDY
57
Illustrazione 8: Backfill
La backfill viene abilitata specificando in Maui il parametro BACKFILLPOLICY, di
default la backfill è abilitata utilizzando l'algoritmo FIRSFIT. Comunque il parametro
può essere settato nel maui.cfg scegliendo tra uno degli algoritmi oppure impostandolo
a NONE cosi da disabilitarla.
Il numero di reservation che il meccanismo di backfill può utilizzare può essere
comunque impostato utilizzando il parametro RESERVATIONDEPTH.
5.4.13
Checkpointing
In Maui possiamo utilizzare la tecnologia di checkpointing durante la preemption,
infatti Maui appoggiandosi ad una libreria esterna gratuita, può utilizzare il
checkpointing per sospendere un processo in esecuzione con flag preemptee per
eseguirne un altro con flag preemptor, per poi riprenderlo dal punto esatto in cui l'aveva
interrotto.
Questa modalità di preemtion evita che un job debba ricominciare dall'inizio la sua
computazione nel momento in cui viene sospeso a favore di un job “preemptor”.
58
La libreria utilizzata è la Berkeley Lab Checkpoint/Restart (BLCR) , questa libreria che
deve essere installata prima dell'installazione del batch system implementa la tecnologia
di checkpointing kernel-mode.
Quindi la tecnologia di checkpointing nei sistemi batch può essere utilizzata non
soltanto per implementare fault tolerance ma anche come tecnica, molto efficiente, di
preemption.
Per impostare il checkpointing andiamo ad editare il parametro PREEMPTIONPOLICY
PREEMPTPOLICY CHECKPOINT
5.5
MOAB
Sempre sviluppato dalla Cluster Resource inc. lo scheduler Moab è un software a
pagamento che si appoggia al Batch System Torque per il suo funzionamento.
A differenza di Maui, Moab presenta maggiori possibilità di configurazione e gestione,
infatti presenta sia una gestione grafica attraverso un tool specifico che una gestione
remota tramite web server.
Ovviamente le principali caratteristiche di installazione e configurazione sono uguali a
quelle di Maui.
Moab permette di gestire il Fairshare su nodi multi-cluster, per fare ciò, è necessario
l'utilizzo di un identity manager, che si occupi di sincronizzare tutte le credenziali
presenti nel cluster.
Dopo alcuni test abbiamo osservato come Moab non si differenzi molto da Maui se non
in senso di possibilità e semplicità di gestione, gestione che potrebbe divenire piuttosto
complessa in siti di calcolo distribuito di grosse dimensione, dove gli utenti, le risorse e
le code di job da gestire potrebbero crescere notevolmente.
5.6
LSF
In diretta concorrenza con Moab si trova LSF (Load Sharing Facility), sempre a
pagamento presenta sia un Job Manager che un Job Scheduler.
59
Abbiamo testato anche LSF perché è attualmente il sistema utilizzato dal CNAF,
abbiamo riscontrato che una gestione meno complessa di Moab in quanto LSF offre una
gestione del sito di calcolo meno ampia e diversificata ma non per questo meno
funzionale.
Purtroppo è stato abbastanza complessa la gestione della licenza, essendo una licenza
condivisa posta su un server remoto, ed essendo un licenza basata sul numero di core
del sito di calcolo e non più sul numero di processori si è osservato come la scelta di
LSF come batch system potrebbe essere una scelta troppo onerosa.
5.7
Job Multiprocesso
Dopo aver analizzato tutte le tecniche di gestione delle code che vari job scheduler
possono offrire vorremmo fare un breve excursus su come l'introduzione dei job
multiprocesso sono andati ad inserirsi e ad influenzare la gestione di code di job.
Infatti se con i job sequenziali tutte le tecniche analizzate possono sembrare semplici e
facilmente realizzabili con i job multiprocesso le cose si complicano; basti pensare a
come può essere gestita la preemption se il job “preemptor” che deve essere eseguito è
un job multiprocesso che quindi ha bisogno di risorse multiple, oppure come la gestione
della starvation diventa molto più complessa quando ad esempio un job in coda richiede
10 CPU per essere eseguito, mentre le CPU continuano ad essere riassegnate a job che
richiedono una CPU per la loro esecuzione.
Di fondamentale importanza diventa la tecnica di backfill con reservation infatti tramite
la tecnica di reservation lo scheduler può programmare l'esecuzione di un job
multiprocesso senza paralizzare il sito di calcolo perché non vi sono risorse disponibili,
utilizzando la backfill per procedere con esecuzioni di job più “leggeri” in attesa che
tutte le risorse per il job multiprocesso vengano al liberarsi.
Oppure la gestione del checkpointing, che in presenza di job multiprocesso diventa
molto più pericolosa, proprio per questo la libreria BLCR collabora indipendentemente
dallo scheduler con la libreria MPI.
60
6
Sviluppo del progetto
In questo capitolo andremo a descrivere tutto il lavoro svolto durante l'attività di
tirocinio. Verranno descritti gli scenari di lavoro in dettaglio e tutte le operazioni,
scendendo nei dettagli del codice eseguito, necessario per rendere il sito INFN di Parma
funzionante, performante e per risolvere le problematiche del sito riscontrate durante i
precedenti utilizzi da parte degli utenti. Particolare attenzione è stata posta alle tecniche
di scheduling e gestione delle policy, ma dopo poco tempo si è resa necessaria una più
attenta analisi dei sistemi batch che erano già preinstallati sui calcolatori, così da poter
comprendere al meglio le loro capacità di utilizzo.
Inizialmente il lavoro è stato svolto sul cluster, già funzionante da tempo, dell'INFN di
Parma, su tale cluster vi è installato Torque come Job Manager e Maui come Job
Scheduler, su tale cluster si è svolta una prima analisi del lavoro da compiere
osservando il funzionamento del sito di calcolo e raccogliendo dati su tutte le
problematiche presenti e sulle eventuali migliorie da poter apportare.
Dopo di che si è passati ad una fase di test vera e propria che, non potendosi svolgere
sulle macchine del cluster INFN causa il suo utilizzo da parte dei gruppi di sviluppo e
ricerca delle varie facoltà e dagli utenti di Grid, si è svolta su un piccolo cluster creato
ad-hoc, così da poter gestire il cluster in modo del tutto autonomo e svincolato.
Tale cluster è composto da 4 calcolatori sui quali è stata installata una Scientific Linux
4.6. Il cluster prende il nome di SDLAB.
6.1
TORQUE
6.1.1
Installazione di TORQUE
Andiamo ad installare Torque su una macchina virtuale con Scientific Linux
(Utente: root)
Scarichiamo Torque
61
cd opt
mkdir torque
cd torque
wget
http://www.clusterresources.com/download/torque/torque2.3.5.tar.gz
Installiamo Torque
Deve essere preinstallato gcc
tar -xzvf torque.tar.gz
cd torque
./configure
make
make install
Configuriamo pbs_server (Torque)
Viene configurato Torque con una coda chiamata “batch”
./torque_setup root
Proviamo Torque
# shutdown server
> qterm
# start server
> pbs_server
# verify all queues are properly configured
> qstat -q
# view additional server configuration
> qmgr -c 'p s'
# verify all nodes are correctly reporting
> pbsnodes -a
# submit a basic job
> echo "sleep 30" | qsub
# verify jobs display
62
> qstat
Con il comando pbs_server avviamo il Resouce Manager. Prima di fare ciò è opportuno
configurare i nodi, in questo caso andremo a configurare la macchina stessa sia come
Resource Manager che come nodo di calcolo.
6.1.2
Creazione dei pacchetti RPM
Per aver una gestione dell'installazione di Torque migliore abbiamo la possibilità di
creare i pacchetti RPM, tramite il comando:
make rpm
Torque andrà a creare tutti i pacchetti necessari per l'installazione server e client di
Torque, i pacchetti verranno depositati in /usr/scr/redhat/RPMS/i386, ovviamente questa
cartella varierà a seconda della distribuzione linux in uso.
Tramite il comando rpm andremo ad effettuare l'installazione:
rpm
rpm
rpm
rpm
-ivh
-ivh
-ivh
-ivh
torque-2.3.6-1cri.rpm
torque-server-2.3.6-1cri
torque-devel-2.3.6-1cri
torque-client-2.3.6-1cri
Questi 4 pacchetti sono necessari per l'installazione del server Torque, mentre:
rpm -ivh torque-2.3.6-1cri
rpm -ivh torque-mom-2.3.6-1cri
Sono i pacchetti necessari ai nodi di calcolo.
Installando Torque tramite i pacchetti RPM abbiamo la comodità di avere già
configurato i servizi di Torque in modalità esecuzione automatica all'avvio del sistema.
6.1.3
Il file “server_name”
Il principale file di configurazione di Torque viene creato durante l'installazione ed è
situato in /var/spool/torque ed è “server_name”, dentro tale file viene scritto il nome del
63
server sulla quale è in esecuzione Torque, su questo file si baseranno anche le
configurazione dei nodi di calcolo.
6.1.4
Il file "nodes"
File da creare solo nel Resource Manager in /var/spool/torque/server_priv/
localhost np=2
Con localhost indichiamo che la macchina è anche nodo di calcolo, con np indichiamo il
numero di processori della macchina.
6.1.5
Installare Torque in un nodo
Possiamo creare i pacchetti per la distribuzione di Torque
cd /opt/torque/torque/2.3.5
make packages
Ogni nodo necessità dei pacchetti: torque-package-clients-linux-i686.tar.gz torquepackage-mom-linux-i686.tar.gz
6.1.6
Il file "config"
Tale file va creato e configurato su tutti i nodi di calcolo che andremo ad utilizzare nel
nostro cluster. Il file va creato in /var/spool/torque/mom_priv
$pbsserver
$logevent
localhost
255
Ora siamo pronti per rilanciare pbs_server e su ogni nodo lanciamo pbs_mom.
Attenzione, terminata tale procedura i job non verranno eseguiti per mancanza dello
scheduler.
Torque installa uno scheduler di default che si può avviare tramite il comando
64
pbs_sched,
previa
la
sua
configurazione
tramite
il
file:
/var/spool/torque/sched_priv/sched_config. Tale scheduler è molto semplice sia nel suo
utilizzo che nelle sue capacità di gestione.
6.1.7
Creazione delle code
Con il comando “qmgr” andiamo a settare i parametri di Torque, infatti in Torque
dobbiamo per prima cosa andare a creare e impostare le code che ci serviranno nel
nostro sito di calcolo.
Dentro la cartella di installazione di Torque è presente un file “torque_setup” che
permette di creare una coda di default chiamata “batch” per cominciare ad usare Torque.
Altrimenti possiamo creare le code a nostro piacimento utilizzando il comando qmgr.
Nel nostro caso abbiamo creato una coda “cert” e altre due code per utilizzo comune
dette “slow” e “fast”.
qmgr -c "create queue cert"
qmgr -c "set queue local queue_type = Execution"
qmgr -c "set queue local enabled = True"
qmgr -c "set queue local started = True"
qmgr -c "set queue local resources_max.cput = 00:40:00"
qmgr -c "set queue local resources_max.walltime =
01:10:00"
qmgr -c "set queue local max_queuable = 10"
qmgr -c "create queue slow"
qmgr -c "set queue local queue_type = Execution"
qmgr -c "set queue local max_running = 10"
qmgr -c "set queue local enabled = True"
qmgr -c "set queue local started = True"
qmgr -c "set queue local resources_max.cput = 00:40:00"
qmgr -c "set queue local resources_max.walltime =
01:10:00"
qmgr -c "set queue local max_queuable = 10"
qmgr
qmgr
qmgr
qmgr
qmgr
-c
-c
-c
-c
-c
"create queue fast"
"set queue local queue_type = Execution"
"set queue local max_running = 10"
"set queue local enabled = True"
"set queue local started = True"
65
qmgr -c "set queue local resources_max.cput = 00:40:00"
qmgr -c "set queue local resources_max.walltime =
01:10:00"
qmgr -c "set queue local max_queuable = 10"
Con il parametro max_running andiamo ad impostare il limite massimo di job che
possono esser eseguiti sulla coda, con il parametro resources_max.cput andiamo ad
impostare il tempo massimo di utilizzo della cpu di un job inserito nella coda, con il
parametro resources_max.walltime impostiamo il tempo massimo di accodamento di un
job e con il parametro max_queuable settiamo quanto lunga può essere la coda, nel
nostro caso superato i 10 job la coda non accetta più sottomissioni di job.
Con un comando di qmgr possiamo controllare le code create in Torque:
qmgr -c "list queue @localhost"
Ovviamente tutte le code inserite in Torque andranno poi configurate all'interno dello
scheduler, così che lo scheduler stesso si occuperà di assegnarvi dei job a seconda delle
richieste pervenute al sito di calcolo.
6.1.8
Il comando qsub
Il comando principale di Torque è qsub, tramite questo comando sottomettiamo un job
al sistema batch, indipendentemente dallo scheduler presente, il job sottomesso viene
accodato, se non è stata definita una coda di default o se non è stata specificata tramite
parametro, Torque stesso sceglierà una coda di assegnazione, ovviamente senza una
scheduler in esecuzione il job verrà accodato ma mai eseguito.
Con il comando qmgr impostiamo una coda di default, dove Torque inserirà i job a cui
nn è stata specificata la coda di destinazione.
qmgr -c "set server default_queue=slow"
Il comando qsub ha alcuni parametri con la quale è possibile gestire al meglio la
sottomissione del proprio job al sito di calcolo:
[-a date_time]
[-A account_string]
66
[-c interval]
[-C directive_prefix]
[-d path]
[-D path]
[-e path]
[-h]
[-I ]
[-j join ]
[-k
keep ]
[-l
resource_list ]
[-m mail_options]
[-M user_list]
[-N name]
'Nome da assegnare al job
[-o path]
[-p priority]
[-q destination] 'Coda di destinazione
[-r c]
[-S path_list]
[-t array_request]
[-T prologue/epilogue script_name]
[-u user_list]
[-v variable_list]
[-V ]
[-W additional_attributes]
[-X]
[-z] [script]
Torque offre altri comandi per la gestione dei job, comandi abilitati solo per gli
amministratori del sito di calcolo, come qdel che permette di cancellare un job o qrun
che permette di forzare l'esecuzione di un job in coda.
6.2
6.2.1
MAUI
Installazione di Maui
L'installazione dello schedule Maui è molto semplice infatti una volta scaricato il
pacchetto dal sito web andremo prima a scompattare il pacchetto e successivamente a
eseguire l'installazione.
Maui verrà installato sul server denominato Computeing Element (CE) come suggerito
dalle direttive della EGEE1.
1 Enabling Grids for E-sciencE (EGEE) is the largest multi-disciplinary grid infrastructure in the world.
67
>
>
>
>
>
gtar -xzvf maui-3.0.7.tar.gz
cd maui-3.0.7
./configure
make
make install
6.2.2
Configurazione iniziale
Con l'installazione uno script preconfigurato si occuperà di settare i principali parametri
per una corretta esecuzione di Maui.
I parametri d'esecuzione di Maui vengono registrati in un file (maui.cfg), all'interno di
tale file troveremo tutte le impostazioni di Maui, dalle più generali alle più specifiche
che tratteremo direttamente come la gestione delle code di job.
Analizziamo i parametri principali che forniscono a Maui le informazioni sul sistema di
calcolo della quale andrà a far parte.
•
SERVERHOST specifica dove Maui è in esecuzione, deve essere specificato il
nome del host per intero compreso il dominio di appartenenza.
•
SERVERPORT specifica su quale porta il server Maui resta in ascolto per
ricevere le connessioni dei client. Default: 40559
•
ADMIN1 Maui presenta tre livelli di sicurezza per quanto riguarda
l'amministratore del sistema, con ADMIN1 viene identificato l'amministratore
principale, ha possibilità di controllare completamente il sistema, sono presenti
anche ADMIN2 e ADMIN3 che hanno rispettivamente solo la possibilità di
modificare i permessi il primo e di avere informazioni sullo stato di Maui il
secondo.
•
RMCFG[base] con questo parametro sono impostate tutte le informazioni
riguardanti il Resource Manager con la quale Maui dovrà collaborare.
◦ TYPE imposta il tipo di Resource Manager. Ex: PBS
◦ AUTHTYPE specifica il tipo di protocollo di sicurezza per il dialogo tra
Maui e il RM. Ex: CHECKSUM or PKI
◦ NAME specifica il nome del Resource Manager
68
◦ PORT specifica la porta sulla quale interrogare il Resource Manager
◦ POOLINTERVAL indica ogni quanto interrogare il Resource Manager, in
secondi. Ex: 60
•
ADMINHOST specifica da quale host potranno pervenire i comandi di
amministrazione di Maui. Ex: grid-ce.pr.infn.it
6.2.3
Maui testing
Maui è stato studiato con la possibilità di effettuare dei test senza mettere a rischio
l'intero sistema, infatti possiamo eseguire Maui in “test-mode” cosi da mantenere in
esecuzione un eventuale precedente versione che è già in funzione all'interno del
sistema.
Nella modalità test Maui andrà a raccogliere le informazioni dal Resource Manager in
tempo reale e agirà come se fosse lo scheduling in esecuzione ma senza la possibilità di
lanciare, modificare o cancellare job, infatti tali comandi saranno disabilitati.
•
SERVERMODE è il parametro con la quale andiamo ad impostare il tipo di
esecuzione di Maui.
◦ NORMAL
◦ TEST
◦ SIMULATION
6.2.4
File layout
$(MAUIHOMEDIR)
•
maui.cfg
•
maui-private.cfg
file di configurazione di Maui
file contenete le informazioni di configurazione private
necessarie al server
•
fs.cfg file di configurazione del Fair Sharing, da Maui 3.0.6 e precedenti
versioni
69
•
maui.ck
Maui checkpoint file
•
maui.pid
Maui lock file per prevenire esecuzioni multiple
•
log
cartella contenente i file di log
◦ maui.log
◦ maui.log.1
•
stats
cartella contenente i file di statistica
◦ stats.<yyyy>_<mm>_<dd>
•
tools
•
trace cartella con i trace file delle simulazioni di Maui
•
bin
cartella contenente i tool di Maui
cartella contenente i file eseguibili
◦ maui eseguibili
◦ maui_client
eseguibili user-interface
◦ profiler
tool per l'analisi delle statistiche
•
src
•
spool cartella con i file temporanei
•
contrib cartella contenente i file di contributo di Maui, come algoritmi e GUI
cartella con i sorgenti di Maui
Abbiamo osservato immediatamente che la posizione dei file non viene sempre
rispettata, infatti nell'installazione sulla quale stiamo lavorando, Maui è stato installato
nella cartella /usr/local/maui.
Anche il nome dei file di statistica non è uguale a quello dichiarato dai produttori di
Maui, probabilmente sono parametri che possono essere modificati durante la fase di
compilazione.
70
6.3
MOAB
Abbiamo installato anche lo scheduler Moab, sfruttando una licenza demo della durata
di 45 giorni, scaricabile dal sito di Cluster Resource previa registrazione
6.3.1
Installazione di Moab
Scarichiamo i pacchetti MOAB necessari:
•
Moab Workload Manager
wget --http-user=leonardo.mutti --httppasswd=targetcluster
http://www.clusterresources.com/download/eval/moab-5.3.0linux-i686-torque.tar.gz
•
Moab Cluster Manager
wget --http-user=leonardo.mutti --httppasswd=targetcluster
http://www.clusterresources.com/download/eval/mcm-5.2.001.linux.tar.gz
•
Moab Access Portal
wget --http-user=leonardo.mutti --httppasswd=targetcluster
http://www.clusterresources.com/download/eval/map5.2.0.tar.gz
cd /opt/moab
tar -xzf moab-5.3.0-linux-i686-torque.tar.gz
cd moab-5.3.0
./configure
make install
6.3.2
Variabili d'ambiente
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
71
Questo comando possiamo anche renderlo permanente creando un file (es:moab-var.sh)
in /etc/profile.d con dentro il comando export sopra citato.
6.3.3
Avviamo Moab Workload Manager
moab
Con il comando “showq” possiamo testare il corretto funzionamento di Moab.
File di configurazione di Moab: /opt/moab/moab.cfg
6.3.4
Installazione Moab Cluster Manager
Il Cluster Manager è un tool grafico utile per controllare Moab e con esso l'intero
sistema batch, per impostare o modificare i parametri delle code e anche per analizzare
lo stato di utilizzo del sito.
Prima di installare il Cluster Manager proviamo la corretta esecuzione di Moab:
showq
tar -zxf mcm-5.2.0-01.linux.tar.gz
cd mcm-5.2.0-01
./mcm
72
Illustrazione 9: Moab Cluster Manager
6.4
Gestione del job CERT
Nel sito di Parma come negli altri siti che partecipano al progetto GRID a periodi
regolari viene sottomesso un job che ha il compito di verificare lo stato del sito e la sua
effettiva operatività.
Ovviamente a tale job viene assegnato un tempo di attesa scaduto il quale il sito viene
dichiarato inattivo, purtroppo questa eventualità può si verificarsi se il sito è
effettivamente inattivo, ma può verificarsi anche se il sito è completamente utilizzato e
non è stata configurata correttamente una logica di preemption per il job “certificatore”.
Per risolvere tale problematica abbiamo usato le preemption policies presenti in Maui,
abbiamo creato una coda, detta coda “cert”, che gode della possibilità di effettuare
preemption su tutte le altre code presenti nel sito, così da essere certi che anche se il sito
di calcolo dovesse essere al 100 % occupato al momento dell'arrivo del job cert, tramite
preemption verrà subito liberata una risorsa per la sua esecuzione.
73
6.5
Esecuzione di un job multiprocesso
Basandosi sulle ricerche svolte all'interno del gruppo INFN di Parma abbiamo provato
ad eseguire alcuni job multiprocesso all'interno del nostro nodo di calcolo di test così da
poter analizzare il comportamento dello scheduler Maui.
Prima di poter eseguire i job multiprocesso è stato necessario installare, basandosi sulle
linee guida di un documento già prodotto (“INTEGRARE IL CALCOLO LOCALE
MPI NELLA FARM INFN-GRID”), la libreria MPI-Start.
Dopo di che abbiamo osservato come l'esecuzione di job multiprocesso non comporta
particolari problematiche allo scheduler una volta che esso è stato configurato
correttamente, infatti l'esecuzione di job multiprocesso comporta principalmente il
problema di richieste di risorse più numerose per uno stesso job, richiesta che poteva
avvenire già in precedenza con job sequenziali.
Tramite l'utilizzo della reservation Maui gestisce tale problematica al meglio e
sfruttando la tecnica di backfill permette al sito di non giungere in situazioni di
starvation dovute a richieste di risorse troppo esose da job multiprocesso che
comporterebbero attese molto lunghe.
Per abilitare Maui alla gestione di job multiprocesso dobbiamo settare a true due
parametri:
ENABLEMULTINODEJOBS TRUE
ENABLEMULTIREQJOBS TRUE
Per i dettagli di esecuzione di job multiprocesso rimandiamo al sito:
http://www.fis.unipr.it/dokuwiki/doku.php?id=grid:start
74
7
Conclusioni
Al fine di ottimizzare i criteri di scheduling per job multiprocesso in ambiente Grid,
sono stati testati i batch system Torque, con i relativi job scheduler Moab e Maui, e il
batch system LSF, integrato di job scheduler.
E' stato osservato come, rilasciato in licenza open source, Maui, insieme a Torque,
risponda perfettamente alle necessità di un sito di calcolo delle dimensioni simili a
quello dell'Università di Parma.
E' stato possibile, con successo, configurare Maui per la gestione di diverse code di job,
che tramite priority, policy, QoS e preemption possono soddisfare diverse necessità di
utilizzo da parte di svariati utenti.
L'impiego della preemption ha permesso di risolvere una problematica più volte
riscontrata all'interno di un sito di calcolo che vuole far parte di una rete estesa come
Grid, infatti il job di controllo, inviato da Grid per verificare lo stato del sito di calcolo,
deve avere priorità assoluta rispetto all'esecuzione di altri job, tale priorità di esecuzione
è possibile solamente mediante l'utilizzo della preemption.
E' stata analizzata la tecnica del fairshare e tramite opportune configurazioni è stato
introdotto il suo utilizzo all'interno del sito di calcolo, così facendo le risorse del sito
verranno assegnate dallo scheduler non più soltanto sulla base di policy e priority
predefinite ma anche mediante valutazioni statistiche di uso delle risorse nel tempo, che
permetterà una assegnazione “giusta” agli utenti.
Introducendo richieste di risorse del sito di calcolo da parte di job multiprocesso è stato
necessario installare la libreria MPI a supporto del resource manager Torque e sono state
testate due ulteriori caratteristiche dei job scheduler: backfill e reservation.
Tramite l'utilizzo della backfill è stata portata la percentuale di utilizzo delle risorse del
sito di calcolo al 90 %, mentre tramite l'impiego della reservation è stato garantita
l'esecuzione di job molto complessi e onerosi a livello di risorse richieste in tempi
ragionevoli.
75
Possibili sviluppi futuri potrebbero certamente interessare una migliore integrazione tra
batch system e sistema operativo.
Al termine di quest’esperienza ringrazio sentitamente il Prof. Roberto Alfieri per aver
creduto in me ed avermi assistito durante la stesura della tesi.
76
8
Bibliografia
•
Andrew S. Tanenbaum,
Reti di calcolatori 4a Edizione, Pearson 2003.
•
Abraham Silberschatz,
Sistemi Operativi 6a Edizione, Addisson-Wesley 2002.
•
D. Gross e C.M. Harris,
Foundamentals of Queueing Theory, Wiley Series in Probability and statistics.
•
L. Kleinrock,
Queueing System, Wiley and Sons
•
E. Cinlar,
Introduction to Stochastic Processes, Prentice Hall 1975
77
9
Sitografia
•
Cluster Resources Inc. - Homepage
http://www.clusterresources.com/
•
Paltform - Homepage
http://www.platform.com/
•
Future Technology Group – Berkeley Lab Checkpoint/Restart (BLCR)
https://ftg.lbl.gov/CheckpointRestart/CheckpointRestart.shtml
•
Centro Nazionale per la Ricerca e Sviluppo nelle Tecnologie Informatiche e
Telematiche (CNAF) - Homepage
http://www.cnaf.infn.it/
•
European Organization for Nuclear Research (CERN) - Homepage
http://www.cern.ch/
•
Wikipedia – Italian Homepage
http://it.wikipedia.org/
•
National Institute of Nuclear Physics - Homepage
http://www.infn.it/
•
Università di Parma (Fisica) – Docuwiki Grid
http://www.fis.unipr.it/dokuwiki/doku.php?id=grid:start
•
gLITE - Homepage
http://glite.web.cern.ch/glite/packages/R3.1/updates.asp
•
TCG Working Group on MPI - Homepage
http://www.grid.ie/mpi/wiki/FrontPage
•
Universität Stuttgart – MPI Project
78
http://www.hlrs.de/organization/amt/projects/mpi-start/
•
IFCA Grid Website – Dokuwiki - MPI
http://wiki.ifca.es/e-ciencia/index.php/MPI_Support
79
10
Appendice A : maui.cfg
# maui.cfg 3.2.6p20
SERVERHOST
localhost
# primary admin must be first in list
ADMIN1
root
# Resource Manager Definition
RMCFG[localhost]
TYPE=PBS SUSPENDSIG=23
# Allocation Manager Definition
AMCFG[bank]
TYPE=NONE
RMPOLLINTERVAL
00:00:02
SERVERPORT
SERVERMODE
42559
NORMAL
# Admin:
LOGFILE
LOGFILEMAXSIZE
LOGLEVEL
maui.log
10000000
3
# Job Priority:
QUEUETIMEWEIGHT
CLASSWEIGHT
100
QOSWEIGHT
1
1
# FairShare:
FSPOLICY
FSDEPTH
FSINTERVAL
FSDECAY
PSDEDICATED
7
86400
0.80
# Throttling Policies:
80
# NONE SPECIFIED
# Backfill:
BACKFILLPOLICY
RESERVATIONPOLICY
PREEMPTPOLICY
FIRSTFIT
NEVER
REQUEUE
# Node Allocation:
NODEALLOCATIONPOLICY
MINRESOURCE
#MULTIPROCESS
ENABLEMULTINODEJOBS TRUE
ENABLEMULTIREQJOBS TRUE
# QOS:
QOSCFG[hi] PRIORITY=1000 QFLAGS=PREEMPTOR:RESTARTPREEMPT
QOSCFG[low] PRIORITY=10 QFLAGS=PREEMPTEE
# Standing Reservations:
SRSTARTTIME[test]
SRENDTIME[test]
SRDAYS[test]
SRTASKCOUNT[test]
SRMAXTIME[test]
8:00:00
17:00:00
MON TUE WED THU FRI
20
0:30:00
# Creds:
USERCFG[DEFAULT]
USERCFG[john]
GROUPCFG[staff]
CLASSCFG[slow]
CLASSCFG[fast]
FSTARGET=25.0
PRIORITY=100 FSTARGET=10.0PRIORITY=1000 QLIST=hi:low QDEF=hi
PRIORITY=10 FLAGS=RESTARTABLE
QLIST=low& QDEF=low&
PRIORITY=1000 QLIST=hi& QDEF=hi&
81
Scarica

ottimizzazione criteri di scheduling per job multiprocesso in