Farm Linux del Servizio di Calcolo
| Hardware & Software | OpenPBS - Comandi piu' usati | OpenPBS - Sottomettere un job | MPI & OpenPBS |



La Farm Linux del Servizio di Calcolo e' accessibile da tutti gli utenti che abbiano un account AFS dei LNF.
Le macchine rispondono solo tramite il protocollo SSH da nodi interni ai Laboratori.

Per connettersi ai nodi della farm e' disponibile l'alias lxcalc.lnf.infn.it




 Top 

Hardware

5 x Slot 1U HP Proliant DL360
- CPU: 2 x Intel Xeon 2.8 GHz / 512 Kb L2 Cache
- RAM: 3 GB
- HDD: 1 x 18 GB @ 15.0000 rpm SCSI U320
- LAN: 1 x GigabitEthernet 10/100/1000

Software


Scientific Linux 3.04

ASIS                            
ATLAS
BLAS high perf lib by K.Goto    
Blacs
Boost
CERNLIB                         
CMT
Clhep
F90gl
F95
Fluka
Ftncheck
Garfield                        
Geant4                          
Glut
Glut-3.7.1
Gnuplot4
Grace
Intel C/C++ Compiler            
Intel Debugger                  
Intel Eclipse                   
Intel Fortran Compiler          
Intel JRockit JVM               
Intel MKL (Math Kernel Library) 
Kdiff3
Mathematica                     
Mercury
Mesa
Mpich
Nail
OpenDx
Pgplot
Plusfort
Ppower4
Root                            
Scalapack


- Openpbs 2.3.13
    4 code:
      small     max.cput =    1 H
      medium    max.cput =    8 H
      long      max.cput =   24 H
      verylong  max.cput =   72 H
    max_user_run         =    2
    max_group_run        =    6
    resources_max.file   = 2047 MB
    resources_max.vmem   = 2047 MB

- Mathematica 5
    Per la versione grafica si deve aggiungere
    fontserver.lnf.infn.it nei fontserver del
    server/emulatore X11 ed eseguire `mathematica`

- Geant4.6.2
    Prima di utilizzare le librerie Geant4 del
    Cern, eseguire `geant4.env.setup`, che
    impostera' le variabili d'environment.

- Aree di storage temporaneo disponibili:
    /scratch/nfs/<nomegruppo>/<nomeutente>   ($scratchnfs)
    /scratch/local/<nomegruppo>/<nomeutente> ($scratchlocal)
    /tmp (quota 30 MB)



 Top 
Comandi piu' usati di PBS

- qdel

Permette di cancellare da una coda un job precedentemente sottomesso. L'uso e':
[dmaselli@lxcalc4:~]> qdel <JobID>

- qstat

Permette di visualizzare informazioni sullo stato dei job sottomessi. Esempio:

[dmaselli@lxcalc4:~]> qstat
Job id           Name             User             Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
431.lxcalc1      test             dmaselli                0 E long
432.lxcalc1      test             dmaselli                0 R verylong
433.lxcalc1      test             dmaselli                0 R verylong
434.lxcalc1      test             dmaselli                0 R small
435.lxcalc1      test             dmaselli                0 R verylong
436.lxcalc1      test             dmaselli                0 R verylong
437.lxcalc1      test             dmaselli                0 Q verylong
438.lxcalc1      test             dmaselli                0 Q verylong
439.lxcalc1      test             dmaselli                0 Q verylong
Il campo S indica lo stato del job, e puo' essere
E - Executed: il job e' stato eseguito, e tra poco verra' rimosso dalla coda
R - Running: il job e' in esecuzione
Q - Queued: il job e' stato accodato, in attesa che lo scheduler lo ponga in esecuzione

