Architektura chmur i wirtualizacja Wykład 4 Wirtualizacja
Zawartość Wprowadzenie do wirtualizacji Warstwy i interfejsy Wirtualne maszyny i menedżery wirtualnych maszyn Wsparcie sprzętowe Bezpieczeństwo 2
Przegląd wirtualizacji
Obszary wirtualizacji David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications Wikipedia 4
Dlaczego wirtualizujemy? Można wyróżnić trzy klasy podstawowych abstrakcji potrzebnych do opisania działania systemów obliczeniowych: Interpretery (np. procesory, które przetwarzają informacje), Pamięć (np. podstawowa i drugorzędna dla przechowywania informacji), Łącza komunikacyjne (kanały komunikacyjne, które pozwalają różnym systemom komunikować się wzajemnie). Fizyczna realizacja każdej z tych abstrakcji może różnić się względem: Pasma (liczby operacji w jednostce czasu), Opóźnienia (czasy upływającego od rozpoczęcia operacji i otrzymania rezultatu), Niezawodności, Innych charakterystyk fizycznych. Systemy informatyczne, jak systemy operacyjne odpowiedzialne za zarządzanie zasobami systemowymi, są fizycznymi implementacjami tych trzech abstrakcji. 5
Dlaczego wirtualizujemy? Zarządzanie zasobami dla wspólnoty użytkowników z szerokim zakresem aplikacji działających pod różnymi systemami operacyjnymi stanowi skomplikowany problem. Zarządzanie zasobami staje się jeszcze bardziej złożone, kiedy zasoby są zbytnio obłożone, a użytkownicy nieskłonni do współpracy. Dodatkowo, poza czynnikami zewnętrznymi, na zarządzanie zasobami mają wpływ czynniki wewnętrze, takie jak: Heterogeniczność systemów sprzętowych i programowych, Możliwość oszacowania globalnego stanu systemu i redystrybucji obciążenia, Częstotliwość awarii różnych komponentów, Wiele innych czynników. 6
Dlaczego wirtualizujemy? Tradycyjnym rozwiązaniem dla centrum danych jest zainstalowanie standardowych systemów operacyjnych na poszczególnych systemach i opieranie się na konwencjonalnych technikach systemów operacyjnych w celu zapewnienia współdzielenia zasobów, ochrony aplikacji i izolacji działania. Administracji systemu, zarządzanie kontami, bezpieczeństwo i zarządzanie zasobami stanowią poważne wyzwanie dla dostawców usługi w takiej konfiguracji. Rozwój aplikacji i optymalizacja wydajności są równie problematyczne dla samych użytkowników. Alternatywę stanowi wirtualizacja zasobów. 7
Dlaczego wirtualizujemy? Wirtualizacja stanowi podstawowy dogmat cloud computing, upraszczając pewne zadania zarządzania zasobami. Na przykład, stan wirtualnej maszyny (virtual machine, VM) działającej pod monitorem wirtualnej maszyny (virtual machine monitor, VMM) może zostać zapisany i przeniesiony na inny serwer dla zrównoważenia obciążenia (load balancing). W tym samym czasie wirtualizacja pozwala użytkownikom działać w środowiskach, do których są przyzwyczajeni, zamiast przymuszania ich do specyficznych środowisk. 8
Dlaczego wirtualizujemy? Wirtualizacja symuluje interfejs fizycznego obiektu za pomocą dowolnych z czterech środków: Multipleksowanie tworzenie wielu wirtualnych obiektów z jednej instancji fizycznego obiektu, np.: Procesor jest multipleksowany pomiędzy pewną liczbą przetwarzanych wątków. Agregacja tworzenie jednego wirtualnego obiektu z wielu fizycznych obiektów, np.: Pewna liczba fizycznych dysków jest agregowana do dysku RAID. Emulowanie konstruowanie wirtualnego obiektu z fizycznego obiektu innego typu, np.: Dysk fizyczny emuluje RAM. Multipleksowanie i emulacja, np.: wirtualna pamięć ze stronicowaniem multipleksuje prawdziwą pamięć i dysk, a wirtualny adres emuluje rzeczywisty adres Protokół TCP emuluje niezawodny potok bitów (bit pipe) i multipleksuje fizyczny kanał komunikacyjny oraz procesor. 9
Dlaczego wirtualizujemy? Wirtualizacja oddziela znajdujące się poniżej zasoby i upraszcza ich używanie, izoluje użytkowników od siebie oraz wspiera replikację, która z kolei zwiększa elastyczność systemu. Wirtualizacja stanowi krytyczny aspekt cloud computing, na równi ważny dla dostawców i konsumentów usług chmurowych oraz odgrywa ważną rolę dla: Bezpieczeństwa systemu, pozwalając na izolację usług działających na tym samym sprzęcie, Wydajności i niezawodności, pozwalając aplikacjom migrować z jednej platformy na inną, Wytwarzania i zarządzania usługami oferowanymi przez dostawcę, Izolacji działania (performance isolation). 10
Wirtualizacja w chmurze W środowisku cloud computing monitory wirtualnej maszyny działają na fizycznym sprzęcie i eksportują abstrakcje poziomu sprzętowego do jednego lub większej liczby obsługiwanych systemów operacyjnych gościa (guest operating systems). Taki system operacyjny wchodzi w interakcję z wirtualnym sprzętem w taki sam sposób, jakby działał na sprzęcie fizycznych, jednak pod czujnym okiem VMM, który przechwytuje wszystkie operacje uprzywilejowane (privileged operations) i odpowiada za mediacje interakcji systemu operacyjnego gościa ze sprzętem. Na przykład, VMM kontroluje operacje IO dwóch wirtualnych dysków zaimplementowanych jako dwa niezależne zbiory ścieżek dysku fizycznego. Nowe usługi mogą zostać dodane bez potrzeby modyfikacji systemu operacyjnego. 11
Wirtualizacja w chmurze Wygoda użytkownika jest koniecznym warunkiem dla sukcesu paradygmatu obliczeń użytkowych Jednym z wielu aspektów wygody użytkownika jest możliwość zdalnego uruchamiania przy użyciu oprogramowania systemowego i bibliotek wymaganych przez aplikację. Wygoda użytkownika jest główną zaletą architektury wirtualnej maszyny względem tradycyjnych systemów operacyjnych Użytkownik AWS może skonfigurować AMI (Amazon Machine Image) zawierający aplikacje, biblioteki, dane i powiązane ustawienia konfiguracyjne. Użytkownik może wybrać system operacyjny dla aplikacji, a następnie uruchamiać, zatrzymywać i monitorować tyle instancji AMI, ile tylko potrzebuje, używając API usług sieciowych oraz narzędzi monitorujących wydajność i ułatwiających zarządzanie dostarczanych przez AWS. 12
Wady wirtualizacji Istnieją efekty uboczne wirtualizacji, głównie spadek wydajności i koszty sprzętu: Wszystkie uprzywilejowane operacje wirtualnej maszyny muszą być przechwytywane i walidowane przez VMM, który ostatecznie odpowiada za kontrolę nad zachowaniem systemu, co ma negatywny wpływ na wydajność. Koszt sprzętu dla wirtualnej maszyny jest wyższy niż koszt dla systemu obsługującego tradycyjny system operacyjny, ponieważ sprzęt fizyczny jest współdzielony pomiędzy zbiorem systemów operacyjnych gościa i zazwyczaj jest konfigurowany z szybszymi wielordzeniowymi procesorami, większą pamięcią, większymi dyskami i dodatkowymi interfejsami sieciowymi. 13
Warstwy i wirtualizacja
Warstwy Powszechnym podejściem do zarządzania złożonością systemu jest identyfikacja zbioru warstw z dobrze określonymi interfejsami pomiędzy nimi interfejsy oddzielają różne poziomy abstrakcji. Warstwowanie minimalizuje interakcje między podsystemami i upraszcza opis podsystemów Każdy podsystem jest abstrahowany przez jego interfejsy do innych podsystemów, czyli jesteśmy w stanie zaprojektować, zaimplementować i zmodyfikować poszczególne podsystemy całkowicie niezależnie. 15
Warstwy Komponenty oprogramowania, wliczając aplikacje, biblioteki i systemy operacyjne, wchodzą w interakcję ze sprzętem przez szereg interfejsów: API (Application Programming Interface), ABI (Application Binary Interface), ISA (Instruction Set Architecture). 16
Warstwy Interfejsy pomiędzy komponentami oprogramowania i sprzętem Aplikacja używa funkcji bibliotecznych (A1), wykonuje wołania systemowe (A2) i wykonuje instrukcje maszynowe (A3) 17
Warstwy i interfejsy Systemy komputerowe są całkiem złożone i ich działanie jest najłatwiejsze do zrozumienia, kiedy rozważamy model z wyraźnymi warstwami komunikującymi się przez dedykowane interfejsy: Sprzęt składa się z jednego lub więcej wielordzeniowych procesorów, System łączy (przez jedną lub więcej szyn) jednostkę zarządzania pamięcią (memory translation unit), pamięć główną i urządzenia IO, włączając jeden lub więcej interfejsów sieciowych. Aplikacje napisane głównie w językach wysokiego poziomu (high level languages, HLL) często wołają moduły biblioteczne i są skompilowane do kodu obiektowego, Uprzywilejowane operacje, takie jak żądania IO, nie mogą być wykonywane w trybie użytkownika, zamiast tego aplikacja i moduły biblioteczne używają wołań systemowych i to system operacyjny określa, czy operacje uprzywilejowane wymagane przez aplikację nie zaburzają bezpieczeństwa lub integralności systemu i, jeżeli tak, wykonuje je w imieniu użytkownika, Binaria wynikające z tłumaczenia programów HLL są zorientowane na specyficzną architekturę sprzętową. 18
ISA ISA (Instruction Set Architecture) stanowi granicę między sprzętem i oprogramowaniem. Definiuje zbiór instrukcji procesora: Np. architektura Intela jest reprezentowana przez zbiory instrukcji x86-32 (systemy 32- bitowe) i x86-64 (systemy 64- bitowe). 19
ISA Sprzęt obsługuje dwa tryby wykonywania Uprzywilejowany (privileged mode, kernel mode), Użytkownika (user mode). Zbiór instrukcji składa się z dwóch podzbiorów: Instrukcji uprzywilejowanych, które mogą być wykonywane tylko w trybie uprzywilejowanym, Instrukcji nieuprzewilejowanych, które są wykonywane w trybie użytkownika. Istnieją także wrażliwe (sensitive) instrukcje, które mogą być wykonywane w obydwu trybach, ale zachowują się wtedy odmiennie. 20
ABI ABI (Application Binary Interface) pozwala zespołowi złożonemu z aplikacji i modułów bibliotecznych na dostęp do sprzętu. ABI nie zawiera instrukcji uprzywilejowanych i nieuprzywilejowanych, zamiast tego używa wołań systemowych. 21
API API (Application Program Interface) definiuje zbiór instrukcji, do których wykonywania został zaprojektowany sprzęt i daje aplikacji dostęp do ISA. Zawiera wołania biblioteczne HLL, które często uruchamiają wołania systemowe. Proces stanowi abstrakcję kodu aplikacji w czasie wykonania Wątek to tzw. lekki (light- weight) proces. ABI jest projekcją systemu komputerowego widzianą przez proces, a API jest projekcją systemu z perspektywy programu HLL. 22
Wykonywanie HLL Kod HLL może zostać przetłumaczony dla specyficznej architektury i systemu operacyjnego. Kod ten może być także skompilowany na kod przenośny, który następnie jest tłumaczony dla systemów o różnych ISA. Kod współdzielony/dystrybuowany jest kodem obiektowym w pierwszym przypadku, a kodem przenośnym w drugim. 23
Wykonywanie HLL 24
Wykonywanie HLL Oczywiście binaria utworzone przez kompilator dla specyficznego ISA i systemu operacyjnego nie są przenośne. Taki kod nie może być wykonywany na komputerze o innym ISA, ani na komputerze o tym samym ISA, ale innym systemie operacyjnym. Można jednak skompilować program HLL na środowisko wirtualnej maszyny, gdzie kod przenośny jest wytwarzany i dystrybuowany, a następnie konwertowany przez binarne translatory zgodnie z ISA systemu gospodarza. Dynamiczne tłumaczenie binarnie zamienia bloki instrukcji gościa z kodu przenośnego na instrukcje gospodarza i prowadzi do znacznej poprawy wydajności, gdyż takie bloki są cache owane i używane ponownie. 25
Monitory wirtualnej maszyny
VMM lub hiperwizor Monitor wirtualnej maszyny (virtual machine monitor, VMM), zwany także hiperwizor (hypervisor), jest oprogramowaniem, które bezpiecznie partycjonuje zasoby systemu komputera na jedną lub więcej wirtualnych maszyn. System operacyjny gościa jest systemem operacyjnym, który działa pod kontrolą VMM zamiast bezpośrednio na sprzęcie. VMM działa w trybie uprzywilejowanym (kernel), podczas gdy system gościa pracuje w trybie użytkownika. Czasami sprzęt wspiera trzeci tryb wykonywania dla systemu gościa. 27
VMM lub hiperwizor VMMy pozwalają na szereg operacji systemowych wykonywanych równolegle na jednej platformie sprzętowej. Wymuszają izolację pomiędzy tymi systemami ze względów bezpieczeństwa. VMM kontroluje, w jaki sposób system gościa używa zasoby sprzętowe. Zdarzenia w jednej VM nie wpływają na żadną inną VM pracującą pod tym samym VMM. VMM umożliwia: Dzielenie platformy pomiędzy różnymi usługami, Przenoszenie serwera z jednej platformy na inną (tzw. live migration), Modyfikację systemu z zachowaniem wstecznej kompatybilności do oryginalnego systemu. 28
VMM lub hiperwizor Kiedy system gościa próbuje wykonać uprzywilejowaną instrukcję, VMM przechwytuje tę operację i wymusza jej poprawność i bezpieczeństwo. VMM gwarantuje izolację poszczególnych wirtualnych maszyn i dlatego zapewnia bezpieczeństwo i enkapsulację główne obawy związane z cloud computing. W tym samym czasie VMM monitoruje działanie systemu i podejmuje akcje poprawcze w celu uniknięcia obniżenia wydajności, np.: VMM może przerzucić (swap out) wirtualna maszynę (kopiując jej wszystkie strony z rzeczywistej pamięci na dysk i czyniąc ramki pamięci rzeczywistej dostępne do stronicowania przez inne VM) w celu uniknięcia thrashingu. 29
VMM lub hiperwizor VMM wirtualizuje CPU i pamięć, np.: Przechwytuje przerwania i rozdziela je do indywidualnych systemów operacyjnych gościa, Jeżeli system gościa uniemożliwia przerwania, VMM buforuje je do czasu, kiedy system ten je umożliwi. VMM utrzymuje w tle (shadow) zduplikowaną tabelę stron dla każdego systemu gościa i replikuje każdą modyfikację dokonaną przez system gościa w jego własnej zduplikowanej tabeli. Ta tabela jest rzeczywista ramką strony i jest używana przez komponent sprzętowy zwany jednostka zarządzania pamięcią (memory management unit, MMU) dla dynamicznego tłumaczenia adresów. 30
Wirtualizacja pamięci Wirtualizacja pamięci wpływa istotnie na wydajność. VMM może używać różnych technik optymalizacyjnych, np.: System VMware unikają duplikowania stron pomiędzy różnymi wirtualnymi maszynami, utrzymując jedynie jedną kopię dzielonej strony i używają polityk kopiowania przy zapisie (copy- on- write), Xen wymusza całkowitą izolację VM i nie pozwala na dzielenie stron. VMMy kontrolują zarządzanie wirtualną pamięcią i decydują, które strony mają zostać przerzucone (swap out), np. Kiedy ESX VMware Server chce przerzucić strony, używa procesu balonowego wewnątrz systemu gościa i żąda, żeby ten zaalokował dla siebie więcej stron, co powoduje przerzucenie stron jakiegoś innego procesu działającego pod tą wirtualną maszyną. Następnie wymusza na procesie balonowym zwolnienie sterowania z wolnych ramek stron. 31
Dostępne hiperwizory Istnieją trzy wiodące hiperwizory open- source: Kernel- based Virtual Machine (KVM), Xen, QEMU Microsoft Azure używa swojego własnego. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 32
KVM KVM jest rozwijany i utrzymywany przez www.linux- kvm.org Został przyjęty przez popularną dystrybucję Red Hat, Bieżący FAQ (http://www.linuxkvm.org/page/faq) zawiera informacje o wspieranych procesorach. KVM oferuje możliwości migracji w celu przeniesienia wirtualnych maszyn z jednego hosta na inny bez konieczności ich wyłączania. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 33
Xen Xen jest rozwijany i utrzymywany przez wspólnotę www.xenproject.org i jest darmowym rozwiązaniem licencjonowanym pod GNU GPL Dostosowana wersja Xen obsługuje Amazon EC2. Xen zapewnia wsparcie dla procesorów x86, x86-64, Itanium, Power PC i ARM, co pozwala mu działać na szerokim zakresie urządzeń Citrix dostarcza darmową wersję Xena, nazwaną XenServer, która wspiera 64- bitowe wersje procesorów Intela i AMD. Obecnie Xen wspiera Linuxa, NetBSD, FreeBSD, Solaris, Windows i inne popularne systemy gościa. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 34
QEMU QEMU jest generycznym open- source owym emulatorem maszyny i wirtualizerem. Kiedy jest używany jako emulator maszyny, może wykonywać system operacyjny i programy dla jednej maszyny (np. płyty ARM) na innej maszynie (np. naszym PC), Poprzez dynamiczną translację uzyskuje bardzo dobrą wydajność, Używany jako wirtualizer, osiąga wydajność zbliżoną do natywnej za pomocą wykonywania kodu gościa bezpośrednio na CPU gospodarza. QEMU wspiera wirtualizację kiedy działa pod Xenem lub używając modułu jądra KVM na Linuksie. W drugim przypadku może wirtualizować gości x86, serwer i wbudowany Power PC oraz S390. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 35
KVM a Xen Xen jest hiperwizorem zewnętrznym zakłada kontrolę nad maszyną i dzieli zasoby pomiędzy gości. Natomiast KVM jest częścią Linuksa i używa zwykłego linuksowego schedulera i zarządzania pamięcią Oznacza to, że KVM jest znacznie mniejszy i łatwiejszy w użyciu, zapewnia także niektóre cechy niedostępne w Xenie. Np. KVM może przerzucać gości z dysku do wolnej pamięci RAM. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 36
KVM a Xen KVM działa tylko na procesorach wspierających sprzętowe wirtualne maszyny x86 (hardware virtual machines, HVM), technologię wirtualizacji Intela (Virtualization Technology, VT) i instrukcje AMD SVM (Secure Virtual Machine), znane jako VT/SVM. Xen pozwala za to na uruchamianie zmodyfikowanych systemów operacyjnych na nie- HVTowych procesorach używając techniki parawirtualizacji. KVM nie wspiera parawirtualizacji dla CPU, ale może wspierać parawirtualizację dla sterowników urządzeń dla poprawienia wydajności IO. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 37
KVM a QEMU QEMU używa emulacji. KVM używa rozszerzeń procesorów (HVM) dla wirtualizacji. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 38
Parallels Parallels, Inc. oferuje produkt dla środowisk Apple Mac, Parallels Desktop for Mac, które jest oparte na technologii hiperwizorów. Parallels Server for Mac jest serwerem wirtualizacji także opartym na hiperwizorach. Umożliwia menedżerom IT uruchamianie wielu instancji Windows, Linux i Mac OS X Server na pojedynczym Mac Xserve (linia Apple serwerów montowanych na rackach 1U). Jest to obecnie jedyne serwerowe rozwiązanie wirtualizacyjne dla platformy Mac OS X Server, które pozwala użytkownikom wirtualizować Mac OS X Leopard Server. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 39
Microsoft Azure i Hyper- V Microsoft włączył hiperwizor Hyper- V do Microsoft Server 2008 (nazwa kodowa Viridian) Hyper- V dostępny jest także bezpłatnie w okrojonej samodzielnej wersji. Hyper- V, który zapewnia izolację na poziomie partycji, nie jest podstawą hiperwizora w Microsoft Azure. Hiperwizor Azure, jak reszta platformy, od samego początku jest zoptymalizowany na wieloużytkownikowość (multi- tenancy). Hiperwizor Windows Azure jest ściśle zoptymalizowany z jądrem Windows Azure. Jednakże Microsoft stwierdził, że niektóre z cech hiperwizora Azure zostaną włączone do następnej wersji Hyper- V. David E.Y. Sarna, "Implementing and Developing Cloud Computing Applications 40
Wirtualne maszyny
Wirtualna maszyna Wirtualna maszyna (virtual machine, VM) jest izolowanym środowiskiem, które jawi się jako cały komputer, jednak posiada dostęp jedynie do części zasobów. Każda wirtualna maszyna wydaje się działać bezpośrednio na sprzęcie, powodując wrażenie wielu instancji jednego komputera, mimo że wszystkie są obsługiwane przez pojedynczy system fizyczny. Wirtualne maszyny używane są od początku lat 70 XX w, kiedy IBM wypuścił system operacyjny VM 370. 42
Typy VM Procesowa VM jest wirtualną platformą utworzoną dla indywidualnego procesu i niszczoną zaraz po jego zakończeniu. Praktycznie wszystkie systemy operacyjne dostarczają procesowe VM dla każdej działającej aplikacji, jednak bardziej interesującymi procesowymi VM są te, które obsługują binaria skompilowane dla innych zbiorów instrukcji. Systemowa VM wspiera system operacyjny razem z wieloma procesami użytkownika. Kiedy VM działa pod kontrolą normalnego systemu operacyjnego i dostarcza niezależnego od platformy gospodarza (host) dla pojedynczej aplikacji, mamy do czynienia z aplikacyjną VM (np. Java Virtual Machine, JVM). Systemowa VM dostarcza kompletny system. Każda VM może uruchamiać własny OS, który z kolei może uruchamiać wiele aplikacji. Systemy takie jak Linux Vserver, OpenVZ, FreeBSD Jails i Solaris Zones oparte na Linuksie, FreeBSD i Solaris, odpowiednio, implementują techniki wirtualizacji na poziomie systemowym. 43
Systemowe VMy Wirtualizacja na poziomie systemu operacyjnego pozwala fizycznemu serwerowi uruchamiać liczne izolowane instancje systemu operacyjnego (z pewnymi ograniczeniami) Na przykład OpenVZ wymaga, żeby zarówno instancje systemu gospodarza jaki i gościa były dystrybucjami Linuksa. Dzięki temu oferuje poprawę wydajności względem systemów opartych na VMM (np. Xen lub VMware) spadek wydajności OpenVZ względem samodzielnej instancji Linux to tylko 1-3 %. Instancje zwane są kontenerami (containers), wirtualnymi prywatnymi serwerami (virtual private server, VPS) lub po prostu wirtualnymi środowiskami (virtual environments, VE) 44
Stosy systemowych VM Istnieje kilka możliwości organizacji stosu oprogramowania dla systemowych VM: Tradycyjna, Hybrydowa, Hostowana. Są to klasy VM dla systemów o tym samym ISA. 45
Stosy systemowych VM Tradycyjna VM: VMM wspiera wiele wirtualnych maszyn i działa bezpośrednio na sprzęcie. Hybrydowa VM: VMM współdzieli sprzęt z systemem operacyjnym gospodarza i wspiera wiele wirtualnych maszyn. Hostowana VM: VMM działa na systemie operacyjnym gospodarza. 46
Stosy systemowych VM Tradycyjne VM, zwane także bare metal VMM, stanowią ciekną warstwę oprogramowania, które działa bezpośrednio na sprzęcie maszyny hosta Podstawową zaletą jest wydajność, Przykłady: VMWare ESX, ESXi Servers, Xen, OS370 i Denali, Hybrydowe VM VMM dzieli sprzęt z istniejącym systemem operacyjnym Przykład: VMWare Workstation. 47
Stosy systemowych VM Hostowane VM działa w ramach istniejącego systemu operacyjnego Główną zaletą podejścia jest to, że VM jest łatwiejsza do zbudowania i zainstalowania. Ponadto, VMM może używać szeregu komponentów systemu gospodarza, takich jak scheduler, pager i sterowniki IO zamiast dostarczania własnych. Ceną za to ułatwienie jest zwiększony narzut i związana z nim utrata wydajności. Operacje IO, błędy stron i żądania planowania (scheduling requests) z systemu gościa nie są obsługiwane bezpośrednio przez VMM, ale przykazywane do systemu gospodarza. Wydajność oraz wyzwania związane ze wspieraniem całkowitej izolacji VM sprawiają, że to rozwiązanie jest mniej atrakcyjne dla serwerów w środowiskach chmurowych. Przykład: User- mode Linux. 48
Izolacja działania i bezpieczeństwa
Izolacja działania Izolacja działania jest krytycznym warunkiem dla zapewnienia QoS (quality of service) we współdzielonych środowiskach obliczeniowych. Jeżeli na zachowanie czasu wykonywania (run- time) aplikacji mają wpływ inne aplikacje działające równolegle i konkurujące o cykle CPU, cache, pamięć główną dysk i dostęp do sieci, jest raczej ciężko przewidzieć czas zakończenia zadania. Ponadto, jest równie ciężko zoptymalizować aplikację. 50
Wirtualizacja procesora Wirtualizacja procesora prezentuje wiele kopii tego samego procesora (lub rdzenia w systemach wielordzeniowych). Kod jest wykonywany bezpośrednio na sprzęcie, podczas gdy emulacja procesora przedstawia model innego systemu sprzętowego. Emulowanie instrukcji w oprogramowaniu jest znacznie wolniejsze niż wirtualizacja. Przykładem jest VirtualPC Microsoftu, który może działać na chipsetach innych niż rodzina x86 Był używany na sprzęcie Mac zanim Apple przeszedł na procesory Intela. 51
Izolacja działania Tradycyjne systemy operacyjne multipleksują wiele procesów lub wątków, podczas gdy wirtualizacja wspierana przez VMM multipleksuje cały system operacyjny. Oczywiście pojawia się spadek wydajności, ponieważ system operacyjny jest znacznie cięższy niż proce i narzut przełączania kontekstu jest znacznie większy. VMM wykonuje bezpośrednio na sprzęcie podzbiór często używanych instrukcji maszynowych generowanych przez aplikację i emuluje uprzywilejowane instrukcje, włącznie z żądaniami urządzeń IO. Podzbiór instrukcji wykonywanych bezpośrednio na sprzęcie zawiera instrukcje arytmetyczne, dostęp do pamięci i instrukcje rozgałęziania (branching). 52
Izolacja działania Systemy operacyjne używają abstrakcji procesu nie tylko dla współdzielenia zasobu, ale także dla wspierania izolacji. Niestety, nie wystarcza to z perspektywy bezpieczeństwa kiedy proces jest przejęty, hakerowi jest względnie łatwo spenetrować cały system. Z drugiej strony, oprogramowanie działające na wirtualnej maszynie ma własne ograniczenia swojego dedykowanego sprzętu ma dostęp tylko do wirtualnych urządzeń emulowanych przez oprogramowanie. Ta warstwa oprogramowania ma potencjał zapewnienia poziomu izolacji niemalże równego izolacji prezentowanej przez dwa różne systemy fizyczne. Dlatego wirtualizacja może zostać użyta dla podniesienia bezpieczeństwa w środowiskach chmurowych. 53
Izolacja bezpieczeństwa VMM jest systemem zacznie prostszym i lepiej wyspecyfikowanym niż tradycyjny system operacyjny. Na przykład, VMM Xena ma około 60 000 linii kodu, a VMM Denali ma tylko połowę tego. Podatność bezpieczeństwa VMM jest znacznie ograniczona, ponieważ system eksponuje znacznie mniejszą liczbę uprzywilejowanych funkcji. Na przykład, dostęp do VMM Xena można uzyskać przez 28 hiper- wywołań (hypercalls), podczas gdy standardowy Linux pozwala na setki (np. Linux 2.6.11 ma 289 wywołań systemowych). Dodatkowo do obfitość wywołań systemowych, tradycyjny system operacyjny obsługuje urządzenia specjalne (np. /dev/ kmem) i wiele uprzywilejowanych programów pochodzenia zewnętrznego (third- party), np. sendmail czy sshd. 54
Pełna wirtualizacja i parawirtualizacja
Warunki wirtualizacji W 1974 Gerald J. Popek i Robert P. Goldberg określili zbiór warunków wystarczających dla architektury komputerowej do wspierania wirtualizacji i zapewnienia wydajnego działania VMM: Program działający pod VMM powinien prezentować zachowanie zasadniczo identyczne z tym, które demonstruje działając bezpośrednio na równoważnej maszynie, VMM powinien w pełni kontrolować wirtualizowane zasoby. Statystycznie istotna część instrukcji maszynowych musi być wykonywana bez interwencji VMM. 56
Warunki wirtualizacji Innym sposobem identyfikacji architektury odpowiedniej dla wirtualnej maszyny jest wyróżnienie dwóch klas instrukcji maszynowych: Wrażliwych (sensitive), które wymagają specjalnych środków bezpieczeństwa w czasie wykonywania Control- sensitive, które usiłują zmienić alokację pamięci lub tryb uprzywilejowania, Mode- sensitive, których zachowanie jest inne w trybie uprzywilejowanym. Niewrażliwych (innocuous), pozbawionych efektów ubocznych (side effects). 57
Warunki wirtualizacji Równoważne sformułowanie warunków dla wydajne wirtualizacji może zostać oparte na klasyfikacji instrukcji maszynowych: Można skonstruować VMM dla trzeciej lub późniejszej generacji komputerów, jeżeli zbiór wrażliwych instrukcji jest podzbiorem instrukcji uprzywilejowanych dla tej maszyny. Dla obsługi instrukcji niewirtualizowalnych można określić dwie strategie: Translacja binarna VMM monitoruje działania systemu operacyjnego gościa i niewirtualizowalne instrukcje wykonywane przez ten system są zamieniane na inne instrukcje. Parawirtualizacja system operacyjny gościa zostaje zmodyfikowany tak aby używał jedynie instrukcji, które mogą być wirtualizowane. 58
Dwa podejścia Istnieją dwa podstawowe podejścia do wirtualizacji procesora: Pełna wirtualizacja, kiedy każda VM działa na dokładnej kopii rzeczywistego sprzętu Przykład: VMM Vmware. Parawirtualizacja, kiedy każda VM działa na lekko zmodyfikowanej kopii rzeczywistego sprzętu Przykład: Xen i Denali. Powody dla częstego używania parawirtualizacji są następujące: Pewne aspekty sprzętu nie mogą zostać zwirtualizowane, Poprawa wydajności, Przedstawienie prostszego interfejsu. 59
Pełna a parawirtualizacja Pełna wirtualizacja wymaga aby warstwa abstrakcji sprzętowej systemu operacyjnego gościa posiadała pewną wiedzę o sprzęcie. Parawirtualizacja unika tego wymagania i pozwala na pełną kompatybilność na poziomie ABI (Application Binary Interface). 60
Pełna a parawirtualizacja Pełna wirtualizacja wymaga wirtualizowalnej architektury Sprzęt zostaje w pełni wystawiony dla systemu gościa, który działa niezmieniony, co zapewnia wydajność tego trybu bezpośredniego wykonywania. Parawirtualizacja jest stosowana, ponieważ niektóre architektury (jako x86) nie są łatwo wirtualizowane Parawirtualizacja wymaga, aby system gościa został zmodyfikowany dla działania pod VMM, Dodatkowo kod systemu gościa musi być przeniesiony (ported) dla indywidualnych platform sprzętowych. 61
Pełna a parawirtualizacja Systemy takie jak VMware EX Server wspierają pełną wirtualizacje na architekturze x86. Wirtualizacja MMU (Memory Management Unit) oraz fakt, że uprzywilejowane instrukcje wykonywane przez system gościa zostają po cichu stłumione stawia pewne wyzwania, np.: Dla poradzenia sobie z drugim problemem należy ustawić pułapki wszędzie, gdzie instrukcje uprzywilejowane są wysyłane z systemu gościa, System musi także utrzymywać w tle kopie (shadow copies) wszystkich struktur kontrolnych, jak tabeli stronicowania, i przechwytywać zdarzenia wpływające na stan tych struktur, Narzut wynikający z wieli operacji jest kluczowy. 62
Wydajność a izolacja cache u Wydajność aplikacji pod wirtualną maszyną ma znaczenie krytyczne W ogólnym przypadku wirtualizacja dodaje pewien poziom narzutu, który negatywnie wpływa na wydajność. W niektórych przypadkach aplikacja działająca pod wirtualną maszyna działa sprawniej niż na klasycznym systemie operacyjnym Dzieje się tak w przypadku polityki zwanej izolacją cache u (cache isolation). Cache zazwyczaj nie jest równomiernie podzielony pomiędzy procesami działającymi pod klasycznym systemem operacyjnym, ponieważ jakiś proces może używać przestrzeni cache u lepiej niż inny. 63
Wydajność a izolacja cache u Na przykład: W przypadku dwóch procesów, jednego niewrażliwego na zapis (write- intensive) i drugiego na odczyt (read- intensive), cache może zostać agresywnie zapełniony przez pierwszy z nich. W przypadku polityki izolacji cache u, cache zostaje podzielony pomiędzy wirtualnymi maszynami, co skutkuje poprawą jego wykorzystania dla procesów działających na różnych wirtualnych maszynach. 64