Monitorowanie wydajności wykorzystania zasobów przez zadania: Różnice pomiędzy wersjami

Z KdmWiki
Przejdź do nawigacji Przejdź do wyszukiwania
 
(Nie pokazano 3 wersji utworzonych przez 2 użytkowników)
Linia 89: Linia 89:
 
* zlecając każde zadanie na 1 węzeł obliczeniowy mógłby uzyskać wyniki dla wszystkich ośmiu zadań po 13 dniach.
 
* zlecając każde zadanie na 1 węzeł obliczeniowy mógłby uzyskać wyniki dla wszystkich ośmiu zadań po 13 dniach.
 
* zlecając każde zadanie  na 8 węzłów obliczeniowych wyniki dla wszystkich zadań mógłby uzyskać dopiero po 64 dniach!}}
 
* zlecając każde zadanie  na 8 węzłów obliczeniowych wyniki dla wszystkich zadań mógłby uzyskać dopiero po 64 dniach!}}
 
==== 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        13.72/15.62      WARNING    2/5           
 
  2007    lih_f+0.001      OK        13.72/15.62      OK          4/5           
 
  2008    STDIN            WARNING  1.95/3.91        CRITICAL    48/504         
 
  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:
 
 
> resused -c 10
 
 
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        13.72/15.62      WARNING    2/5            CRITICAL  1/4
 
  2007    lih_f+0.001      OK        13.72/15.62      OK          4/5            WARNING    3/8
 
  2008    STDIN            WARNING  1.95/3.91        CRITICAL    48/504          CRITICAL  9/48
 
  2009    STDIN            OK        5.88/7.81        OK          4/5            WARNING    2/4
 
 
Dodatkowe dwie kolumny w powyższej tabeli 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''').
 

Aktualna wersja na dzień 08:29, 19 lip 2016

< 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%.