Per avere informazioni piu' dettagliate sui job in coda:
[dmaselli@lxcalc4:~]> qstat -f
Job Id: 440.lxcalc1.lnf.infn.it
    Job_Name = test
    Job_Owner = dmaselli@lxcalc4.lnf.infn.it
    job_state = R
    queue = verylong
    server = lxcalc1.lnf.infn.it
    Checkpoint = u
    ctime = Mon Sep 13 13:21:28 2004
    Error_Path = lxcalc4.lnf.infn.it:/scratch/nfs/calcolo/dmaselli/test.err
    exec_host = lxcalc3/0
    Hold_Types = n
    Join_Path = n
    Keep_Files = n
    Mail_Points = abe
    mtime = Mon Sep 13 13:21:29 2004
    Output_Path = lxcalc4.lnf.infn.it:/scratch/nfs/calcolo/dmaselli/test.log
    Priority = 0
    qtime = Mon Sep 13 13:21:28 2004
    Rerunable = False
    Resource_List.cput = 72:00:00
    Resource_List.file = 2047mb
    Resource_List.nodect = 1
    Resource_List.nodes = Linux
    Resource_List.vmem = 512mb
    session_id = 14031
    Variable_List = PBS_O_HOME=/afs/lnf/user/d/dmaselli,
        PBS_O_LANG=en_US.iso885915,PBS_O_LOGNAME=dmaselli,
        PBS_O_PATH=.:/afs/lnf/user/d/dmaselli/bin:/usr/lnf/bin:/usr/afsws/bin:
        /usr/afsws/etc:/usr/kerberos/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/cus
        tom/openssh/bin:/usr/X11R6/bin:/usr/local/bin:/usr/sbin:/usr/local/bin/
        X11:/cern/pro/bin:/usr/sbin:/usr/lnf/root/bin,
        PBS_O_MAIL=/var/mail/dmaselli,PBS_O_SHELL=/bin/tcsh,
        PBS_O_HOST=lxcalc4.lnf.infn.it,
        PBS_O_WORKDIR=/scratch/nfs/calcolo/dmaselli,PBS_O_QUEUE=default
    comment = Job started on Mon Sep 13 at 13:21
    etime = Mon Sep 13 13:21:28 2004

Job Id: 441.lxcalc1.lnf.infn.it
    Job_Name = test
    Job_Owner = dmaselli@lxcalc4.lnf.infn.it
    job_state = R
    queue = verylong
    server = lxcalc1.lnf.infn.it
    Checkpoint = u
    ctime = Mon Sep 13 13:21:30 2004
    Error_Path = lxcalc4.lnf.infn.it:/scratch/nfs/calcolo/dmaselli/test.err
    exec_host = lxcalc2/0
    Hold_Types = n
    Join_Path = n
    Keep_Files = n
    Mail_Points = abe
    mtime = Mon Sep 13 13:21:30 2004
    Output_Path = lxcalc4.lnf.infn.it:/scratch/nfs/calcolo/dmaselli/test.log
    Priority = 0
    qtime = Mon Sep 13 13:21:30 2004
    Rerunable = False
    Resource_List.cput = 72:00:00
    Resource_List.file = 2047mb
    Resource_List.nodect = 1
    Resource_List.nodes = Linux
    Resource_List.vmem = 512mb
    session_id = 14049
    Variable_List = PBS_O_HOME=/afs/lnf/user/d/dmaselli,
        PBS_O_LANG=en_US.iso885915,PBS_O_LOGNAME=dmaselli,
        PBS_O_PATH=.:/afs/lnf/user/d/dmaselli/bin:/usr/lnf/bin:/usr/afsws/bin:
        /usr/afsws/etc:/usr/kerberos/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/cus
        tom/openssh/bin:/usr/X11R6/bin:/usr/local/bin:/usr/sbin:/usr/local/bin/
        X11:/cern/pro/bin:/usr/sbin:/usr/lnf/root/bin,
        PBS_O_MAIL=/var/mail/dmaselli,PBS_O_SHELL=/bin/tcsh,
        PBS_O_HOST=lxcalc4.lnf.infn.it,
        PBS_O_WORKDIR=/scratch/nfs/calcolo/dmaselli,PBS_O_QUEUE=default
    comment = Job started on Mon Sep 13 at 13:21
    etime = Mon Sep 13 13:21:30 2004



Tramite opportune opzioni, permette inoltre di visualizzare informazioni sulle code (-q e -Q) o sul server (-B). Esempi:

[dmaselli@lxcalc4:~]> qstat -Q
Queue            Max Tot Ena Str Que Run Hld Wat Trn Ext Type
---------------- --- --- --- --- --- --- --- --- --- --- ----------
verylong           6   0 yes yes   0   0   0   0   0   0 Execution
long               8   0 yes yes   0   0   0   0   0   0 Execution
medium            10   0 yes yes   0   0   0   0   0   0 Execution
small             14   0 yes yes   0   0   0   0   0   0 Execution
default            0   0 yes yes   0   0   0   0   0   0 Route

[dmaselli@lxcalc4:~]> qstat -B
Server           Max Tot Que Run Hld Wat Trn Ext Status
---------------- --- --- --- --- --- --- --- --- ----------
lxcalc1.lnf.infn   0   0   0   0   0   0   0   0 Active

- pbsnodes

Permette di visualizzare informazioni sullo stato dei nodi del cluster, utile soprattutto per l'amministratore di sistema. Esempio:

[dmaselli@lxcalc4:~]> pbsnodes -a
lxcalc1
     state = free
     np = 2
     properties = Linux,lxcalc1
     ntype = cluster

lxcalc2
     state = free
     np = 2
     properties = Linux,lxcalc2
     ntype = cluster

