Monitorowanie wydajności wykorzystania zasobów przez zadania

Z KdmWiki
Przejdź do nawigacji Przejdź do wyszukiwania

< Podręcznik użytkownika KDM < System kolejkowy < Monitorowanie wydajności wykorzystania zasobów przez zadania

Aby efektywnie wykorzystywać zasoby obliczeniowe WCSS należy sprawdzać czy pamięć RAM alokowana dla zadania jest przez nie wykorzystywana, a zadania zlecone na wiele rdzeni (lub węzłów) rzeczywiście wykonują się równolegle. Użytkownicy (w szczególności nowi) powinni monitorować swoje zadania, by upewnić się, że pamięć i procesory zarezerwowane dla zadania są przez nie odpowiednio wykorzystywane.

System kolejkowy PBSPro oferuje narzędzia, dzięki którym można monitorować wykorzystanie zasobów przez zadania (uruchomione lub historyczne).

Monitorowanie wykorzystania zasobów: uruchomione zadania

W pierwszej kolejności należy użyć komendy

> qstat -u $USER 

Polecenie to zwróci listę wszystkich zadań użytkownika znajdujących się w kolejce. Lista powinna wyglądać podobnie do poniższej:

1000.achille user_1   short168 test_1  130814   1   2  2000mb  54:00 R 22:47
2000.achille user_1   short168 test_2  37796    1  12    43gb 104:00 R 22:47
3000.achille user_1   short168 test_3  97915    1   8    23gb  54:00 R 22:47
4000.achille user_1   short168 test_4  37437    1   1  4000mb  54:00 R 22:48

Liczba znajdująca się w pierwszej kolumnie każdego wiersza jest identyfikatorem przypisanym do zadania przez system kolejkowy PBS.

Aby uzyskać więcej informacji na temat konkretnego zadania należy skorzystać z polecenia:

> qstat -f identyfikator_zadania

Na przykład, aby wyświetlić szczegółowe informacje na temat pierwszego zadania z powyższej listy, należy użyć komendy:

> qstat -f 1000

Polecenie to zwraca wiele informacji, z których najistotniejsze (w kontekście wykorzystania zarobów przez zadanie) można uzyskać wyszukując w strumieniu danych odpowiednie linie, np.:

> qstat -f identyfikator_zadania | grep -e resources_used | grep -e .cpupercent -e .cput -e ncpus -e .mem -e .walltime -e npcpus

Dane uzyskane za pomocą powyższej komendy przedstawiają informacje na temat wykorzystania przez zadanie: procesora (etykieta cpupercent), czasu CPU (etykieta cput), pamięci RAM (etykieta mem), czasu obliczeniowego (etykieta walltime), np.:

> qstat -f 1000 | grep -e resources_used | grep -e .cpupercent -e .cput -e ncpus -e .mem -e .walltime -e npcpus

resources_used.cpupercent= 95
resources_used.cput =00:46:18
resources_used.mem =59792kb
resources_used.ncpus = 2
resources_used.vmem =59792kb
resources_used.walltime= 00:48:40

Aby sprawdzić jakie zasoby zostały zaalokowane dla zadania należy użyć polecenia:

> qstat -f 1000 | grep -e Resource_List | grep -e :mem  -e walltime
 
 Resource_List.select = 1:ncpus=2:mem=2000MB
 Resource_List.walltime = 20:00:00

Monitorowanie wykorzystania zasobów: zadania historyczne

Aby uzyskać informację na temat wykorzystania zasobów przez zadanie zakończone w ciągu ostatnich 48-godzin należy użyć komendy:

> qstat -fx identyfikator_zadania | grep -e resources_used | grep -e .cpupercent -e .cput -e ncpus -e .mem -e .walltime -e npcpus

W przypadku zadań zakończonych wcześniej niż w ciągu ostatnich 48h można skorzystać z polecenia:

> tracejob -n liczba_dni_do_sprawdzenia identyfikator_zadania | egrep -o -e resources_used.cput=[0-9]+ -e resources_used.ncpus=[0-9]+ 
 -e resources_used.mem=[0-9]+[a-z]+ -e resources_used.walltime=[0-9]+

Za parametr liczba_dni_do_sprawdzenia należy podać liczbę dni, dla których mają zostać sprawdzone informacje o zadaniu.

Wykorzystanie pamięci

Etykieta resources_used.mem wskazuje maksymalną ilość pamięci RAM (w kilobajtach) wykorzystaną przez zadanie obliczeniowe, natomiast etykieta Resource_List.select wyświetla informacje o pamięci zaalokowanej dla zadania.

Przykład: zadanie 1000.achilles wykorzystało maksymalnie ok. 58 MB pamięci, podczas gdy ilość pamięci zarezerwowanej dla zadania wynosi 2000 MB. W tym przypadku pamięć zarezerwowana dla zadania została przeszacowana kilkudziesięciokrotnie.

