Das Queueing-System

Einführung

Das Abacus4QueueingSystem, das auf Abacus4 eingesetzt wird, ist LoadLeveler von IBM. Ein Programm wird als Job an eine Warteschlange geschickt und dann von LoadLeveler gestartet, wenn genug Ressourcen frei werden. Auf abacus4 gibt es mehrere Warteschlangen, die bei Loadleveler classes heißen. Die Klasse wird in der Jobsteuerungsdatei angegeben (siehe unten). Die Ressourcen werden durch den Mechanismus des fairshare scheduling auf die Nutzer verteilt. Zwischenschritte einer Rechnung können durch die Anwendung von Checkpointing gespeichert werden.

Starten von Jobs

Die meisten Jobs werdem mit dem Befehl llsubmit an das Batch-System geschickt.

Die einzige Ausnamhe bilden Jobs, die das Computerchemie-Software GAUSSIAN verwenden. Sie werden mit dem Kommando subg03 gestartet. Weitere Informationen dazu finden Sie hier. Zur Steuerung eines Batch-Jobs wird eine Skriptdatei erstellt, die alle Steuerungsinformationen für das System enthält:
 
    #!/usr/bin/tcsh
    # @ job_type = serial
    # @ arguments = 
    # @ input = 
    # @ output = /work/$(user)/ll$(jobid).stout
    # @ error = /work/$(user)/ll$(jobid).sterr
    # @ initialdir = /work/$(user)
    # @ notify_user = MEINE_E-MAIL@zedat.fu-berlin.de
    # @ class = medium
    # @ shell = /bin/tcsh
    # @ step_name = step1
    # @ notification = complete
    # @ checkpoint = yes
    # @ ckpt_dir = /scratch/$(user)/CPR
    # @ node_usage = shared
    # @ large_page = N
    # @ bulkxfer = no
    # @ smt = as_is
    # @ resources = ConsumableCpus(1) ConsumableMemory(1024 mb)
    # @ queue
    cd /scratch/$USER
    /work/$USER/my_prg  < my_input > my_output

Als Shell kann man auch ksh oder perl in dieser Datei verwenden. Der Parser einer Shell ingnoriert alle Zeilen, die mit # @ beginnen, während der Loadleveler alle anderen Zeilen ignoriert. Bitte geben Sie Ihren User-Namen in der Zeile notify_user explizit an, $(user)@zedat.fu-berlin.de funktioniert nicht. Die Parameter ConsumableCpus und ConsumableMemory können bei Bedarf auch höher gesetzt werden.

Nutzer paralleler Programme gehen wie folgt vor (z.B. für 4 Prozesse):
   #!/usr/bin/tcsh
   # @ job_type = parallel
   # @ arguments = $(jobid)
   # @ output = /work/$(user)/ll$(jobid).stout
   # @ error = /work/$(user)/ll$(jobid).sterr
   # @ initialdir = /work/$(user)/
   # @ notify_user = MEINE_E-MAIL@zedat.fu-berlin.de
   # @ class = medium
   # @ shell = /bin/tcsh
   # @ notification = complete
   # @ checkpoint = yes
   # @ ckpt_dir = /scratch/$(user)/CPR
   # @ node = 1
   # @ tasks_per_node = 4
   # @ node_usage = shared
   # @ network.mpi = sn_all,,us
   # @ smt = as_is
   # @ resources = ConsumableCpus(1) ConsumableMemory(1024 mb)
   # @ environment = MEMORY_AFFINITY=MCM; MP_DEVTYPE=ib; \
   #                 MP_SHARED_MEMORY=yes; MP_WAIT_MODE=poll; \
   #                 MP_SINGLE_THREAD=yes; MP_TASK_AFFINITY=MCM
   # @ queue
   cd /scratch/$USER
   cp $LOADL_HOSTFILE hostfile.$1
   setenv MYPROCS `wc -l hostfile.$1`
   unsetenv LOADLBATCH
   
   poe /work/$USER/my_mpi_prg -procs $MYPROCS -hostfile hostfile.$1
   rm hostfile.$1

Beenden von Jobs

Um einen Job zu killen, verwenden Sie llcancel, z.B.
   llcancel a41.12345.0

Beobachtung von Jobs

Sie können Ihre Jobs, die von diesen Jobs verbrauchte CPU-Zeit und die belegten Resourcen (memory, disk space) mit llq oder bstat beobachten.

Checkpointing

Jobs, die aus verschiedenen Gründen scheitern, können unter Umständen von einem sogenannten checkpoint aus neu gestartet werden. Mehr Informationen dazu finden Sie hier.