lxcalc3
     state = free
     np = 2
     properties = Linux,lxcalc3
     ntype = cluster

lxcalc4
     state = free
     np = 2
     properties = Linux,lxcalc4
     ntype = cluster

lxcalc5
     state = free
     np = 2
     properties = Linux,lxcalc5
     ntype = cluster

axcalc
     state = free
     np = 6
     properties = AIX,axcalc
     ntype = cluster


 Top 
Sottomettere un job a PBS

NOTA: I file di STDOUT e STDERR, i dati da elaborare ed eventulai eseguibili NON devono risiedere in aree AFS!

Per questo si deve mettere una COPIA dei file eseguibili e dei dati nelle aree di scratch NFS. ( /scratch/nfs/<nomegruppo>/<nomeutente> )


In generale e' possibile sottomettere una sequenza di istruzioni a PBS anche da riga di comando:
qsub -
<indicare i comandi>
premere CTRL-D per terminare l'immissione di comandi

Tuttavia quest'ultima procedura e' vivamente SCONSIGLIATA.


Di norma la sottomissione dei job a PBS avviene tramite il comando:
qsub <file.pbs>  [-l (Linux|AIX)]
dove <file.pbs> e' un job-script che contiene un elenco di direttive per qsub seguito dalle istruzioni vere e proprie del job.
L'opzione '-l <architettura>' e' facoltativa ed e' necessaria solo quando si vuole invare un job da axcalc alla farm linux e viceversa.
Per default il job verra' eseguito su una macchina di architettura uguale a quella dalla quale e' stato sottomesso.

- Come creare un job script per PBS -

La prima riga dello script, prima di ogni altra direttiva #PBS, deve essere #!/shell, dove shell e' il path completo ad una shell a scelta.
Ad esempio:
#!/bin/sh

Le direttive possono essere date fino a quando non si e' dato il primo comando. Ecco una descrizione rapida dei parametri piu' importanti che e' possibile settare (per un elenco completo, eseguire man qsub):

Per assegnare un nome al job:
#PBS -N <nome job>
Di default il job avra' lo stesso nome del file pbs.

Per assegnare un nome al file di errore:
#PBS -e <percorso>
Il percorso non e' assoluto, ma relativo alla working dir.
Se questo parametro non viene settato, il nome assegnato sara' quello standard che e' <nome del job>.e seguito dal numero identificativo del job.

Analogamente per assegnare un nome al file di output:
#PBS -o <percorso>
Se questo parametro non viene settato, il nome assegnato sara' quello standard che e' <nome del job>.o seguito da un numero identificativo del job.

Per eseguire il job in modalita' interattiva:
#PBS -I
Se viene selezionata quest'opzione, il job sara' eseguito in maniera interattiva, ovvero lo standard input, lo standard output e il flusso di errori saranno collegati attraverso qsub al terminale da cui e' stato sottoposto il job.

