USO DI MODULES IN ENEAGRID
Introduzione
Modules consente d'impostare un ambiente di shell (PATH, MANPATH, INCLUDE, LD_LIBRARY_PATH, ecc..) in modo semplice e ordinato, attraverso l'uso di moduli scritti in tcl.
I maggiori vantaggi di Modules, tali da renderlo ideale per una struttura come ENEAGRID sono:
indipendenza dalla shell e dalla piattaforma utilizzata;
modularità delle impostazioni tali da rendere la gestione degli ambienti agevole e pulita;
praticità e pulizia nel modificare dinamicamente l'ambiente.
ENEAGRID
possiede infatti una gran varietà di compilatori, librerie e altri
software installati, alcuni dei quali disponibili in più versioni.
Ogni modulo contiene le
informazioni necessarie per configurare un'applicazione, modificando
o impostando le variabili d'ambiente della shell, come PATH, MANPATH,
ecc.
I moduli possono essere caricati e scaricati
in modo dinamico e atomico, in modo da rendere agevole e pulito
passare da una versione di compilatore ad un'altra o selezionare una
specifica versione di fortran Pgi.
Tutte le informazioni riguardanti Modules possono essere trovate su http://modules.sourceforge.net/
Transizione dal vecchio al nuovo environment
Il passaggio ai moduli sarà per gli utenti il più possibile trasparente. I file di configurazione sono:
~/.profile per bash e ksh che contengono una chiamata a /afs/enea.it/profile/common/profile
~/.login per tcsh e csh che contengono una chiamata a /afs/enea.it/profile/common/login
In
precedenza per configurare le c-shell è stato utilizzato lo script
~/.cshrc, tuttavia mentre il .profile è un file di configurazione di
una login-shell il .cshrc è un file di configurazione di una shell
interattiva. Si è dunque ritenuto opportuno riallineare gli script
di configurazione prendendo in considerazione i due script di login
(.profile e .login). Tali
script verificheranno l'esistenza della variabile d'ambiente
ENEAGRID_CLUSTER_ID ed in caso affermativo procederanno nel caricare
l'ambiente corretto.
Uso di Modules
Negli script di login della vostra shell il comando module può essere definito come funzione (bash o ksh) o come alias (csh o tcsh).
Digitando il comando module, vi verranno elencati i possibili comandi (o azioni) che può intraprendere.
Modules Release 3.2.7 2009-07-30 (Copyright GNU GPL v2 1991):
Usage: module [ switches ] [ subcommand ] [subcommand-args ]
Available SubCommands and Args:
+ add|load modulefile [modulefile ...]
+ rm|unload modulefile [modulefile ...]
+ switch|swap [modulefile1] modulefile2
+ display|show modulefile [modulefile ...]
+ avail [modulefile [modulefile ...]]
+ use [-a|--append] dir [dir ...]
+ unuse dir [dir ...]
+ update
+ refresh
+ purge
+ list
+ clear
+ help [modulefile [modulefile ...]]
+ whatis [modulefile [modulefile ...]]
.................................
Con Modules l'ambiente di sistema viene configurato attraverso l'esecuzione di più script in tcl chiamati modulefile.
Questo consente di modularizzare gli script d'inizializzazione al fine di rendere più agevole la gestione e la modifica di ambienti complessi come quello di Enea-Grid. Per mostrare l'elenco dei moduli disponibili sul sistema utilizzate il sub-comando avail
<scio@cresco3x001 ~> module avail
---------------------------------------------- /afs/enea.it/profile/Modules/cresco3/common ----------------------------------------------
benvenuto common lsf mpCCI nastran pgplot star-cd the totalview
------------------------------------------- /afs/enea.it/profile/Modules/cresco3/compilatori --------------------------------------------
gcc/gcc463 intel nag_em64T open64 pgi/pgi11_10(default) pgi/pgi70x86 pgi/pgi71x86_64
------------------------------------------- /afs/enea.it/profile/Modules/cresco3/mpi_flavour --------------------------------------------
mpi_flavour/mvapich2_gcc_qlc-1.7 mpi_flavour/mvapich2_pgi_qlc-1.7 mpi_flavour/openmpi_gcc463-1.5.4 mpi_flavour/openmpi_open64-1.5.4
mpi_flavour/mvapich2_intel_qlc-1.7 mpi_flavour/openmpi_gcc-1.5.4 mpi_flavour/openmpi_intel-1.5.4 mpi_flavour/openmpi_pgi-1.5.4(default)
La lista che viene mostrata è suddivisa in tre sezioni: common, compilatori e mpi_flavour.
All'interno di ogni sezione c'è un elenco di modulefile che configurano l'ambiente ognuno per un determinato scopo.
Ad esempio per vedere come viene configurato TotalView, si consideri il modulefile totalview nella sezione common.
Per visualizzare una breve descrizione di ci ò che fa il modulefile si può utilizzate il sub-comando whatis
<scio@cresco3x001 ~> module whatis totalview
totalview : load TotalView Path and License
Per visualizzare le operazioni che vengono eseguite dal modulefile si può utilizzate il sub-comando show
<scio@cresco3x001 ~> module show totalview
-------------------------------------------------------------------
/afs/enea.it/profile/Modules/cresco3/common/totalview:
module-whatis load TotalView Path and License
append-path PATH /opt/toolworks/totalview/bin
append-path LM_LICENSE_FILE 7127@cresco-licn.portici.enea.it
setenv TOTALVIEW /opt/toolworks/totalview/bin/totalview
-------------------------------------------------------------------
Nella descrizione viene riportato anche il nome esteso del modulefile /afs/enea.it/profile/Modules/cresco3/common/totalview
Se si vuole configurare l'ambiente per TotalView, sarà sufficiente utilizzare il sub-comando add / load
<scio@cresco3x001 ~> env | grep TOTALVIEW
<scio@cresco3x001 ~> module add totalview
<scio@cresco3x001 ~> env | grep TOTALVIEW
TOTALVIEW=/opt/toolworks/totalview/bin/totalview
Come si può notare ora l'ambiente ha assegnato alla variabile TOTALVIEW il valore /opt/toolworks/totalview/bin/totalview
Con Modules è possibile gestire la rimozione di quelle variabili d'ambiente configurate durante il caricamento di un modulefile.
Se si vuole riconfigurare l'ambiente eliminando le variabili impostate con TotalView, sarà sufficiente utilizzare il sub-comando rm / unload
<scio@cresco3x001 ~> env | grep TOTALVIEW
TOTALVIEW=/opt/toolworks/totalview/bin/totalview
<scio@cresco3x001 ~> module rm totalview
<scio@cresco3x001 ~> env | grep TOTALVIEW
<scio@cresco3x001 ~>
L'ambiente di default dei nuovi cluster Enea-Grid
Nelle nuove macchine di Enea-Grid è stata inserita una variabile d'ambiente ENEAGRID_CLUSTER_ID che ogni utente carica al login.
Successivamente viene eseguito uno script di inizializzazione dell'ambiente /afs/enea.it/profile/Modules/$ENEAGRID_CLUSTER_ID/profile.module specifico per quel cluster.
Sarà così possibile definire atomicamente un ambiente diverso da macchina a macchina. Nel caso del cluster cresco3 avremo:
## Sezione modules per Cresco3
module add benvenuto
module add lsf
module add intel
module add open64
module add gcc
module add pgi
module add mpi_flavour
Dunque al momento del login vengono caricati i 7 moduli sopra indicati. Per visualizzare l'elenco dei moduli attualmente caricati
e in uso nella vostra shell utilizzate il sub-comando list
<scio@cresco3x001 ~> module list
Currently Loaded Modulefiles:
1) benvenuto 3) intel 5) gcc/gcc463 7) mpi_flavour/openmpi_pgi-1.5.4
2) lsf 4) open64 6) pgi/pgi11_10
Come si può notare sono stati caricati in ordine i modulefile presenti nel profile.module. Tuttavia gli ultimi tre hanno qualcosa di particolare.
Essi sono definiti non da un modulefile, ma dal nome della directory che li contiene; al momento dell'invocazione verrà caricato il modulefile marcato con (default) contenuto nella directory selezionata (o in alternativa l'ultimo in ordine alfabetico).
Ad esempio module add pgi carica pgi/pgi11_10 perché questo è il default scelto dagli amministratori del cluster:
<scio@cresco3x001 ~> module avail
------------------------------------------- /afs/enea.it/profile/Modules/cresco3/compilatori --------------------------------------------
gcc/gcc463 intel nag_em64T open64 pgi/pgi11_10(default) pgi/pgi70x86 pgi/pgi71x86_64
Questo è il modo in cui Modules gestisce la presenza di più versioni di uno stesso software o di tipologie di software incompatibili tra di loro.
Supponiamo ad esempio di voler cambiare mpi_flavour selezionandolo tra quelli disponibili:
<scio@cresco3x001 ~> module avail
------------------------------------------- /afs/enea.it/profile/Modules/cresco3/mpi_flavour --------------------------------------------
mpi_flavour/mvapich2_gcc_qlc-1.7 mpi_flavour/mvapich2_pgi_qlc-1.7 mpi_flavour/openmpi_gcc463-1.5.4 mpi_flavour/openmpi_open64-1.5.4
mpi_flavour/mvapich2_intel_qlc-1.7 mpi_flavour/openmpi_gcc-1.5.4 mpi_flavour/openmpi_intel-1.5.4 mpi_flavour/openmpi_pgi-1.5.4(default)
<scio@cresco3x001 ~> module add mpi_flavour/mvapich2_gcc_qlc-1.7
mpi_flavour/mvapich2_gcc_qlc-1.7(5):ERROR:150: Module 'mpi_flavour/mvapich2_gcc_qlc-1.7' conflicts with the currently loaded module(s) 'mpi_flavour/openmpi_pgi-1.5.4'
mpi_flavour/mvapich2_gcc_qlc-1.7(5):ERROR:102: Tcl command execution failed: conflict mpi_flavour
Il modulo preesistente e quello che si è tentato caricare vanno in conflitto tra di loro e l'operazione non è portata a termine. Per effettuare correttamente questa operazione bisognerà utilizzare il sub-comando swap / switch [old_modulefile new_modulefile2].
<scio@cresco3x001 ~> module list
Currently Loaded Modulefiles:
1) benvenuto 3) intel 5) gcc/gcc463 7) mpi_flavour/openmpi_pgi-1.5.4
2) lsf 4) open64 6) pgi/pgi11_10
<scio@cresco3x001 ~> module swap mpi_flavour/openmpi_pgi-1.5.4 mpi_flavour/mvapich2_gcc_qlc-1.7
<scio@cresco3x001 ~> module list
Currently Loaded Modulefiles:
1) benvenuto 3) intel 5) gcc/gcc463 7) mpi_flavour/mvapich2_gcc_qlc-1.7
2) lsf 4) open64 6) pgi/pgi11_10
Notate bene che il nome del modulefile contiene anche la directory di appartenenza mpi_flavour/mvapich2_gcc_qlc-1.7.
Configurazione dei default personali
E' possibile modificare i default impostati dagli amministratori e caricare al login il modulefile preferito (tipo mpi-selector).
Per fare questo basterà accedere alla directory nascosta .Modules presente nella propria HOME e creare/modificare il file {ENEAGRID_CLUSTER_ID}.default
Ad esempio per cresco3:
<scio@cresco3x001 ~> vi .Modules/cresco3.default
#%Module1.0
module-version mpi_flavour/mvapich2_gcc_qlc-1.7 default
Al prossimo login Modules caricherà mpi_flavour il cui default stavolta sarà mvapich2_gcc_qlc-1.7.
<scio@cresco3x001 ~> module avail
------------------------------------------- /afs/enea.it/profile/Modules/cresco3/mpi_flavour --------------------------------------------
mpi_flavour/mvapich2_gcc_qlc-1.7(default) mpi_flavour/openmpi_gcc-1.5.4 mpi_flavour/openmpi_open64-1.5.4
mpi_flavour/mvapich2_intel_qlc-1.7 mpi_flavour/openmpi_gcc463-1.5.4 mpi_flavour/openmpi_pgi-1.5.4
mpi_flavour/mvapich2_pgi_qlc-1.7 mpi_flavour/openmpi_intel-1.5.4
All'interno
dello stesso file .Modules/cresco3.default
l'utente
potrà caricare altri modulefile tra quelli disponibili ed
eventualmente aggiungerne dei propri.
Per
rendere “visibile” a Modules un proprio script basterà
aggiungere la directory dove esso è contenuto al ModulePath.
A tal scopo esiste il sub-comando use:
<scio@cresco3x001 ~> module use /afs/enea.it/fra/user/scio/.Modules/
<scio@cresco3x001 ~> module avail
------------------------------------------------- /afs/enea.it/fra/user/scio/.Modules/ --------------------------------------------------
cresco3.default test_modules
Fate
attenzione perché Modules andrà alla ricerca di tutti gli script che
hanno come intestazione #%Module1.0 anche
su tutte le
sottodirectory a quella specificata (se son troppe potrebbe rallentare
molto).
Scrivere uno script per Modules è abbastanza semplice:
Per maggiori informazioni è possibile prendere ad esempio i modulefile esistenti e consultare le seguenti pagine web:
http://modules.sourceforge.net/man/module.html
per i comandi generali
http://modules.sourceforge.net/man/modulefile.html
per i comandi accettati dai modulefile
Modules e le shell
Shell |
interattiva |
non-interattiva |
login |
t(csh) |
~/.cshrc |
~/.cshrc |
~/.login |
ba(sh) |
~/.bashrc |
$BASH_ENV |
~/.profile |
ksh |
~/.kshrc |
nothing |
~/.profile |
Da questo schema si puPer le
shell interattive si possono creare i due file: