Klaster COK - system kolejkujący

Na klastrze zainstalowany jest system kolejkujący PBS Torque (wersja 2.5.8) oraz scheduler Maui (wersja 3.3.1). Ważniejsze polecenia dotyczące systemu kolejkującego:

  • qsub
  • qdel
  • qstat
  • pbsnodes
  • oraz dwa polecenia dodatkowe (dotyczące wizualizacji zajętości klastra):

  • klaster
  • zadania

qsub

polecenie qsub wysyła zadanie do systemu kolejkującego (np. qsub skrypt), które otrzymuje unikatowy numer (tzw. job-id).
Przykładowa postać pliku skrypt:
#PBS -N nazwa
#PBS -q kolejka
#PBS -l zasoby
#PBS -j oe
zadanie

Wszystkie informacje przekazywane do systemu kolejkującego w skrypcie muszą zacząć się od znaków #PBS, po których można użyć różnych opcji:

  • -N definiuje nazwę zadania; brak tej opcji powoduje, że nazwą zadania jest początkowy cią znaków ze skryptu,
  • -q definiuje kolejkę, w ramach której zadanie ma być wykonane; brak tej opcji powoduje, że zadanie będzie uruchomione w ramach kolejki domyślnej,
  • -l definiuje użycie różnych zasobów:
    • nodes, np. nodes=4 oznacza użycie 4 węzłów, na których będzie wykorzystane po 1 rdzeniu, nodes=2:ppn=5 oznacza użycie dwóch węzłów, na których będzie wykorzystanych po 5 rdzeni,
    • walltime, np walltime=2:15:40 oznacza wykonanie zadania maksymalnie w czasie rzeczywistym 2h 15m 40s,
    • mem, np mem=320 kb oznacza użycie pamięci wielkości 320kB,
  • -j powoduje połączenie strumienia outputu i błędów w jeden plik o standardowej nazwie: nazwa.ojob-id; brak tej opcji spowoduje utworzenie dwóch plików: nazwa.ojob-id oraz nazwa.ejob-id,
  • o pozostałych opcjach można dowiedzieć się z pomocy do polecenia (man qsub).

Poniższy przykład skryptu wysyłanego do kolejki:
#PBS -N test-1
#PBS -q batch
#PBS -l nodes=3:ppn=4, walltime=2:00:00
#PBS -j oe
#PBS -o test.o
zadanie

definiuje następujące warunki zadania:

  1. zadanie będzie miało nazwę test-1
  2. zadanie będzie uruchomione w kolejce batch
  3. do wykonania będą potrzebne trzy węzły, na każdym z nich będą zajęte 4 rdzenie
  4. zadanie będzie się wykonywało maksymalnie przez 2 godziny
  5. strunień błędów będzie dołączony do strumienia outputu
  6. wynik działania skryptu będzie zapisany w pliku test.o

qdel

polecenie qdel job-id powoduje usunięcie z kolejki zadania o wskazanym numerze

qstat

polecenie pokazuje status wszystkich zadań znajdujących się w systemie kolejkującym. Jako nieobowiązkowy parametr można podać numer zadania (tzw. job-id) lub nazwę kolejki - wówczas będzie pokazany status tylko wskazanych zadań, lub znajdujacych się we wskazanej kolejce:
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
88093.master               Ce3              tecumseh        145:08:2 R single
88182.master               mod1c_md4        karolamik       1452:18: R batch
88199.master               tb.pbs           mzielin         187:04:3 R batch
88200.master               tb.pbs           mzielin         187:07:4 R batch
88201.master               tb.pbs           mzielin         187:08:1 R batch
88202.master               tb.pbs           mzielin         186:59:4 R batch
88203.master               tb.pbs           mzielin         187:02:1 R batch
88204.master               tb.pbs           mzielin         187:10:8 R batch
88205.master               tb.pbs           mzielin         186:58:5 R batch
88206.master               tb.pbs           mzielin         186:59:6 R batch
88207.master               tb.pbs           mzielin         187:04:3 R batch
88209.master               tb.pbs           mzielin         187:01:0 R batch
88210.master               tb.pbs           mzielin         186:59:9 R batch

pbsnodes

