Implementacja zestawu narzędzi do zarządzania klastrem Windows

Transkrypt

Implementacja zestawu narzędzi do zarządzania klastrem Windows
Implementacja zestawu narz˛edzi do zarzadzania
˛
klastrem Windows HPC za pośrednictwem
systemu Linux
Łukasz Tomczyk
Wydział Inżynierii Mechanicznej i Informatyki
Kierunek Informatyka, Rok V
[email protected]
Streszczenie
W pracy przedstawiono projekt i implementacj˛e zestawu narz˛edzi pozwalajacych
˛
na uzyskanie dost˛epu do funkcji oprogramowania zarzadzaj
˛
acego
˛
klastrem Windows
HPC Server 2008 z maszyny klienta opartej o system Linux. Wykorzystano technologi˛e serwisów webowych w celu zapewnienia interoperacyjności. Funkcjonalność
klienta została zamkni˛eta w bibliotece libwinhpc, która stanowi podstaw˛e do zbudowania przykładowych aplikacji użytkowych: winhpctool (działajacej
˛ w konsoli tekstowej) oraz xwinhpctool (uruchamianej w środowisku graficznym).
1
Wst˛ep
Klastry obliczeniowe wykorzystywane sa˛ wsz˛edzie tam, gdzie konieczne jest uzyskanie
wysokiej wydajności obliczeniowej niskim kosztem. Najcz˛eściej pracuja˛ one pod kontrola˛ systemu operacyjnego Linux (około 75% według rankingu najszybszych komputerów
świata - Top500 [1]). Firma Microsoft oferuje jednak własne rozwiazanie
˛
w tej dziedzinie - system Windows HPC Server 2008 [2].
Produkt firmy Microsoft można określić jako rozwiazanie
˛
kompleksowe, gdyż zawiera on wszystkie komponenty potrzebne do działania klastra obliczeniowego. Jego podstawowym elementem jest system operacyjny Windows Server 2008 w wersji 64-bitowej,
natomiast pozostałe oprogramowanie instalowane jest w postaci dodatku Microsoft HPC
Pack. Windows HPC posiada zintegrowany system kolejkowy, mechanizmy administrowania w˛ezłami klastra, własny stos MPI, a także mechanizm szybkiej instalacji na wielu
maszynach przy użyciu usługi Windows Deployment Services. Użytkownik lub administrator może komunikować si˛e z klastrem przy użyciu graficznej konsoli administracyjnej,
standardowej konsoli tekstowej systemu Windows lub za pośrednictwem zorientowanej
obiektowo powłoki PowerShell.
Wdrożenia klastrów opartych o system Windows w środowiskach wykorzystujacych
˛
dotychczas systemy uniksowe wymusza stworzenie narz˛edzi pozwalajacych
˛
na współprac˛e tych dwóch, niekompatybilnych ze soba˛ platform.
1
2
Biblioteka libwinhpc
2.1
Architektura
W celu udost˛epnienia funkcjonalności Windows HPC dla klienta działajacego
˛
w systemie
operacyjnym Linux zaprojektowano i zaimplementowano bibliotek˛e o nazwie libwinhpc,
której zadaniem jest komunikacja z w˛ezłem dost˛epowym klastra.
Komunikacja może odbywać si˛e na dwa sposoby:
• za pośrednictwem wbudowanego w Windows HPC
serwisu webowego HPC Basic Profile,
• przy użyciu stworzonego specjalnie na potrzeby biblioteki
serwisu webowego WinHPCService.
Niezależnie od sposobu komunikacji biblioteka libwinhpc udost˛epnia jednolity interfejs
dost˛epu do poszczególnych funkcji.
Serwis HPC Basic Profile[3] jest implementacja˛ standardu określajacego
˛
dost˛ep do
podstawowych funkcji dowolnego systemu zarzadzania
˛
zasobami klastra, takich jak: uruchomienie pracy, pobranie opisu pracy, sprawdzenie statusu jej wykonywania, anulowanie
wykonania pracy, pobranie informacji o zasobach klastra, wstrzymanie lub uruchomienie
przyjmowania zadań przez serwis. Ponieważ HPCBP został stworzony z myśla˛ o integracji różnych systemów klastrowych, jego podstawowa˛ zaleta˛ jest niezależność od platformy sprz˛etowo-systemowej. Jednocześnie zasób udost˛epnianych funkcji jest ograniczony
i nie zawiera elementów specyficznych dla danego systemu, który go zaimplementował.
Odpowiedzia˛ na ograniczenia funkcjonalne HPC Basic Profile w stosunku do funkcji oferowanych przez Windows HPC było stworzenie dedykowanego serwisu webowego
o nazwie WinHPCService. Dzi˛eki niemu możliwe było uzyskanie dost˛epu do Windows
HPC API, czyli do wszystkich dost˛epnych elementów interfejsu programistycznego łacz˛
nie z funkcjami specyficznymi, niedost˛epnymi za pośrednictwem HPCBP.
Serwis WinHPCService powstał przy użyciu technologii Windows Communication
Foundation[4] oraz j˛ezyka C]. Biblioteka libwinhpc została napisana w j˛ezyku C++ z wykorzystaniem pakietu gSOAP[5] wspomagajacego
˛
komunikacj˛e z serwisami webowymi.
Rys. 1: Schemat blokowy architektury systemu
Na rysunku 1 przedstawiono blokowy schemat architektury systemu, gdzie wyst˛epuje
komunikacja z klastrem Windows HPC za pomoca˛ biblioteki libwinhpc.
2
2.2
Funkcjonalność
W czasie projektowania biblioteki libwinhpc założono realizacj˛e dost˛epu do funkcji przedstawionych na diagramie przypadków użycia z rysunku 2.
Rys. 2: Funkcjonalność biblioteki klienta
Na diagramie zauważyć można, iż do podstawowego zarzadzania
˛
pracami dołaczo˛
ne zostały funkcje specyficzne, takie jak na przykład „pobranie listy szablonów prac”.
Użytkownik z uprawnieniami administratora może także zarzadzać
˛
parametrami administracyjnymi klastra lub monitorować jego obcia˛żenie.
2.3
Model obiektowy
Na rysunku 3 przedstawiono model obiektowy biblioteki libwinhpc w postaci diagramu
klas. Sercem modelu jest abstrakcyjna klasa Cluster definiujaca
˛ interfejs dost˛epu do funkcjonalności klastra, natomiast implementacja przypadku korzystania z HPC Basic Profile
oraz z WinHPCService została zawarta w klasach dziedziczacych
˛
- ClusterHPCBP oraz
ClusterWinHPC.
Pozostałe klasy, które znaleźć można na diagramie, sa˛ zależnościami wcześniej opisanych klas reprezentujacymi:
˛
prace (klasa Job), zadania (klasa Task), statusy prac i zadań (klasy JobStatus i TaskStatus), w˛ezły klastra (klasa Node), obcia˛żenie w˛ezłów (klasa NodeLoad), parametry klastra (struktura ClusterParam) oraz dane uwierzytelniajace
˛
(struktura Credentials).
2.4
Przykład użycia
Na listingu 1 przedstawiono przykład użycia biblioteki libwinhpc w celu uruchomienia
nowej pracy na klastrze.
Wykonanie czynności można podzielić na kilka etapów. Pierwszym jest przygotowanie danych uwierzytelniajacych
˛
(linie 8-10). Nast˛epnie tworzony jest obiekt klasy
ClusterWinHPC (linie 12-16). W kolejnym kroku tworzone sa˛ obiekty opisujace
˛ prac˛e
oraz zadanie (linie 18-24). Dla pracy zostaje przypisana nazwa, natomiast dla zadania
3
Rys. 3: Diagram klas biblioteki libwinhpc
zawartość linii komend do wykonania. Zadanie jest dodane do zestawu zadań tworzonej
pracy.
Kiedy gotowe sa˛ wszystkie dane wejściowe, wykonywane jest odpowiednie wywołanie metody z obiektu cluster (linia 28). W przypadku zakończenia operacji powodzeniem zwracany jest liczbowy identyfikator pracy. W przeciwnym razie wyrzucony zostanie wyjatek,
˛
który obsługiwany jest w liniach 34-38.
3
Weryfikacja działania biblioteki libwinhpc
W trakcie rozwijania biblioteki libwinhpc dla każdej nowej funkcji tworzone były zestawy testów. W celu ułatwienia implementacji owych zestawów powstał prosty framework
testowy, który:
• ujednolicał sposób implementacji przypadków testowych,
• posiadał wspólne narz˛edzia do parsowania parametrów uruchamianych testów,
• ujednolicał sposób reprezentacji wyników testów,
• umożliwił stworzenie automatyzacji.
Do uruchamiania wszystkich istniejacych
˛
przypadków testowych i tworzenia raportu
z ich wykonania stworzono skrypt testrunner.sh, który okazał si˛e bardzo pomocny automatyzujac
˛ każdorazowe poszukiwanie ewentualnych regresji po zaimplementowaniu nowych funkcji.
4
1
2
#include< winhpc / cluster - winhpc .h >
#include< winhpc / job .h >
3
4
using namespace std ;
5
6
7
8
9
10
int main ()
{
Credentials cred ;
cred . username = " winhpc \\ tester ";
cred . password = " !!123 abc ";
11
Cluster * cluster = new ClusterWinHPC (
" https :// headnode . winhpc . icis . pcz . pl / WinHPCService /" ,
true,
" ./ public . cer " ,
& cred );
12
13
14
15
16
17
Job job ;
Task task ;
18
19
20
job . setName (" Test Job 1" );
task . setCommandline (" hostname " );
21
22
23
job . getTasks (). push_back (& task );
24
25
try
{
int id = cluster -> submitJob ( job );
26
27
28
29
cout << " Job submitted . Returned ID : " << id << endl ;
}
catch( Exception * e)
{
cerr << " Exception caught :\ n";
cerr << " Message : " << e -> getMessage () << endl ;
cerr << " Trace :
" << e -> getTrace ()
<< endl ;
30
31
32
33
34
35
36
37
delete e;
38
}
39
40
delete cluster ;
41
42
return 0;
43
44
}
Listing 1: Przykład korzystania z biblioteki libwinhpc
4
Narz˛edzia oparte o libwinhpc
Na bazie biblioteki libwinhpc stworzono przykładowe narz˛edzia użytkowe. Głównym zadaniem implementowanych narz˛edzi było zbudowanie ponad biblioteka˛ libwinhpc interfejsu użytkownika dajacego
˛
możliwość korzystania z funkcji Windows HPC z poziomu
konsoli systemu Linux oraz przy użyciu GUI (ang. Graphical User Interface).
W czasie prac stworzono nast˛epujace
˛ aplikacje:
• winhpctool - pracujac
˛ a˛ w trybie poleceń,
• xwinhpctool - pracujac
˛ a˛ w trybie graficznym.
4.1
Klient konsolowy - winhpctool
Aplikacja winhpctool powstała jako narz˛edzie konsoli systemu Linux umożliwiajace
˛
interakcj˛e z Windows HPC z poziomu linii komend. Wywołania winhpctool maja˛ nast˛e5
pujac
˛ a˛ postać:
winhpctool <komenda> <wspólne_parametry> <parametry_komendy>
gdzie:
• komenda - oznacza wybrane działanie odpowiadajace
˛ funkcji biblioteki libwinhpc,
• wspólne_parametry sa˛ zestawem argumentów wspólnych dla wszystkich komend
(określajacych
˛
adres sieciowy klastra, plik certyfikatu do weryfikacji, dane uwierzytelniajace,
˛ użycie HPCBP, tryb pomocy)
• parametry_komendy sa˛ zestawem argumentów specyficznych dla danej komendy
(np. pobranie statusu pracy wymaga podania jej identyfikatora).
Przykład:
winhpctool getjobstatus -url http://headnode/WinHPC/service.svc \
-jobid 2889 -detailed
W powyższym przykładzie getjobstatus jest komenda,˛ parametr url, określajacy
˛
adres klastra, jest wspólny dla wszystkich komend, natomiast parametry jobid oraz flaga
detailed sa˛ specyficzne dla wybranej komendy.
Na rysunku 4 przedstawiono zrzut ekranu z innymi przykładowymi wywołaniami polecenia winhpctool.
Rys. 4: Przykłady wywołań polecenia winhpctool
6
4.2
Klient graficzny - xwinhpctool
W celu umożliwienia korzystania z funkcji biblioteki libwinhpc za pomoca˛ intuicyjnego
interfejsu graficznego powstało narz˛edzie xwinhpctool. Zostało ono zbudowane przy
użyciu biblioteki Qt [6].
Głównym problemem przy tworzeniu xwinhpctool, było blokowanie GUI wraz z wywoływaniem metod biblioteki libwinhpc. Zagadnienie zostało rozwiazane
˛
przy użyciu
wbudowanych w bibliotek˛e Qt mechanizmów wielowatkowości,
˛
poprzez opakowanie klasy Cluster klasa˛ ClusterAsynchronousWrapper dokonujac
˛ a˛ wszystkich wywołań w osobnym watku.
˛
Dzi˛eki takiemu podejściu wi˛ekszość operacji wykonywana jest w tle lub przy
wyświetlanym oknie dialogowym post˛epu.
Interfejs xwinhpctoolzostał podzielony na trzy sekcje: zarzadzanie
˛
pracami, monitorowanie w˛ezłów oraz zarzadzanie
˛
parametrami administracyjnymi klastra.
W przypadku prac możliwe jest ich uruchamianie oraz anulowanie. Podglad
˛ stanu realizowany jest poprzez zestawienie tabelaryczne. Możliwy jest podglad
˛ stanu pracy o podanym identyfikatorze, a także rezygnacja z podgladu
˛ danej pracy. Prace uruchamiane sa˛
poprzez wypełnienie odpowiedniego formularza zawierajacego
˛
poszczególne parametry.
W˛ezły klastra monitorowane moga˛ być na dwa sposoby: poprzez podglad
˛ ich aktualnego stanu oraz właściwości lub poprzez podglad
˛ aktualnego obcia˛żenia. Właściwości
i stan prezentowane sa˛ w zestawieniu tabelarycznym. Obcia˛żenie prezentowane jest jednocześnie poprzez wartości liczbowe oraz poprzez zmian˛e kolorów pól tekstowych.
Parametry administracyjne prezentowane sa˛ w tabeli jako nazwy i wartości. Podwójne klikni˛ecie w polu wartości daje możliwość edycji parametru, który po zatwierdzeniu
zostanie ustawiony na klastrze.
Rys. 5: Zarzadzanie
˛
pracami przy użyciu xwinhpctool
Na zrzucie ekranu z rysunku 5 przedstawiono zestawienie monitorowanych prac uruchomionych na klastrze, wraz z otwartym formularzem tworzenia nowej pracy (okno
New job).
7
5
Podsumowanie
W pracy wykazano, iż możliwe jest zbudowanie narz˛edzi do zarzadzania
˛
klastrem Windows HPC dla systemu Linux, co pokazano na przykładzie biblioteki libwinhpc oraz opartych o nia˛ narz˛edzi winhpctool oraz xwinhpctool.
Narz˛edzia wykonane w ramach niniejszej pracy b˛eda˛ mogły zostać wykorzystane
wsz˛edzie tam, gdzie podstawowym systemem operacyjnym w ramach istniejacej
˛ infrastruktury informatycznej jest system Linux i jednocześnie w ramach owej infrastruktury
wdrożono klaster obliczeniowy oparty o Windows HPC Server 2008.
Narz˛edzia te b˛eda˛ również mogły zostać użyte w wielu innych przypadkach, gdzie
na przykład funkcjonalność oferowana przez HPC Basic Profile b˛edzie niewystarczajaca
˛
i gdzie zaistnieje potrzeba wykorzystania wszystkich możliwości jakie daje system kolejkowy Windows HPC.
Opracowana biblioteka narz˛edziowa b˛edzie mogła posłużyć do implementacji interfejsu dla dowolnego Metaschedulera działajacego
˛
w środowisku Linux/Unix, umożliwiajac
˛ mu tym samym zlecanie prac klastrowi opartemu o system Windows HPC.
W ramach dalszego rozwoju projektu planuje si˛e udoskonalenia polegajace
˛ na:
• dodaniu nowej funkcjonalności,
• refaktoryzacji stworzonego kodu źródłowego,
• badaniu i poprawie wydajności.
Planowane jest też dokonanie publikacji projektu na zasadach Open Source w celu
udost˛epnienia go szerszej rzeszy odbiorców i umożliwienia jego wdrożeń na
szeroka˛ skal˛e.
Literatura
[1] Top500 Supercomputer Sites, http://www.top500.org.
[2] Microsoft Corporation, Technical Overview of Windows HPC Server 2008,
http://www.microsoft.com.
[3] B. Dillaway, M. Humphrey, C. Smith, M. Theimer, G. Wasson, HPC Basic Profile,
Version 1.0, 2007, http://forge.gridforum.org/projects/ogsa-hpcp-wg.
[4] D. Tidwell, J. Snell, P. Kulchenko, Essential Windows Communication Foundation,
Addison-Wesley, 2008.
[5] R. A. van Engelen, K. A. Gallivan, The gSOAP Toolkit for Web Services and PeerTo-Peer Computing Networks, 2nd IEEE International Symposium on Cluster Computing and the Grid, 2002.
[6] Qt Software, Qt - A cross-platform
http://www.qtsoftware.com/
8
application
and
UI
framework,