Monitorowanie wydajności wykorzystania zasobów przez zadania: Różnice pomiędzy wersjami
Linia 156: | Linia 156: | ||
2009 STDIN OK 5.88/7.81 OK 4/5 WARNING 2/4 | 2009 STDIN OK 5.88/7.81 OK 4/5 WARNING 2/4 | ||
− | + | Dwie końcowe kolumny w powyższej tabeli oznaczają: | |
* komunikat dotyczący wykorzystania czasu CPU przez zadanie (CPUTime) | * 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]) | * liczbę godzin CPU wykorzystanych przez zadanie i wartość liczba_wykorzystanych_godzin_walltime*liczba_zaalokowanych_rdzeni (Used/Wall*ncpus [h]) |
Wersja z 13:49, 15 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.
! | Właściwe oszacowanie pamięci RAM jest szczególnie ważne w przypadku zadań, które nie zajmują całych węzłów obliczeniowych klastra Bem. Im więcej pamięci alokują zadania liczone na poszczególnych rdzeniach, tym mniej (różnych) zadań może być uruchomionych jednocześnie na danym węźle obliczeniowym. |
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.
! | Właściwe oszacowanie parametru walltime umożliwia skrócenie czasu oczekiwania na uruchomienie zadań użytkowników, a także ułatwia administrowanie klastrem (np. można lepiej określić kiedy będzie możliwe wyłączenie danego węzła obliczeniowego, aby przeprowadzić prace serwisowe). |
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%.
! | Gdyby użytkownik miał do do dyspozycji 8 węzłów obliczeniowych, a do policzenia 8 podobnych zadań to:
|
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
Dwie końcowe 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).