polecenie pokazuje status węzłów:
n1
     state = job-exclusive,busy
     np = 48
     properties = dell
     ntype = cluster
     jobs = 0/88182.master, 1/88182.master, 2/88182.master, 3/88182.master, 4/88182.master, 5/88182.master, 6/88182.master, 7/88182.master, 8/88182.master, 9/88182.master, 10/88182.master, 11/88182.master, 12/88182.master, 13/88182.master, 14/88182.master, 15/88182.master, 16/88182.master, 17/88182.master, 18/88182.master, 19/88182.master, 20/88182.master, 21/88182.master, 22/88182.master, 23/88182.master, 24/88182.master, 25/88182.master, 26/88182.master, 27/88182.master, 28/88182.master, 29/88182.master, 30/88182.master, 31/88182.master, 32/88182.master, 33/88182.master, 34/88182.master, 35/88182.master, 36/88182.master, 37/88182.master, 38/88182.master, 39/88182.master, 40/88182.master, 41/88182.master, 42/88182.master, 43/88182.master, 44/88182.master, 45/88182.master, 46/88182.master, 47/88182.master
     status = rectime=1446026760, varattr=, jobs=88182.master, state=busy, netload=12814551583, gres=, loadave=29.06, ncpus=48, physmem=198088144kb, availmem=196312616kb, totmem=198088144kb, idletime=6280885, nusers=1, nsessions=1, sessions=10168, uname=Linux n1 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64,opsys=linux
     gpus = 0

...
n5
     state = busy
     np = 48
     properties = dell
     ntype = cluster
     jobs = 0/88209.master, 1/88209.master, 2/88209.master, 3/88209.master, 4/88209.master, 5/88209.master, 6/88209.master, 7/88209.master, 8/88209.master, 9/88209.master, 10/88209.master, 11/88209.master, 12/88209.master, 13/88209.master, 14/88209.master, 15/88209.master, 16/88210.master, 17/88210.master, 18/88210.master, 19/88210.master, 20/88210.master, 21/88210.master, 22/88210.master, 23/88210.master, 24/88210.master, 25/88210.master, 26/88210.master, 27/88210.master, 28/88210.master, 29/88210.master, 30/88210.master, 31/88210.master
     status = rectime=1446026758, varattr=, jobs=88209.master, state=busy, netload=13549296340, gres=, loadave=32.08, ncpus=48,physmem=198088144kb, availmem=116519628kb, totmem=198088144kb, idletime=6280923, nusers=1, nsessions=2, sessions=10416 10421, uname=Linux n5 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64,opsys=linux
gpus = 0

n6
     state = free
     np = 48
     properties = dell
     ntype = cluster
     status = rectime=1446026751, varattr=, jobs=, state=free, netload=4343365038, gres=, loadave=0.02, ncpus=48, physmem=198088144kb, availmem=197636740kb, totmem=198088144kb, idletime=1782512, nusers=0, nsessions=? 0, sessions=? 0, uname=Linux n6 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64,opsys=linux
     gpus = 0

n7
     state = down
     np = 48
     properties = dell
     ntype = cluster
     status = rectime=1446026755, varattr=, jobs=, state=down, netload=4343365038, gres=, loadave=0.02, ncpus=48, physmem=198088144kb, availmem=197636740kb, totmem=198088144kb, idletime=1782512, nusers=0, nsessions=? 0, sessions=? 0, uname=Linux n6 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64,opsys=linux
     gpus = 0

...
n11
     state = offline
     np = 48
     properties = fast
     ntype = cluster
     status = rectime=1446031059, varattr=, jobs=, state=free, netload=2955488077, gres=, loadave=0.04, ncpus=48, physmem=264279116kb, availmem=263563112kb, totmem=264279116kb, idletime=95718, nusers=0, nsessions=? 0, sessions=? 0, uname=Linux n11 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64,opsys=linux
     gpus = 0

...

W powyższym przykładzie:

  1. węzeł n1 zajęty jest przez jedno zadanie wykorzystujące wszystkie rdzenie
  2. węzeł n5 zajęty jest przez dwa zadania, każdy z nich wykorzystuje 16 rdzeni
  3. węzeł n6 jest wolny
  4. węzeł n7 jest wyłączony (down); stan taki występuje, gdy nie można się skomunikować z węzłem z powodu wyłączenia lub zawieszenia,
  5. węzeł n11 jest wyłączony (offline) z systemu kolejkującego

klaster

polecenie korzysta z wyniku działania polecenia pbsnodes -a i wyświetla informacje w graficzny sposób, pokazując zajęte przez zadania rdzenie, np.:

                                core
node |0123456789|0123456789|0123456789|0123456789|01234567|   jobs
-----+----------+----------+----------+----------+--------|----------
  n1 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|88182(48)
  n2 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|88199(16)88200(16)88201(16)
  n3 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|88202(16)88203(16)88204(16)
  n4 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|88205(16)88206(16)88207(16)
  n5 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RR        |        |88209(16)88210(16)
  n6 |          |          |          |          |        |
  n7 |DDDDDDDDDD|DDDDDDDDDD|DDDDDDDDDD|DDDDDDDDDD|DDDDDDDD|
  n8 |          |          |          |          |        |
  n9 |          |          |          |          |        |
 n10 |R         |          |          |          |        |88093(1)
 n11 |XXXXXXXXXX|XXXXXXXXXX|XXXXXXXXXX|XXXXXXXXXX|XXXXXXXX|
 n12 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|
     |RRRRRRRRRR|RRRRRR----|----------|----------|--------|88215(64)
 n13 |RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRRRR|RRRRRRRR|
     |RRRRRRRRRR|RRRRRR----|----------|----------|--------|88215(64)
 n14 |        --|----------|----------|----------|--------|

