Monitorowanie efektywności wykorzystania zasobów przez zadania: Różnice pomiędzy wersjami
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
Linia 49: | Linia 49: | ||
> tracejob -n liczba_dni_do_sprawdzenia identyfikator_zadania | egrep -o -e resources_used.cput=[0-9]+ -e resources_used.ncpus=[0-9]+ | > 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]+ | -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 ==== | ==== Wykorzystanie pamięci ==== | ||
Linia 55: | Linia 57: | ||
'''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. | '''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. | ||
{{uwaga2|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.}} | {{uwaga2|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 wykorzystało 48 min. i 40 s czasu obliczeniowego pamięci, natomiast dla zadania zarezerowanych zostało 20 godzin obliczeniowych. | ||
+ | {{uwaga2|Właściwe oszacowanie parametru walltime umożliwia skrócenie czasu oczekiwania na uruchomienie zadania użytkownika, 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? ==== | ==== Wykorzystanie procesora: Jaka jest skalowalność mojego programu? ==== |
Aktualna wersja na dzień 13:28, 11 lip 2016
< Podręcznik użytkownika KDM < System kolejkowy < Monitorowanie 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ą odpowiednio wykorzystywane.
System kolejkowy PBSPro oferuje narzędzia, dzięki którym można monitorować wykorzystanie zasobów przez uruchomione lub już zakończone zadania.
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 wykorzystało 48 min. i 40 s czasu obliczeniowego pamięci, natomiast dla zadania zarezerowanych zostało 20 godzin obliczeniowych.
! | Właściwe oszacowanie parametru walltime umożliwia skrócenie czasu oczekiwania na uruchomienie zadania użytkownika, 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:
|