Wykorzystanie czasu obliczeniowego

Etykieta "resources_used.walltime" wskazuje ilość czasu obliczeniowego wykorzystanego przez zadanie, natomiast etykieta "Resource_List.walltime" wyświetla informacje o liczbie godzin obliczeniowych zarezerwowanych dla zadania.

Przykład: zadanie 1000.achilles wykonywało się przez 48 min. i 40 s , natomiast dla zadania zarezerwowanych zostało 20 godzin obliczeniowych.

Wykorzystanie procesora: Jaka jest skalowalność mojego programu?

Skalowalność aplikacji można oszacować eksperymentalnie. Jeśli to możliwe należy w taki sposób dobrać zestaw danych wejściowych, aby zadanie na jednym procesorze liczyło się co najmniej kilkadziesiąt minut, ale nie dłużej niż 10 godzin. Następnie zadanie to należy uruchomić na 2,4 oraz 8 procesorach i sprawdzać czas wykonania i stopień przyspieszenia obliczeń.

Informacje na temat wykorzystania procesora przez zadanie można uzyskać z etykiet resources_used.cpupercent, resources_used.cput, resources_used.walltime.

W przypadku zadań idealnie zrównoleglonych, czas CPU powinien być równy iloczynowi czasu obliczeniowego oraz liczby procesorów wykorzystywanych przez zadanie, tj.: cput = ncpus x walltime

W rzeczywistości wartość cput jest zawsze mniejsza od iloczynu liczby procesorów i walltime'u - w przypadku wydajnie wykonujących się zadań nie powinna być jednak dużo mniejsza.

Przykład: wartość cput dla zadania 1000.achilles jest ok. dwukrotnie mniejsza od iloczynu ncpus x walltime. Oznacza to, że zadanie to nie wykonuje się równolegle - tylko jeden procesor jest wykorzystywany do obliczeń, drugi jest marnowany przez zadanie. W celu uniknięcia tego typu marnotrawienia zasobów obliczeniowych zachęcamy użytkowników do sprawdzania efektywności zadań zleconych na wiele procesorów (węzłów) obliczeniowych.

Efektywność wykonywania zadania na wielu rdzeniach (węzłach) można ocenić w następujący sposób:

  • Stopień przyspieszenia obliczeń na n-rdzeniach: (cput/walltime), np. dla zadania 1000.achilles otrzymujemy: 46/48=0.95
  • Wydajność wykorzystania rdzeni obliczeniowych: (cput/walltime)/ncpus*100%, np. dla zadania 1000.achilles otrzymujemy: (46/48)/2*100%=48%

Przykład:

  • Walltime zadania zleconego na 1 węzeł obliczeniowy jest równy 13 dni.
  • Walltime tego samego zadania zleconego na 4 węzły obliczeniowe jest równy 11 dni. Przyspieszenie obliczeń: 1,3x . Wydajność wykorzystania węzłów obliczeniowych: 64%.
  • Walltime tego samego zadania zleconego na 8 węzłów obliczeniowych jest równy 8 dni. Przyspieszenie obliczeń: 1,5x. Wydajność wykorzystania węzłów obliczeniowych: 19%.

Narzędzia monitorujące na klastrze Bem

Na klastrze Bem dostępne są narzędzia ułatwiające monitorowanie wykorzystania zasobów (pamięć operacyjna oraz czas wykonywania) przez zakończone zadania (resused i resstat).


Aby uzyskać informacje o wykorzystaniu zasobów przez zakończone zadania można skorzystać z polecenia:

> resused 

gdzie jako parametr należy podać liczbę zadań z zakresu od 1 do 500, np.

> resused 10

Polecenie wyświetli tabelę zawierającą informacje o wykorzystaniu zasobów przez każde z 10-ciu ostatnio zakończonych zadań. Tabela powinna wyglądać podobnie do poniższej:

Resource usage of the last 10 jobs

  Job Id  Job Name         Memory    Used/Req [GB]    Walltime    Used/Req [h]
--------  ---------------  --------  ---------------  ----------  --------------
 2000     test_1           OK        6.86/7.81        OK          7/10
 2001     test_2           OK        6.86/7.81        OK          7/10
 2002     test_3           OK        6.86/7.81        OK          7/10
 2003     test_4           OK        6.86/7.81        OK          7/10
 2004     cc1              WARNING   4.00/10.00       WARNING     7/10
 2005     cc2              WARNING   4.00/10.00       WARNING     7/10
 2006     lih_f-0.001      OK        6.86/7.81        WARNING     2/5
 2007     lih_f+0.001      OK        6.86/7.81        OK          4/5
 2008     STDIN            CRITICAL  0.00/0.49        CRITICAL    0/2
 2009     STDIN            OK        5.88/7.81        OK          4/5