Powyższy wynik pokazuje, że:

  • węzeł n1 jest zajęty przez zadanie 88182 wykorzystujące 48 rdzeni,
  • węzły n2, n3 i n4 są zajęte łącznie przez dziewięć zadań (na każdym węźle trzy zadania, każde po 16 rdzeni),
  • węzeł n5 jest zajęty przez dwa zadania (każdy po 16 rdzeni),
  • węzeł n7 jest wyłączony (tzw. down); stan taki występuje, gdy nie można się skomunikować z węzłem z powodu wyłączenia lub zawieszenia,
  • węzeł n10 jest zajęty przez jedno zadanie (1 rdzeń),
  • węzeł n11 jest wyłączony z systemu kolejkującego (tzw. offline)
  • węzły n12 i n13 zajęte są przez jedno zadanie wykorzystujące łącznie na każdym węźle 64 rdzeni,
  • węzły n6, n8, n9 i n14 nie są wykorzystywane.

zadania

polecenie korzysta z wyniku działania polecenia qstat -f i wyświetla informacje:

  • dotyczące zajęcia rdzeni na wszystkich węzłach przez wszystkie zadania łącznie (polecenie zadania):

             nodes ->  |  1  2  3  4  5  6  7  8  9 10 11 12 13 14|
           jobs      S |            number of cores               |
-----------------------+------------------------------------------+-----------
Total:                 |                                          |
  14                 R | 48 48 48 48 32  0  0  0  0  1  0 64 64  0|

wynik pokazuje, że w systemie jest wykonywanych 14 zadań (status: R), które globalnie zajmują odpowiednie ilości rdzeni na poszczególnych węzłach

  • dotyczące pogrupowania zadań na użytkowników z określeniem ilości, statusu oraz zajętości rdzeni na węzłach (polecenie zadania -u):

             nodes ->  |  1  2  3  4  5  6  7  8  9 10 11 12 13 14|
number     user      S |            number of cores               |
-----------------------+------------------------------------------+-----------
   1   karolamik     R | 48  0  0  0  0  0  0  0  0  0  0  0  0  0|
   1   tecumseh      R |  0  0  0  0  0  0  0  0  0  1  0  0  0  0|
  12   mzielin       R |  0 48 48 48 32  0  0  0  0  0  0 64 64  0|
-----------------------+------------------------------------------+-----------
Total:                 |                                          |
  14                 R | 48 48 48 48 32  0  0  0  0  1  0 64 64  0|

wynik pokazuje, że:

  1. użytkownik karolamik ma uruchomione jedno zadanie zajmujące 48 rdzeni na węźle n1,
  2. użytkownik tecumseh ma uruchomione jedno zadanie wykorzystujęce 1 rdzeń na węźle n10,
  3. użytkownik mzielin ma uruchomione 12 zadań wykorzystujących określone ilości rdzeni na węzłach n2, n3, n4, n5, n12 i n13
  • dotyczące zajętości rdzeni przez poszczególne zadania (polecenie zadania -u):

             nodes ->  |  1  2  3  4  5  6  7  8  9 10 11 12 13 14|
  job      user      S |            number of cores               |    since
-----------------------+------------------------------------------+-----------
 88093 tecumseh      R |  0  0  0  0  0  0  0  0  0  1  0  0  0  0| 22.10.2015
 88182 karolamik     R | 48  0  0  0  0  0  0  0  0  0  0  0  0  0| 26.10.2015
 88199 mzielin       R |  0 16  0  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88200 mzielin       R |  0 16  0  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88201 mzielin       R |  0 16  0  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88202 mzielin       R |  0  0 16  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88203 mzielin       R |  0  0 16  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88204 mzielin       R |  0  0 16  0  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88205 mzielin       R |  0  0  0 16  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88206 mzielin       R |  0  0  0 16  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88207 mzielin       R |  0  0  0 16  0  0  0  0  0  0  0  0  0  0| 27.10.2015
 88209 mzielin       R |  0  0  0  0 16  0  0  0  0  0  0  0  0  0| 27.10.2015
 88210 mzielin       R |  0  0  0  0 16  0  0  0  0  0  0  0  0  0| 27.10.2015
 88215 mzielin       R |  0  0  0  0  0  0  0  0  0  0  0 64 64  0| 27.10.2015
-----------------------+------------------------------------------+-----------
Total:                 |                                          |
  14                 R | 48 48 48 48 32  0  0  0  0  1  0 64 64  0|

wynik pokazuje, jakie zadania zajmują jakie węzły (i ile rdzeni) oraz kiedy zostały uruchomione