Spis treści |
Portable Batch System (PBS) jest to system wsadowego przetwarzania zadań i zarządzania zasobami obliczeniowymi. Pozwala na kolejkowanie zadań, zarządzanie ich atrybutami, uruchamianie i zwracanie wyników obliczeń do użytkownika.
Pod pojęciem PBS kryje się kilka wersji systemu kolejkowego:
W TASKu, do czerwca 2005 stosowany był OpenPBS 2.3.16, obecnie został zastąpiony prze TORQUE. Niniejszy opis odnosi się do systemu TORQUE.
Podstawowe funkcje systemu PBS czyli wstawienie zadań do kolejki, monitorowanie i zarządzanie zadaniami są realizowane za pomocą polceń qsub, qstat, qdel.
Serwer systemu jest posadowiony na holku, zadania mogą być zlecane na klaster holk. Komendy użytkownika są dostępne na holku i karaweli.
PBS jest jest systemem o budowie modularnej. Jedym z wydzielonych modułów jest moduł szeregujący (scheduler). Autorzy systemu PBS dopuszczają a nawet zalecają stosowanie różnych schedulerów w zależności od potrzeb ośrodka. Jednym z takich schedulerów współpracujących z PBS jest Maui rozwijany jako osobny pakiet oprogramowania. W TASKu do szeregowania zadań zastosowany został ten właśnie program.
Pakiet ten oprócz poszerzonej funkcjonalności szeregowania, przydziału zasobów i uruchamiania zadań dostarcza również pewnych dodatkowych komend użytkownika. Pozwalają one monitorować dodatkowe - w stosunku do standardowych poleceń PBS'a, parametry zadań zakolejkowanych i uruchomionych, a także samych kolejek, oraz statystyk wykorzystania zasobów.
Strona pakietu: http://www.clusterresources.com/products/maui/
Polecenie qsub służy do wstawianie zadań do systemu. Opcja -l pozwala zdefiniować wymagane zasoby i limity (szczegółowo opisane w manualu pod hasłem pbs_resources(man pbs_resources))
Do uruchamiania zdań w systemie PBS zaleca sie stworzenie skryptu uruchomieniowego. Skrypty używa się w następujący sposób:
qsub [opcje qsub] < skrypt.csh
Polecenie qsub interpretuje linie zaczynające się od wyrażenia #PBS i pobiera z nich swoje opcje tzn. wyrażnie
/bin/echo -e "#PBS -N Testowe\n hostname" | qsub
jest równoważne
/bin/echo -e "hostname" | qsub -N Testowe
Przykładowy skrypt jest przedstawiony poniżej
#nazwa zadania, musi sie zaczynac litera #PBS -N zadanie1 # kolejka #PBS -q batch # wymagania: 2 nody po 2 dwurdzeniowe (2*2) procesory na kazdym nodzie, # obliczenia zakoncza sie w czasie 4 godzin #PBS -l nodes=2:ppn=8,walltime=04:00:00 # wysylanie poczty kiedy zadanie sie skonczy #PBS -m e cd $PBS_O_WORKDIR rungms_pbs zadanie1 64 8 >& zadanie1.log
Wymagane przez zadanie zasoby specyfikuje się za pomocą opcji -l dla polecenia qsub Szczegółowa dokumentacja zasobów jest dostępna w podręczniku systemowym man pod hasłem pbs_resources.
Zadanie kierowane na holka powinny specyfikować przynajmniej wymagania co do nodów:
nodes=N:ppn=P
gdzie N to liczba nodów, P to liczba procesorów na nodzie. Należy pamiętać, że nody holka mają po 2 dwurdzeniowe procesory i specyfikowanie większej liczby nie ma sensu. Domyślnie są przyznawane dwa dwurdzeniowe procesory (ppn=4), dlatego należy pamiętać aby dla zadań jednoprocesorowych wyspecyfikować ppn=1, ponieważ system przydzieli dwa procesory a zadanie wykorzysta tylko jeden co jest niezgodne z zasadami korzystania z zasobów.
np.
echo "./program_szeregowy a.inp" | qsub -q dluga -N zadanie1 -l nodes=1:ppn=1
Wskazane jest specyfikowanie czasu potrzebnego na skończenie obliczeń za pomocą zasobu walltime w postaci ciągu HH:MM:SS np. wiemy, że zadanie skończy się w ciągu 16 godzin:
echo "./moj_program a.inp" | qsub -q duza -N zadanie1 -l nodes=2:ppn=4,walltime=16:00:00
Polecenie qstat służy do monitorowania statusu zadań i kolejek. Samo polecenie, bez żadnych argumentów wyświetla długą listę zadań w kolejkach.
Wyświetlanie zadań użytkownika janko
qstat -u janko
Zadania wraz z nodami na których są uruchomione
qstat -n
Obszerna informacja o zadaniu o identyfikatorze JOBID
qstat -f JOBID
Lista i stan kolejek
qstat -Q
Kolumna Ena pokazuje czy kolejka pozwala na wstawianie zadań. Kolumna Str pokazuje czy zadania znajdujące się w kolejce są uruchamiane czy nie. Kolejkowanie i startowanie zadań może być czasowo wstrzymane przez administratora.
Krótka informacja o stanie serwera
qstat -B
Obszerna informacja o kolejce
qstat -Qf nazwa_kolejki
Polecenie qdel służy do usuwania zadań z systemu kolejkowego. Użycie:
qdel JOBID
Czasami zdarza się, że pomimo iż upłynął czasu przeznaczony na obliczenia, zadanie nie zostało prawidłowo usunięte z noda obliczeniowego i serwer PBS wysyła komunikaty o konieczności zakończenia zadania. W takiej sytuacji może być pomocne polecenie
qsig -s0 JOBID
| Komenda | Opcje i argumenty | Znaczenie
|
|---|---|---|
| showq | lista zadań w kolejkach z podziałem na uruchomione, oczekujące i blokowane,
| |
| showq | -i | lista zadań oczekującyh z informacją o priorytecie
|
| showbf | lista procesorów dostępnych poza kolejnością dla mniejszych i krótszych zadań (backfill)
| |
| checkcjob | JOBID | Informacje o zadniu według maui. Spodziewany czas uruchomienia, komunikaty o wstrzymaniu, informacje o rezerwacji zasobów
|
| checkjob | -v JOBID | Dla zadania uruchomionego podaje wykorzystanie procesorów.
|
| showstart | JOBID | najwcześniejszy możliwy termin startu zadania |
showstart
Zobacz: Zasady systemów kolejkowych w TASKu
Przykładowe skrypty do uruchamiania zadań w systemie PBS znajdują się w katalogu /apl/pbs/examples
Polecenie qsub umożliwia wstawienie zadań z podaniem terminu przed którym zadanie nie zostanie uruchomione. Robi się to za pomocą opcji -a. Funkcjonalność tę można wykorzystać do zarezerwowanie miejsca w kolejce w sytuacji gdy np. czekamy na wyniki obliczeń z innego zadania, o znanym terminie zakończenia, lub kiedy przygotowywane są dane wejściowe.
Planowanie uruchamiania zadań z wyprzedzeniem daje możliwość skrócenia czasu oczekiwania zadań w kolejce oraz bardziej optymalnego przydziału zasobów przez system kolejkowy.
PBS umożliwia wstrzymanie zadań oczekujących w kolejce. Zadanie takie nie są brane pod uwagę przez system przy uruchamianiu. Funkcję tę można wykorzystać do zarezerwowanie miejsca w kolejce jeśli wiadomo, że niedługim czasie będziemy musieli uruchmić jakieś zadanie, np. będzie konieczność restartu obliczeń z punktu kontrolnego. Aby to uzyskać należy wstawić do kolejki zadanie ze wskazaniem na dane wejściowe, które mogą nie istnieć i zostaną utworzone później. Do polecenia qsub dodajemy opcję -h. Zadanie zostanie wstawione do kolejki ale, będzie miało status Hold i nie zostanie uruchomione nawet gdy będą wolne zasoby. Kiedy dane wejściowe zostaną przygotowane komendą qrls należy zwolnić blokadę zadania:
qrls JOBID
Zadanie nadal będzie w kolejce, ale ze względu na czas oczekiwania jego priorytet będzie wyższy niż gdyby zostało wstawione do kolejki dopiero teraz.
Zadanie oczekujące w kolejce może również zostać wstrzymane za pomocą polecenia
qhold JOBID
Funkcję tę można wykorzystać np. w przypadku kiedy dla zadania już wstawionego do kolejki zajdzie konieczność zmiany w pliku wejściowym.
Kiedy w kolejce znajdzie się zadanie wymagające dużej liczby procesorów, a zadania kończące się zwalniają niewielką ilość procesorów, system kolejkowy musi wstrzymać uruchamianie nowych małych zadań i gromadzić pulę procesorów dla zadania dużego. Powstaje w ten sposób grupa wolnych procesorów, które pozostają bezczynne aż do uruchomienia dużego zadania. Ponieważ system wie kiedy kończą się poszczególne zadania, jest w stanie określić kiedy będzie mógł uruchomić zadanie duże. Powstaje w ten sposób "okno" czasowe z pewną pulą procesorów. Jeśli w kolejce znajduje się zadanie o wymaganiach co do procesrów i czasu mieszczących się w tym oknie, to może ono zostać uruchomione poza kolejnością.
Komenda showbf (z Maui) pokazuje czy aktualnie są dostępne procesory do wykorzystania poza kolejnością wraz z dostępnym limitem czasu, np:
> showbf backfill window (user: 'janko' group: 'users' partition: ALL) Fri Jun 10 10:42:48 6 procs available for 6:36:15
informuje, że są jest dostępnych 6 procesorów na ponad 6 godzin. Jednak warto dodać do showbf specyfikację kolejki, ponieważ nie wszystkie nody są dostępne dla wszystkich kolejek, np. w tej samej sytuacji zapytanie:
> showbf -c szybka backfill window (user: 'janko' group: 'staff' partition: ALL) Fri Jun 10 10:43:04 32 procs available for 6:34:39 4 procs available with no timelimit
pokazuje, że dla kolejki szybka są dostępne aż 32 procesory.
Aby skorzystać z tej puli należy wstawić zadanie z limitem czasu i procesorów nie większym niż podane przez showbf np.
> echo "./rungms exam.inp " | qsub -l nodes=8:ppn=4,walltime=06:10:00 -q szybka
Zadanie zostanie uruchomione przez PBS, o ile w systemie nie znajdzie sie inne zadanie o wyższym priorytecie.
Z punktu widzenia dobierania optymalnej kolejności uruchamiania zadań warto zawsze dodawać parametru walltime do specyfikacji zasobów zadania w poleceniu qsub zamiast zdawać się na domyślny limit kolejki.