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
- klaster
- zadania
oraz dwa polecenia dodatkowe (dotyczące wizualizacji zajętości klastra):
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:
- zadanie będzie miało nazwę test-1
- zadanie będzie uruchomione w kolejce batch
- do wykonania będą potrzebne trzy węzły, na każdym z nich będą zajęte 4 rdzenie
- zadanie będzie się wykonywało maksymalnie przez 2 godziny
- strunień błędów będzie dołączony do strumienia outputu
- 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:
- węzeł n1 zajęty jest przez jedno zadanie wykorzystujące wszystkie rdzenie
- węzeł n5 zajęty jest przez dwa zadania, każdy z nich wykorzystuje 16 rdzeni
- węzeł n6 jest wolny
- 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,
- 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:
- użytkownik karolamik ma uruchomione jedno zadanie zajmujące 48 rdzeni na węźle n1,
- użytkownik tecumseh ma uruchomione jedno zadanie wykorzystujęce 1 rdzeń na węźle n10,
- 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