MONITOROWANIE ZADANIA
Stan wykonania
Aby sprawdzić, na jakim etapie znajduje się nasze zadanie, należy użyć polecenia qstat. Jest to polecenie menedżera zadań. Najbardziej popularne wywołania tego polecenia to:
- qstat pokazuje stan wszystkich zadań danego użytkownika w formie skróconej,
- qstat -f <identyfikator zadania> pokazuje szczegółowe informacje o wybranym zadaniu.
Przykładowy wynik pierwszego polecenia widzimy poniżej:
[tester@headnode ~]$ qstat Job id Name User Time Use S Queue ------------------------ ---------------- --------------- -------- - ----- 293.master1 listing tester 00:00:00 C batch 294.master1 zadanie-wait1 tester 00:02:13 R batch 295.master1 zadanie-wait2 tester 0 R batch 296.master1 zadanie4 tester 0 R batch 297.master1 zadanie5 tester 0 Q batch
Znaczenie kolumn tabeli jest następujące:
- Job id – unikalny identyfikator zadania, tworzony na podstawie numeru porządkowego i nazwy hosta, z którego wywołano zadanie,
- Name – nazwa nadane zadaniu przez użytkownika,
- User – nazwa użytkownika, który zlecił zadanie,
- Time Use – ilość wykorzystanego czasu procesora,
- S – stan zadania (Q-czeka w kolejce, R-jest uruchomione, C-zakończone),
- Queue – to nazwa kolejki, do której trafiło zadanie.
Widzimy zatem, że powyższy wydruk informuje nas o następujących zadaniach:
- listing – nie zajęło czasu procesora i zostało zakończone,
- zadanie-wait – zajęło 2 minuty i jest wykonywane,
- zadanie-wait2 – uruchomione,
- zadanie4 – uruchomione,
- zadanie5 – oczekuje na zwolnienie zasobów.
Szczegółowe informacje o wybranym zadaniu zawierają znacznie więcej parametrów
[tester@headnode ~]$ qstat -f 294.master1.kevlar Job Id: 294.master1.kevlar Job_Name = zadanie-wait1 Job_Owner = tester@headnode.kevlar resources_used.cput = 00:02:13 resources_used.mem = 4020kb resources_used.vmem = 200164kb resources_used.walltime = 00:02:54 job_state = R queue = batch server = master1.kevlar Checkpoint = u ctime = Sat Jan 21 14:00:11 2012 Error_Path = headnode.kevlar:/home/tester/zadanie-wait1.e294 exec_host = n13/1+n13/0+n12/1+n12/0+n11/1+n11/0+n10/1+n10/0+n9/1+n9/0+n8/1 +n8/0+n7/1+n7/0+n6/1+n6/0+n5/1+n5/0+n4/1+n4/0+n3/1+n3/0+n2/1+n2/0+n1/1 +n1/0 Hold_Types = n Join_Path = n Keep_Files = n Mail_Points = a mtime = Sat Jan 21 14:00:32 2012 Output_Path = headnode.kevlar:/home/tester/zadanie-wait1.o294 Priority = 0 qtime = Sat Jan 21 14:00:11 2012 Rerunable = True Resource_List.nodect = 13 Resource_List.nodes = 13:ppn=2 Resource_List.walltime = 01:00:00 session_id = 16036 Variable_List = PBS_O_QUEUE=batch,PBS_O_HOME=/home/tester, PBS_O_LANG=en_US.UTF-8,PBS_O_LOGNAME=tester, PBS_O_PATH=/usr/mpi/gcc/openmpi-1.4.3/bin:/usr/kerberos/bin:/opt/inte l/ics/2011.0.013/bin:/opt/intel/itac/8.0.1.009/bin:/opt/intel/impi/4.0 .1.007/intel64/bin:/opt/intel/composerxe-2011.0.084/bin/intel64:/opt/i ntel/composerxe-2011.0.084/mpirt/bin/intel64:/opt/intel/composerxe-201 1.0.084/bin/intel64:/opt/intel/composerxe-2011.0.084/mpirt/bin/intel64 :/usr/local/bin:/bin:/usr/bin:/home/tester/bin, PBS_O_MAIL=/var/spool/mail/tester,PBS_O_SHELL=/bin/bash, PBS_O_HOST=headnode.kevlar,PBS_SERVER=master1.kevlar, PBS_O_WORKDIR=/home/tester comment = Job started on Sat Jan 21 at 14:00 etime = Sat Jan 21 14:00:11 2012 submit_args = -N zadanie-wait1 -l nodes=13:ppn=2 ./skrypt-wait.sh start_time = Sat Jan 21 14:00:11 2012 Walltime.Remaining = 3531 start_count = 1 fault_tolerant = False submit_host = headnode.kevlar init_work_dir = /home/tester
Najważniejsze spośród nich (poza opisanymi powyżej) to:
- resources_used.cput - zużyty czas działania procesora,
- resources_used.mem - ilość użytej pamięci,
- resources_used.walltime - całkowity czasy wykonywania zadania,
- Error_Path i Output_Path - ścieżki do plików z rezultatami wykonania zadanie (patrz niżej),
- exec_host - nazwy węzłów, na których przebiegało wykonanie (tutaj po dwa rdzenie na każdym z węzłów n1-n13),
- submit_args - paramatry, z którymi zlecono zadanie,
- start_time - czas rozpoczęcia wykonywania zadania,
- init_work_dir - katalog roboczy zadania.
Usuwanie zadania
W każdej chwili możemy usunąć dowolne swoje zadanie - niezależnie od jego bieżącego stanu. Służy do tego polecenie: qdel <identyfikator zadania>.
W przypadku zadania oczekującego, zostanie ono usunięte z kolejki, zadanie w toku zostanie zatrzymane. W obu tych przypadkach zadanie przyjmie stan C - zakończone.
Dane wyjściowe
Zadanie może przekazywać rezultaty swego działania w różny sposób. Jeśli robi to poprzez pliki, to sytuacja jest prosta - katalogi domowe użytkowników na wszystkich węzłach są współdzielone, więc po zakończeniu działania programu można zajrzeć do katalogu roboczego i obejrzeć wyniki tak, jakby się to odbyło na standardowym komputerze PC. Specjalnego omówienia wymaga natomiast kwestia danych przekazywanych na standardowe wyjście i wyjście błędów. Dane te w normalnej sytuacji pokazywane są na ekranie konsoli, jednak w przypadku menedżera zadań program może trafić do wykonania, gdy użytkownika nie ma przy konsoli, np. w nocy.
Z tego powodu do każdego zadania tworzone są dodatkowe pliki, zawierające dane wyjściowe, w katalogu roboczym zadania o nazwach według następującego schematu:
- <nazwa zadania>.o<numer zadania> - standardowe wyjście programu,
- <nazwa zadania>.e<numer zadania> - standardowe wyjście błędów programu.
We wcześniejszym przykładzie dla zadania o nazwie zadanie-wait1 i identyfikatorze 294.master1 zostały utworzone pliki zadanie-wait1.o294 i zadanie-wait1.e294. Oczywiście nie dotyczy to zadań uruchamianych w trybie interaktywnym (qsub -I), gdzie standardowe wyjścia pojawiają się bezpośrednio na ekranie.
Powrót na początek strony