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:

  1. indipendenza dalla shell e dalla piattaforma utilizzata;

  2. modularità delle impostazioni tali da rendere la gestione degli ambienti agevole e pulita;

  3. 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:

  1. la prima linea deve obbligatoriamente essere #%Module1.0
  2. bisognerà rispettare la sintassi tcl
  3. si dovrà far riferimento ai comandi messi a disposizione da Modules.

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


In EneaGrid le shell supportate sono: bash/sh, ksh e tcsh/csh.
Come già si è detto, Modules permette di gestire l'ambiente indipendentemente dalla shell utilizzata, tuttavia il comportamento delle shell può variare a seconda dal tipo di shell. Una shell può essere di 3 tipi differenti:
  1. shell di login, quella che si avvia nel momento in cui ci entriamo nel sistema dopo l'immissione di username e password
  2. shell interattive, quelle che permettono di inserire comandi, può essere anche di login
  3. shell non interattive, quelle lanciate ogni volta che eseguiamo uno script.
In base al tipo di shell il sistema leggerà diversi file di configurazione. Tralasciando gli script di sistema, l'utente leggerà:

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:

.bashrc
ed inserire la seguente stringa:

. /usr/share/Modules/init/bash

e
 
.kshrc
ed inserire la seguente stringa:

. /usr/share/Modules/init/ksh

stesso discorso vale con le shell non interattive
 
!#/bin/bash
. /usr/share/Modules/init/bash






Cookies Policy