Per far trattenere al nodo esecutore il file di input o di output:
#PBS -k <argument>
La k sta per "keep". Stabilische se lo standard output o lo standard error debbano essere trattenuti dal nodo esecutore del job. Gli argomenti possibili sono e (solo standard error), o (solo standard output), eo (entrambi), oe (entrambi), n (nessuno dei due, e' il valore di default). I file vengono salvati con il nome standard.

Per indicare le risorse necessarie al job:
#PBS -l <resource_list>
Ad esempio per indicare quanto tempo di CPU e' necessario al job, lo script sara' del tipo:
#PBS -l  cput=01:00:00
E' possibile settare altri valori all'interno di uno stesso comando, separandoli con la virgola. Se una risorsa e' indicata senza che le sia indicato nessuno valore, e' settata ad infinito. Esempio:
#PBS -l cput

Per indicare se inviare un'email di notifica:
#PBS -m <mail_options>
Le possibili opzioni sono:
a - Un'email e' spedita se il job viene abortito
b - Un'email e' spedita quando il job entra in esecuzione
e - Un'email e' spedita quando il job termina l'esecuzione
n - Non viene inviata alcuna mail
L'opzione di default e' "a".

Per indicare a chi inviare le email di notifica:
#PBS -M <user_list>
Se vengono indicati piu' indirizzi email, essi devono essere separati da una virgola. Di default l'e-mail viene inviata al proprietario del job, ovvero colui che lo ha sottomesso.

Per indicare la shell da utilizzare:
#PBS -S <path_list>
Indica a PBS dove trovare la shell. Di norma puo' essere trovata nella directory /bin/sh.
Se non viene specificata, PBS utilizzare la shell utilizzata dall'utente nel nodo esecutore.

Per indicare il nome del proprietario del job:
#PBS -u <user_list>
Anche in questo caso il valore di default e' il nome dell'utente che ha lanciato qsub.

- E' importante specificare SEMPRE il PATH ASSOLUTO dei file di I/O e degli eseguibili -
(Es.: /scratch/nfs/calcolo/dmaselli/test.exe)

ESEMPIO:

Input file (short.pbs)
#!/bin/sh
#Ho appena definito la shell (e' una bash)

#PBS -S /bin/sh
#PBS -M dmaselli@lnf.infn.it
#PBS -m e
#PBS -l cput=01:01:00
#PBS -o risultato
#PBS -e errori

#commento

#Questo e' un commento, il prossimo invece e' un comando
echo ""

DATE=`date` #Attenzione ad usare gli apici giusti e a non mettere spazi!!! echo "$DATE" sleep 5 echo "Ci sono una serie di cose interessanti che ti interessera' sapere" echo "Questo job stato identificato come $PBS_JOBID e si chiama $PBS_JOBNAME" echo "e' stato inserito inizialmente nella coda $PBS_O_QUEUE" echo "ed e' stato eseguito sulla coda $PBS_QUEUE" echo "E' stato sottoposto dalla macchina: $PBS_O_HOST" echo "E' stato eseguito sulla macchina: `hostname`" date echo "" #PBS -o risultato         Questa direttiva viene ignorata
Output file 1
 Mon Mar 24 16:46:40 CET 2003
 Ci sono una serie di cose interessanti che ti interessera' sapere
 Questo job stato identificato come 56.lxcalc3.lnf.infn.it e si chiama short.pbs
 e' stato inserito inizialmente nella coda default
 ed e' stato eseguito sulla coda long
 E' stato sottoposto dalla macchina: lxcalc5
 E' stato eseguito sulla macchina: lxcalc3
 Mon Mar 24 16:46:45 CET 2003
Output file 2
 Mon Mar 24 16:48:07 CET 2003
 Ci sono una serie di cose interessanti che ti interessera' sapere
 Questo job stato identificato come 57.lxcalc3.lnf.infn.it e si chiama short.pbs
 e' stato inserito inizialmente nella coda default
 ed e' stato eseguito sulla coda long
 E' stato sottoposto dalla macchina: lxcalc4
 E' stato eseguito sulla macchina: lxcalc2
 Mon Mar 24 16:48:12 CET 2003
 Top 

Job Paralleli MPI in PBS

MPI e' supportato sulla farm linux del calcolo attraverso MPICH. Potete trovare i compilatori, le librerie e gli include files in /usr/lnf/farmsw/mpich/

Nel caso in cui si sottometta un job MPI attraverso PBS, il comando da eseguire all'interno dello script da passare a qsub e' mpiexec e NON mpirun (o mpich.mpirun).

Per impostare il numero di nodi e di cpu-per-nodo si deve invocare qsub con dei parametri, ad esempio volendo runnare un job su 3 macchine ognuna con 2 cpu:

qsub -l nodes=3:Linux:ppn=2 <script-pbs>
Queste direttive non devono essere impostate all'interno dello script PBS.

Parallel MPI Jobs in PBS

MPI is supported on our linux farm via MPICH. You can find compilers, libraries and include files in /usr/lnf/farmsw/mpich/

When you are submitting MPI jobs in PBS you have to use mpiexec into the PBS script, NOT mpirun (or mpich.mpirun).

To specify number of nodes and cpu-per-node you have to add them in qsub command line. For example to run a job on 3 nodes with 2 cpu-per-node:

qsub -l nodes=3:Linux:ppn=2 <script-pbs>
You must not put these directives into the PBS script.

Sample PBS Script:

#!/bin/sh
### Job name
#PBS -N testing
### Declare job non-rerunable
#PBS -r n
### Output files
#PBS -e /scratch/nfs/calcolo/dmaselli/MPI/test.err
#PBS -o /scratch/nfs/calcolo/dmaselli/MPI/test.log
### Mail to user
#PBS -m ae
#
### This job's working directory
echo Working directory is $PBS_O_WORKDIR
cd $PBS_O_WORKDIR    
#
echo Running on host `hostname`
echo Time is `date`
echo Directory is `pwd`
echo This jobs runs on the following processors:
echo `cat $PBS_NODEFILE`
### Define number of processors
NPROCS=`wc -l < $PBS_NODEFILE`
echo This job has allocated $NPROCS nodes
#
### Run the parallel MPI executable
mpiexec /scratch/nfs/calcolo/dmaselli/MPI/mpi.exe 
   - Top - 

Si ringrazia Claudio Caraffi per la guida di PBS tratta da: http://www.ce.unipr.it/~caraffi/Open_PBS.html

Author:      Dael Maselli
Created on:   13-Sep-2004
Last update:  31-Oct-2005