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,