Script RSL
Quando non e' possibile utilizzare direttamente il comando mpirun
per l'ambiente di esecuzione sui vari hosts e' troppo eterogeneo (es. eseguibili
in directory diverse o con nomi diversi) si rende necessario scrivere un
proprio script RSL (Globus Resource
Specification Language). Riportiamo di seguito una lista di caratteristiche
che lo script RSL deve avere per funzionare bene con MPICH-G2 :
- deve essere uno script di tipo multirequest, cioe' deve avere
come primo carattere un "+"
- ogni subjob deve contenere una indicazione del jobmanager remoto
(resourceManagerContact="<globus_jm_service>"), oppure del solo nome
dell'host, in questo caso viene utilizzato il jobmanager di default (come
abbiamo sempre fatto noi).
- ogni subjob deve avere un identificativo unico e progressivo, a partire
da 0, che deve essere indicato con due specifiche stringhe nello script
(label="subjob 0") e (environment=(GLOBUS_DUROC_SUBJOB_INDEX 0)).
Il modo piu' semplice per scrivere uno script RSL e' comunque quello di
modificarne uno gia' fatto da mpirun. Con il comando :
/usr/local/mpich-g2/bin/mpirun
-dumprsl -np 6 myprog 123 456 > myprog.rsl
si ottiene lo script RSL che userebbe mpirun, ma senza eseguirlo
e redirezionandolo in un file di testo. Il risultato sara' simile a questo
:
+
( &(resourceManagerContact="cluster.unipr.it")
(count=2)
(label="subjob 0")
(environment=(GLOBUS_DUROC_SUBJOB_INDEX 0)
(LD_LIBRARY_PATH /usr/local/GlobusToolkit2.2/lib/)
(GLOBUS_HOSTANAME cluster.unipr.it))
(arguments=" 123 456")
(directory="/home/cattani/")
(executable="/home/cattani/myprog")
)
( &(resourceManagerContact="pp4.ce.unipr.it")
(count=2)
(label="subjob 1")
(environment=(GLOBUS_DUROC_SUBJOB_INDEX 1)
(LD_LIBRARY_PATH /opt/GlobusToolkit2.2/lib/)
(GLOBUS_LAN_ID 0))
(arguments=" 123
456")
(directory="/home/Ildico/cattani/globus")
(executable="/home/Ildico/cattani/globus/myprog")
)
( &(resourceManagerContact="pp2.ce.unipr.it")
(count=2)
(label="subjob 2")
(environment=(GLOBUS_DUROC_SUBJOB_INDEX 2)
(LD_LIBRARY_PATH /opt/GlobusToolkit2.2/lib/)
(GLOBUS_LAN_ID 0))
(arguments=" 123 456")
(directory="/home/Ildico/cattani/globus/")
(executable="/home/Ildico/cattani/globus/myprog")
)
questo utilizzando un file machines di questo tipo :
"cluster.unipr.it" : 2
"pp4.ce.unipr.it" : 2
"pp2.ce.unipr.it" : 2
Oltre a consentire l'esecuzione di programmi MPI su sistemi
diversamente configurati a livello di directory e path, gli script RSL permettono
di effettuare una configurazione piu' profonda dell'esecuzione di globusrun,
e di sfruttare alcune funzionalita' particolari di MPICH-G2:
- Settare il range di indirizzi IP. E' possibile specificare
l'indirizzo di una interfaccia di rete o di un set di interfaccia con la
variabile di ambiente MPICH_GLOBUS2_USE_NETWORK_INTERFACE. Ad
esempio : (MPICH_GLOBUS2_USE_NETWORK_INTERFACE 140.221.8.0/24)
- Settare il range di porte TCP/IP. E' possibile indicare a
Globus un range di porte per effettuare le comunicazioni attraverso la variabile
d'ambiente GLOBUS_TCP_RANGE. Questo puo' essere utile quando sia
necessario passare attraverso un firewall in cui solo un certo range di
porte puo' accettare connessioni dall'esterno.
- Settare il buffer TCP. Con la variabile di ambiente MPICH_GLOBUS_TCP_BUFER_SIZE
si puo' impostare la dimensione del buffer TCP. Notare che le dimensioni
dovranno essere le stesse per tutti i subjob.
- Comunicare ad MPICH-G2 che due subjob sono sulla stessa LAN.
Per fare questo utilizzare la viariabile GLOBUS_LAN_ID.
- Indicare il nome dell'host. Questa possibilita' si e' rilevata
determinante per poter eseguire i programmi con MPICH-G2 anche fuori della
LAN di Parma2. Infatti e' possibile aggiungere allo script RSL una stringa
per settare la variabile di ambiente GLOBUS_HOSTNAME che non viene
prodotta automaticamnete da mpirun. Inizialmente tentando di eseguire
job contemporaneamente sul cluster Parma2 che sul cluster al Centro di Calcolo
ottenevamo errori di questo tipo :
globusrun:
pr_tcp.c:1548: outgoing_open: Assertion `rc == 0' failed.
/usr/local/mpich-g2/bin/mpirun:
line 192: 3111 Abortito
${GLOBUSBINDIR}/globusrun -mpirun 1 -w -f $globusrun_rsl_file
Il problema e' scomparso aggiungendo la stringa (GLOBUS_HOSTANAME
cluster.unipr.it) allo script, come riportato sopra.
Una volta che si e' ottenuto lo script RSL desiderato di puo' lanciare
l'esecuzione con :
/usr/local/mpich-g2/bin/mpirun
-globusrsl myprog.rsl