headerphoto

OpenMP

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:

  • Q - zadanie zostało zakolejkowane i nadaje się do uruchomienia
  • W - zadanie czeka na uruchomienie
  • R - zadanie jest aktualnie przetwarzane
  • H - zadanie jest wstrzymane
  • T - zadanie jest w trakcie zmiany lokalizacji (zmiany kolejki)
  • E - zadanie było przetwarzane i kończy działanie2

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.


1http://www.kdm.wcss.wroc.pl/wiki/index.php/OpenPBS
2http://beowulf.lcs.mit.edu/pbs.html