IL SISTEMA SGEEE DI CODE SERIALI E PARALLELE
Introduzione
Su alcuni cluster di macchine del CASPUR è stato installato il Queueing System SGEEE (Sun Grid Engine Enterprise Edition) della Sun Microsystems. SGEEE rappresenta la naturale evoluzione della precedente versione del sistema di code GRD. Nel
sistema SGEEE si ha un certo numero di code associate a ciascun host.
L'utente può richiedere le risorse di cui ha bisogno (memoria, runtime,
spazio disco, ecc.) e il sistema di code sceglie automaticamente la
coda su cui mandare il job in esecuzione. Il concetto di "coda" è
strettamente legato a un host: su un host possono essere definite più
code, ma una coda non può girare su più di un host. Celle SGEEE al CASPUR
Il sistema di code SGEEE è stato installato al CASPUR sui seguenti cluster di macchine:
- HP EV7: il nome della cella SGEEE è ev7. Il cluster è composto dalla macchina multiprocessore jamaica. Sono state definite due code, il cui limite per il run-time è fissato secondo la
seguente tabella:
| Coda |
Limite di run-time |
Seriale/Parallela |
Numero di slot |
| jamaica |
8 h |
Parallela |
28
|
| gaussian |
8 h |
Parallela |
8
|
- Power4: il nome della cella SGEEE è sp4. Il cluster è composto da man (front-end), zut, pwr4p0, pwr4p1 e pwr4p2.
Anche in questo caso per ogni macchina è stata definita una coda che
porta lo stesso nome del nodo su cui gira. Il limite per il run-time è
fissato secondo la seguente tabella:
| Coda |
Limite di run-time |
Seriale/Parallela |
Numero di slot |
| pwr4p0 |
8 h |
Parallela |
8 |
| pwr4p1 |
8 h |
Parallela |
32 |
| pwr4p2 |
8 h |
Parallela |
32 |
| zut |
8 h |
Seriale |
4 |
- NEC SX6: il nome della cella SGEEE è nec. Il cluster è composto da drone (front-end) e nectar.
| Coda |
Limite di run-time |
Seriale/Parallela |
Numero di slot |
| nectar |
8 h |
Parallela |
8
|
Sottomissione di un job
Ogni job deve essere sottomesso al sistema di code SGEEE sotto forma di uno shell script:
- #!/bin/tcsh
- cd myproject/mybinaries
- cc -o myprogram.exe myprogram.c
- myprogram.exe -input mydata.dat -output myjob.out
I job devono essere sottomessi con il comando qsub:
- <palumbo@vulcano ~>qsub -l h_rt=9:00:00 myjob.sh
- your job 13 ("myjob.sh") has been submitted
È importante specificare l'opzione -l h_rt=HH:MM:SS per definire
il tempo necessario al run, altrimenti verrà aggiunto implicitamente -l
h_rt=8:00:00, ossia il run durerà al massimo 8 ore anche se la coda
assegnata ha un limite di run-time di 24 ore. Controllo dei job
Il controllo dei job si effettua per mezzo del comando qstat. L'opzione -f offre una visione globale delle code della cella.
<palumbo@vulcano ~>qstat
job-ID prior name user state submit/start at queue master
----------------------------------------------------------------------
13 0 myjob.sh palumbo t 09/24/1999 17:10:39 vulcano MASTER
<palumbo@vulcano ~>qstat -f
queuename qtype used/tot. load_avg arch states
--------------------------------------------------------------
vesuvio BP 0/14 15.87 solaris64
--------------------------------------------------------------
vulcano BP 1/4 8.44 solaris64
13 0 myjob.sh palumbo r 09/24/1999 17:10:39 MASTER
Per default SGEEE è configurato in modo tale da rifiutare un job
sottomesso se questo possiede delle caratteristiche tali da non poter
essere sottomesso su nessuna coda. Per controllare in anticipo se un job può essere sottomesso, occorre usare l'opzione -w v di qsub.
- <palumbo@sp3 >qsub -w v -pe mp 4 sottometti_mpi_ip
- verification: found possible assignment with 4 slots
- <palumbo@sp3 >qsub -w v -pe mp 400 sottometti_mpi_ip
- Your job: parallel job requires more slots than available
- verification: no suitable queues
Maggiori informazioni sui job mandati in esecuzione si possono ottenere tramite l'opzione -r di qsub. Lo
standard output e lo standard error di un job sottomesso vengono messi
per default nella working directory corrente, con la forma:
- <job_name>.o<job_number> (standard output)
- <job_name>.e<job_number> (standard error)
Le opzioni -o e -e di qsub permettono di cambiare locazione ai file di output e di errore.
Cancellazione di un job
Per cancellare un job, si usa il comando qdel <job_id>. Job in stato di errore
Quando un job va in errore, questo viene rimesso in coda (si può
vedere lo stato di errore dalla "E" che appare nei flag di stato). Se
il problema che ha messo il job in error state viene risolto, il flag
si può togliere dal job con il comando qmod -c <job_id>. Parallel Environment
Sulle code delle celle vulcani, venti, fiumi e sp3 sono stati configurati due Parallel Environment: mp e sm. Per utilizzarli, occorre specificare l'opzione -pe <ambiente> <numero processori> (es. -pe mp 4) al comando qsub. Sulle code della cella sp3 l'ambiente message passing (mp) utilizza l'HPS (High Performance Switch) in modalità US. Osservazione importante
Prima di sottomettere un job a SGEEE, è necessario controllare se i propri file di inizializzazione (.cshrc, .login, .profile, .kshrc) contengono comandi come stty,
che provocano degli errori se eseguiti in modalità batch (i job
eseguiti in batch non hanno una connessione in terminale). Questi
comandi vanno rimossi o aggirati in modo che vengano eseguiti solo a
un'effettiva connessione via terminale. Per maggiori dettagli
consultare il manuale di SGEEE a pagina 58. Ulteriori informazioni
Per ulteriori informazioni si può consultare il manuale di SGEEE o le man page dei diversi comandi. Esempi di script per sottomettere job
Notare che il carattere "#" è un commento, mentre "#$" è un comando.
Script per sottomettere un job seriale:
- #!/bin/sh
- # Reindirizzo output (opzionale)
- #$ -o bench.out
- # Reindirizzo standard error (opzionale)
- #$ -e bench.err
- # Invio notifica start/stop/fail (opzionale)
- # 1) indirizzo e-mail del destinatario
- #$ -M nomeutente@caspur.it
- # 2) quando spedire l'e-mail
- # b = spedire messaggio all'inizio del run
- # e = spedire messaggio alla fine del run
- #$ -m be
- #--------------------------------------------
- # Settaggio eventuali variabili d'ambiente
- MIA_VARIABILE = 10
- export MIA_VARIABILE
- #--------------------------------------------
Script per sottomettere un job parallelo con OpenMP
- #!/bin/sh
- # Reindirizzo output (opzionale)
- #$ -o bench.out
- # Reindirizzo standard error (opzionale)
- #$ -e bench.err
- # Invio notifica start/stop/fail (opzionale)
- # 1) indirizzo e-mail del destinatario
- #$ -M nomeutente@caspur.it
- # 2) quando spedire l'e-mail
- # b = spedire messaggio all'inizio del run
- # e = spedire messaggio alla fine del run
- #$ -m be
- # Processori richiesti
- # sm = shared memory environment
- # mp = message passing environment
- #$ -pe sm 14
- #--------------------------------------------
- # Settaggio eventuali variabili d'ambiente
- KMP_STACKSIZE = 32m
- export KMP_STACKSIZE
- OMP_NUM_THREADS = 14
- export OMP_NUM_THREADS
- #--------------------------------------------
Script per sottomettere un job parallelo con POE (SOLO cella sp3)
- #!/bin/csh
- # Reindirizzo standard output (opzionale)
- #$ -o bench.out
- # Reindirizzo standard error (opzionale)
- #$ -e bench.err
- # Invio notifica start/stop/fail (opzionale)
- # 1) indirizzo e-mail del destinatario
- #$ -M nomeutente@caspur.it
- # 2) quando spedire l'e-mail
- # b = spedire messaggio all'inizio del run
- # e = spedire messaggio alla fine del run
- #$ -m be
- # Ambiente parallelo
- # sm = shared memory environment
- # mp = message passing environment
- #$ -pe mp 32
- # Variabili di ambiente per POE (necessarie)
- setenv MP_PROCS $NSLOTS
- # La variabile MP_EUILIB seleziona la modalita' di
- # utilizzo dello switch:
- # ip = IP mode
- # us = US mode (default)
- #$ -v MP_PROCS,MP_EUILIB=us,MP_RESD=yes,MP_SHARED_MEMORY=yes
- /usr/bin/poe $PWD/mia_applicazione -hfile $TMPDIR/hostfile
- #--------------------------------------------------------
ATTENZIONE !!
È possibile che la sottomissione di job MPI sulla cella sp3 provochi la comparsa, nel file di output, di uno o più messaggi di questo tipo:
ERROR: 0031-123 Retrying allocation .... press control-C to terminate Il
messaggio è generato dal LoadLeveler, il sistema di gestione delle
risorse della macchina SP3, e indica semplicemente che il tentativo di
allocazione di una risorsa è fallito e che si sta effettuando un
ulteriore tentativo, dunque può essere ignorato. |