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
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)
– 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:
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
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.
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