System kolejkowy OpenPBS
Często stosowanym sposobem uruchamiania programów wielowątkowych jest uruchamianie ich z wykorzystaniem systemu
kolejowego. Ma to praktyczne zastosowanie w klastrach stacji roboczych, superkomputerach i systemach masywnie
równoległych, szczególnie jeśli z systemu korzysta wielu użytkowników. Użytkownik może wprowadzić swój program do
kolejki programów czekających na uruchomienie i wylogować się
z systemu. Program zostanie automatycznie uruchomiony i działać będzie niezależnie od obecności w systemie użytkownika,
przez którego został zainicjowany. Popularnym systemem nadzorującym kolejkowanie i dystrybucję obciążenia na komputerach
równoległych jest standard OpenPBS1. Jest to aplikacja sieciowa mająca zastosowanie na wielu platformach unix`owych.
Uruchamianie programu równoległego poprzez OpenPBS odbywa się przy pomocy specjalnie przygotowanego skryptu. Taki skrypt
rozruchowy może zawierać bardzo wiele istotnych informacji dotyczących uruchamianego programu (zadania) w systemie OpenPBS.
Za jego pomocą istnieje możliwość sprecyzowania liczby procesorów (ncpus), jakie mogą brać udział w przetwarzaniu danych
programu. Można także określić, jak duży obszar pamięci zlecone zadanie może zaalokować dla swoich potrzeb (zmienna mem).
Ważne są również zmienne związane z czasem "życia" zadania w systemie OpenPBS. Zmienna cput określa, jak długo program może
korzystać z dostępnych procesorów. Wartość zmiennej walltime, dotyczy całkowitego czasu istnienia procesu, łącznie z pracą
i wszelkimi opóźnieniami spowodowanymi, np. czekaniem w kolejce przed uruchomieniem. Poniżej znajduje się przykładowy skrypt
rozruchowy dla systemu OpenPBS.
#PBS -S /bin/sh #PBS -l ncpus=2 #PBS -l walltime=50:00:00,cput=25:00:00 #PBS -l mem=256MB cd /home/marekhac/szachownica env OMP_NUM_THREADS=4 ./moj_skrypt >> wyniki_programu
Pierwsza linia skryptu określa interpreter, który ma przetworzyć skrypt uruchamiający zadanie. W kolejnych liniach zdefiniowano liczbę procesorów, czas życia zadania oraz ilość pamięci. Należy także określić dokładną ścieżkę dostępu do katalogu,
w którym znajduje się uruchamiany program. Ostatnia linia to już zwyczajne wywołanie skryptu dla czterech wątków. Wyniki programu zapisane zostaną w oddzielnym pliku tekstowym (wyniki_programu).
Uruchomienie skryptu odbywa się poprzez wywołanie polecenia qsub z parametrem określającym nazwę zadania i skryptu rozruchowego.
$ qsub -N nazwa_procesu ./moj_skrypt
Po wykonaniu powyższego polecenia, system automatycznie przypisze numer identyfikacyjny zleconemu zadaniu i przydzieli je do kolejki zadań. Informacja o numerze
i lokalizacji zadania zostanie wyświetlona na ekranie użytkownika.
Możliwości OpenPBS nie kończą się jednak na kolejkowaniu i przetwarzaniu zleconych zadań. System umożliwia również bardzo dokładne monitorowanie ich aktualnego stanu. W tym celu stosuje się polecenie qstat.
Poza informacją o numerze zadania, jego nazwie i użytkowniku, który je zlecił, polecenie qstat dostarcza jeszcze co najmniej dwóch bardzo istotnych informacji o stanie zadania. W kolumnie Time Use znajduje się informacja o tym, od jak dawna komputer zajmuje się przetwarzaniem zakolejkowanych zadań. Zaś kolumna S dostarcza informacji
o ich aktualnym statusie. Status może być reprezentowany przez jedną z następujących wartości:
Bardziej szczegółowe informacje na temat zleconego zadania, można uzyskać poprzez wywołanie polecenia qstat z opcją -f.
$ qstat -f numer_zadania
W wyniku otrzymano szereg dodatkowych danych, z których najistotniejszymi są informacje o czasie "życia"
(resources_used.walltime) i czasie przetwarzania (resources_used.cput) zleconego zadania. Często przydaje się
także wiedza o ilości pamięci zaalokowanej przez przetwarzany program (resources_used.mem) w porównaniu do
całkowitego obszaru pamięci przeznaczonej na zadanie (Resource_List.mem).
Jeśli zaistnieje potrzeba usunięcia zleconego zadania z systemu OpenPBS, należy skorzystać z polecenia qdel.
$ qdel numer_zadania
Zadanie zostanie usunięte bez względu na status, w jakim się aktualnie znajduje.