Kolejne kolumny powyższej tabeli oznaczają:

  • identyfikator zadania (Job Id)
  • nazwę zadania (Job Name)
  • komunikat dotyczący wykorzystania pamięci przez zadanie (Memory)
  • ilość pamięci wykorzystanej i zaalokowanej dla zadania w GB (Used/Req [GB])
  • komunikat dotyczący wykorzystania walltime'u przez zadanie (Walltime)
  • liczbę godzin wykorzystanych i zarezerwowanych dla zadania (Used/Req [h])

Komunikaty "OK", "WARNING" oraz "CRITICAL" w kolumnach Memory i Walltime odpowiadają następującemu wykorzystaniu zasobów przez zadanie:

Wykorzystanie zasobów:     Komunikat:
0-30%                      CRITICAL
31-70%                     WARNING
71-100%                    OK

Przykład: zadanie o nazwie test_1 (identyfikator 2000) wykorzystało 6.86 GB pamięci z zarezerwowanych 7.81 GB (ok. 88%) . Zadanie wykorzystało 70% zarezerwowanego czasu (obliczenia trwały 7h, natomiast zarezerwowano 10h).

Dodanie opcji -c do polecenia resused wyświetli dodatkowe informacje:

Resource usage of the last 10 jobs

  Job Id  Job Name         Memory    Used/Req [GB]    Walltime    Used/Req [h]    CPUTime    Used/Wall*ncpus [h]
--------  ---------------  --------  ---------------  ----------  --------------  ---------  ---------------------
 2000     test_1           OK        6.86/7.81        OK          7/10            OK         5/7
 2001     test_2           OK        6.86/7.81        OK          7/10            OK         5/7
 2002     test_3           OK        6.86/7.81        OK          7/10            OK         5/7
 2003     test_4           OK        6.86/7.81        OK          7/10            OK         5/7
 2004     cc1              WARNING   4.00/10.00       WARNING     7/10            OK         5/7
 2005     cc2              WARNING   4.00/10.00       WARNING     7/10            OK         5/7
 2006     lih_f-0.001      OK        6.86/7.81        WARNING     2/5             CRITICAL   1/4
 2007     lih_f+0.001      OK        6.86/7.81        OK          4/5             WARNING    3/8
 2008     STDIN            OK        5.88/7.81        OK          4/5             WARNING    2/4

Dodatkowe dwie kolumny w powyższej tableli oznaczają:

  • komunikat dotyczący wykorzystania czasu CPU przez zadanie (CPUTime)
  • liczbę godzin CPU wykorzystanych przez zadanie i wartość liczba_wykorzystanych_godzin_walltime*liczba_zaalokowanych_rdzeni (Used/Wall*ncpus [h])

Przykład: zadanie o nazwie test_1 (identyfikator 2000) było zlecone na jeden rdzeń (ncpus=1) i wykorzystało 5h czasu CPU oraz 7h walltime'u. Wartość Wall*ncpus jest w tym przypadku równa 7. Procentowe wykorzystanie czasu CPU jest zatem równe 71%.

W celu sprawdzenia statystyki wykorzystania zasobów przez 10, 100 oraz 1000 ostatnio zakończonych zadań można skorzystać z komendy:

> resstat

Polecenie wyświetla tabelę podobną do poniższej:

Total usage by the last:

             Memory used/req [GB]    [%]    Walltime used/req [h]    [%]
---------  ----------------------  -----  -----------------------  -----
  10 jobs                 111/117     95                4036/5040     80
 100 jobs               1118/1172     95              25030/50400     50
1000 jobs               8937/9850     89            209631/498418     42

Tabela ta zawiera następujące informacje:

  • sumaryczną ilość pamięci wykorzystanej i zaalokowanej dla 10, 100 i 1000 ostatnio zakończonych zadań w GB (Memory used/req [GB])
  • sumaryczną liczbę godzin wykorzystanych i zaalokowanych dla 10, 100 i 1000 ostatnio zakończonych zadań (Walltime used/req [GB])
  • procentowe wykorzystanie pamięci i walltime'u dla 10, 100 i 1000 ostatnio zakończonych zadań

Przykład: 10 ostatnio zakończonych zadań użytkownika wykorzystało łącznie 111 GB pamięci z zarezerwowanych 117 GB, co stanowi 95%. Te same zadania wykorzystały łącznie 4036h czasu obliczeniowego z zaalokowanych 5040h (80%).


Uwaga

Po zalogowaniu na klaster wyświetlane są dwie tabele. Pierwsza z nich prezentuje informację o wykorzystaniu pamięci oraz walltime'u przez 10 ostatnio zakończonych zadań użytkownika (wynik działania komendy resused 10), natomiast druga przedstawia statystyki wykorzystania tych zasobów przez ostatnich 10, 100 oraz 1000 zadań (wynik działania komendy resstat).