3. Metodyka symulacji bł˛edów w emulowanym ´srodowisku
3.3. Zastosowanie emulacji
3.4.6. Architektura QEFI
Metodyka opisana w sekcji 3.4.5 została zaimplementowana w ´srodowisku QEFI. W niniejszej sekcji przedstawiona jest architektura, która pozwoliła na implementacj˛e wszystkich funkcji opisanej metodyki.
Zało˙zenia b˛ed ˛ace podstaw ˛a opracowanej architektury to:
1. minimalna ingerencja w oprogramowanie QEMU,
2. rozdzielenie procesu emulacji od sterowania przebiegiem testu, 3. rozdzielenie przeprowadzania testu od analizy wyników, 4. mo˙zliwo´s´c uruchamiania równolegle wielu instancji testów.
Zało˙zenie 1 zostało opracowane z my´sl ˛a o mo˙zliwej integracji opracowanych rozszerze´n z oficjaln ˛a wersj ˛a QEMU – minimalna ingerencja w kod ´zródłowy zwi˛eksza szanse na przyj˛ecie
11 Dotyczy eksperymentów zaburzania kodu systemu operacyjnego SUT.
12 Wykorzystane w eksperymencie opisanym w 4.5.3.
13 Dotyczy eksperymentów zaburzania kodu systemu operacyjnego SUT.
takiego kodu przez autorów projektu QEMU. Zało˙zenie 2 jest rozszerzeniem zało˙zenia 1 nios ˛acym dodatkowe korzy´sci: uniezale˙znienie od technologii, w której zostało wykonane QEMU (j˛ezyk C), oraz mo˙zliwo´s´c zarejestrowania ewentualnej awarii oprogramowania QEMU. Zało˙zenie 3 umo˙zliwia rozszerzanie bazy procedur analizuj ˛acych cechy dzienników wykonania bez konieczno´sci ponownego przeprowadzania eksperymentu. Zało˙zenie 4 ma na celu umo˙zliwienie skrócenia czasu przeprowadzania eksperymentu poprzez wykorzystanie wieloprocesorowych serwerów.
Na podstawie opracowanych zało˙ze´n przygotowane zostały trzy programy:
— Zmodyfikowana na potrzeby QEFI wersja emulatora QEMU,
— Nadzorca – oprogramowanie automatyzuj ˛ace wykonanie testu,
— Analizator – oprogramowanie analizuj ˛ace dzienniki wykonania.
Test jest przeprowadzany z udziałem instancji QEMU oraz instancji Nadzorcy, gdzie testowany system komputerowy (SUT) jest emulowany przez QEMU. Nadzorca oraz QEMU s ˛a osobnymi procesami w systemie operacyjnym i komunikuj ˛a si˛e poprzez sie´c protokołem TCP/IP. Zało˙zenie 4 realizowane jest poprzez uruchamianie wielu par procesów QEMU i Nadzorca, a sterowane jest to z udziałem skryptów powłoki systemu GNU/Linux.
Zebrane przez Nadzorc˛e dzienniki wykonania testów przekazywane s ˛a do Analizatora po przeprowadzeniu eksperymentu w trybie wsadowym. Analizator jest programem w j˛ezyku Pythonrealizuj ˛acym przetwarzanie dzienników pod k ˛atem wyst˛epowania poszczególnych cech zgodnie z algorytmem 3.5.
Współpraca wymienionych komponentów przedstawiona jest na rysunku 3.1. Na rysunku komponenty oznaczone kolorem pomara´nczowym s ˛a opracowane przez autora.
Kolorem niebieskim zaznaczone s ˛a miejsca implementacji algorytmów opisanych w sekcji 3.4.5, kolorem szarym oznaczone jest oryginalne oprogramowanie QEMU, a kolorem zielonym oprogramowanie poddawane testom. Poni˙zej zamieszczony jest szczegółowy opis opracowanych programów oraz procesu przeprowadzania eksperymentów.
Nadzorca
Nadzorca jest głównym komponentem realizuj ˛acym automatyczne przeprowadzanie testu na podstawie przygotowanego scenariusza. Jest to osobny proces w systemie operacyjnym, który komunikuje si˛e z SUT poprzez jeden lub wi˛ecej kanałów (poł ˛aczenie 1 z rysunku 3.1):
— tunelem do portu szeregowego SUT14,
— poprzez sie´c TCP/IP:
— bezpo´srednie poł ˛aczenie z usługami SUT,
14 Tunel do portu szeregowego działa w sposób nast˛epuj ˛acy: oprogramowanie QEMU uruchamia serwer TCP/IP, gdzie dane przychodz ˛ace s ˛a przekazywane do portu szeregowego emulowanego systemu, a dane wysyłane przez emulowany system s ˛a przekazywane do klientów serwera TCP/IP.
QEMU
— poprzez uruchomienie dodatkowych programów (np. ssh lub wget) skonfigurowanych na interakcj˛e z SUT.
Tunel do portu szeregowego jest szczególnym kanałem komunikacji z SUT – systemy operacyjne uruchamiane w emulowanym systemie komputerowym skonfigurowano tak, aby udost˛epni´c konsol˛e operatora oraz komunikowa´c wszelkie wykryte bł˛edy przez port szeregowy.
Podczas uruchamiania Nadzorca nawi ˛azuje równie˙z poł ˛aczenie TCP/IP konsol ˛a sterowania QEMU (poł ˛aczenie 2 z rysunku 3.1). Konsola sterowania udost˛epnia wszelkie operacje maj ˛ace zwi ˛azek z przebiegiem emulacji i wstrzykiwania bł˛edów – np. pauza/wznowienie emulacji, podgl ˛ad/modyfikacja zawarto´sci pami˛eci RAM emulowanego systemu, czy konfiguracja warunkowego wstrzykni˛ecia bł˛edu. Dodatkowo na konsoli wypisywane s ˛a informacje pochodz ˛ace z profilowania i procesu wstrzykiwania bł˛edów.
Dzienniki wykonania stanowi ˛ace pełen zapis interakcji z SUT oraz emulatorem umieszczane s ˛a w plikach tekstowych. Pliki te s ˛a przedmiotem pó´zniejszej analizy przez Analizator.
Modyfikacje QEMU
Oprogramowanie QEMU zostało wzbogacone na potrzeby QEFI o dwa dodatkowe moduły:
moduł ´sledzenia wykonania oraz moduł wstrzykiwania bł˛edów. Moduł ´sledzenia wykonania jest odpowiedzialny za monitorowanie skonfigurowanych przy uruchomieniu QEMU zdarze´n.
Przykładowymi zdarzeniami s ˛a:
— wykonanie instrukcji skoku przez emulowany procesor SUT,
— wykonanie kodu SUT zaburzonego poprzednio wstrzykni˛eciem bł˛edu,
— wywołanie wskazanych funkcji j ˛adra systemu operacyjnego,
— zgłoszenie przerwania przez wskazane urz ˛adzenie,
— wykonanie akcji przez wskazane urz ˛adzenie.
Cz˛e´s´c z wymienionych zdarze´n nie jest dost˛epna do wykorzystania w ka˙zdej z konfiguracji SUT – szczegółowy opis wykorzystania poszczególnych zdarze´n wykorzystanych w eksperymentach przedstawiony jest w rozdziale 4.
Moduł wstrzykiwania bł˛edów słu˙zy modyfikacji ´srodowiska wykonania SUT w sposób, który symuluje wyst ˛apienie bł˛edu. Dowolne z emulowanych przez QEMU urz ˛adze´n mo˙ze by´c wzbogacone o funkcj˛e wstrzykiwania bł˛edów. Moduł wstrzykiwania bł˛edów realizuje zarówno natychmiastowe wstrzykni˛ecie bł˛edu (algorytm 3.3), jak i warunkowe (algorytm 3.4). Diagram sekwencji realizacji warunkowego wstrzykni˛ecia przedstawiony jest na rysunku 3.2.
Analizator
Analizator przetwarza dzienniki wykonania i realizuje algorytmy oceny w celu przygotowania zbiorczych statystyk kampanii. Wyj´sciowe dane zapisywane s ˛a w formacie CSV15
15 Ang. Comma-separated Values.
Nadzorca QEMU SUT
setupConditionalFaultInjection()
obsługa emulowanej funkcji issueCommand()
conditionalFaultInjectionCallback()
Rysunek 3.2: Diagram sekwencji warunkowego wstrzykni˛ecia bł˛edu
pozwalaj ˛acym na wizualizacj˛e oraz dalsz ˛a analiz˛e przez operatora z u˙zyciem oprogramowania typu Microsoft Excel, czy pakietu R-project16.
Przeprowadzanie eksperymentów
Sposób wykonania pojedynczego testu umo˙zliwia uruchomienie wielu testów jednocze´snie.
Jest to istotna cecha, dzi˛eki której wykorzystane s ˛a mo˙zliwo´sci wieloprocesorowych systemów komputerowych do przeprowadzania eksperymentów na masow ˛a skal˛e. QEFI zostało wyposa˙zone w funkcj˛e uruchamiania wielu instancji testów jednocze´snie. Prawidłowe działanie takiej konfiguracji zostało zapewnione poprzez nast˛epuj ˛ace decyzje projektowe:
— ka˙zda para programów Nadzorca/QEMU uruchamiana jest w dedykowanym katalogu roboczym,
— ka˙zda para programów Nadzorca/QEMU wykorzystuje unikatowe numery portów dla poł ˛acze´n TCP/IP,
— liczby słu˙z ˛ace do inicjalizacji generatorów liczb pseudolosowych s ˛a przydzielane globalnie ka˙zdej instancji Nadzorcy17,
— obrazy dysków twardych emulowanych systemów komputerowych u˙zywane s ˛a w trybie migawki, czyli ˙zadna modyfikacja zawarto´sci dysku nie jest zapisywana do pliku obrazu, a jedynie przechowywana w pami˛eci przez czas działania SUT.
QEFI z powodzeniem zostało uruchomione na serwerach Instytutu Informatyki Politechniki Warszawskiej, dzi˛eki czemu mo˙zliwe było znaczne skrócenie czasu potrzebnego na
16 http://www.r-project.org
17 Generatory liczb pseudolosowych wykorzystywane s ˛a przy wyznaczaniu zaburzanych lokalizacji oraz w funkcji delayedF aultInjectionCallback przedstawionej w algorytmie 3.4.
przeprowadzanie eksperymentów. Kolejnym etapem zwi˛ekszaj ˛acym mo˙zliwo´sci równoległego uruchamiania testów byłoby przystosowanie QEFI do rozproszonych ´srodowisk typu cluster18 oraz grid19. Instytut Informatyki Politechniki Warszawskiej z powodzeniem opracował rozwi ˛azanie przeprowadzania eksperymentów SWIFI w ´srodowiskach rozproszonych [99, 100]. Przystosowanie QEFI do takiego trybu pracy wymagałoby opracowania nast˛epuj ˛acych mechanizmów:
— konfiguracji ´srodowiska QEFI na w˛ezłach przetwarzania,
— dystrybucji ´srodowiska eksperymentu,
— zbierania dzienników wykonania przeprowadzonych testów,
— automatyzacji działania w˛ezłów przetwarzania.
Mo˙zliwym rozwi ˛azaniem problemu konfiguracji w˛ezłów przetwarzania byłoby przygotowanie obrazu maszyny wirtualnej (plik o wielko´sci około 3GB), który zawierałby przygotowane
´srodowisko QEFI (skompilowane wersje programów Nadzorca oraz QEMU). Obraz nale˙załoby pobra´c na w˛ezły przetwarzania i uruchomi´c maszyn˛e wirtualn ˛a. Rozwi ˛azanie tego typu jest mniej pracochłonne od konfiguracji QEFI na ka˙zdym z w˛ezłów osobno, poniewa˙z maskowane s ˛a ró˙znice poszczególnych w˛ezłów przetwarzania (np. ró˙zne systemy operacyjne, inne wersje zainstalowanych bibliotek programistycznych). Dystrybucja ´srodowiska eksperymentu sprowadza si˛e do dystrybucji na w˛ezły przetwarzania trzech plików: obrazu dysku twardego SUT, konfiguracji QEMU dla SUT oraz konfiguracji Nadzorcy. Najwi˛ekszym z wymienionych plików jest obraz dysku SUT – w zale˙zno´sci od konfiguracji mo˙ze to by´c od kilkuset MB to kilkunastu GB. Natomiast zbieranie dzienników wykonania mo˙ze by´c realizowane poprzez automatyczne wysyłanie ich na dedykowany serwer plików. Oprogramowanie automatyzacji działania w˛ezłów przetwarzania powinno realizowa´c nast˛epuj ˛ace zadania:
automatyczne pobieranie ´srodowiska eksperymentu, przeprowadzenie eksperymentu oraz wysłanie dzienników wykonania przeprowadzonych testów do wskazanego repozytorium.