Sprzętowa akceleracja wirtualizacji

Ogromna popularność rozwiązań wirtualizacjnych powoduje, że przy konstrukcji platform serwerowych coraz mocniej brane są pod uwagę wymagania jakie one stawiają. Odpowiedni zestaw instrukcji procesora, fizyczne przydzielanie portów sieciowych czy zasobów dyskowych zapewni pełne wykorzystanie możliwości sprzętu i zniweluje wzajemny wpływ maszyn wirtualnych uruchomionych na jednym hoście.

Obecnie stosowane oprogramowanie wirtualizacyjne coraz częściej wykorzystuje sprzętowe wsparcie oferowane przez komponenty serwera. Zapewnia to korzystniejsze wykorzystanie zasobów niż w przypadku wirtualizacji programowej. Do mechanizmów wirtualizacji zaszytych w wewnątrz procesora w postaci dodatkowego zestawu instrukcji z biegiem czasu dołączane są kolejne podzespoły serwera – w tym równie krytyczne dla jego wydajności – interfejsy dostępu do pamięci masowej oraz sieci. Zmiany w tym zakresie powodują duży wzrost wydajności wirtualnych maszyn poprzez eliminację konkurencji w dostępie do fizycznych zasobów przez maszyny. Odciążony jest także host, na którym uruchamiamy wirtualne maszyny.

Grunt to procesor

Pierwszą linią akceleracji sprzętowej w systemach wirtualnych jest serce serwera czyli procesor.

Wykorzystanie sprzętowego wsparcia dla wirtualizacji pozwala na uruchomienie systemu gościa w specjalnym trybie zwanym guest mode. Kod systemu gościa, niezależnie czy jest to kod aplikacji czy uprzywilejowany pracuje w tym trybie. W określonych wypadkach procesor może opuścić tryb gościa i przejść do trybu root. Wtedy wirtualizator uruchamia tryb root, sprawdza powód dla którego został wywołany, wykonuje wymagane akcje i restartuje system gościa w trybie gościa.

Sprzętowe wsparcie procesora w wirtualizacji (np. Intel VT czy AMD-V) zapewnia, że nie ma potrzeby tłumaczenia kodu, dzięki czemu wydajność procesora może być bliska natywnej wydajności przypisanych do maszyny rdzeni procesora hosta. Są jednak wypadki, w których opisany mechanizm przejścia z trybu gościa do trybu root występuje bardzo często, co może spowodować zamiast wzrostu wydajności jej zdecydowane obniżenie. Dzieje się tak w przypadku obciążeń, które generują częste aktualizacje w tablicach stronicowania.

Mechanizmy i specjalne instrukcje sprzętowo wspierające wirtualizację są obecne praktycznie we wszystkich produkowanych obecnie serwerowych procesorach Intela, AMD czy ARM. Rozszerzenia wirtualizacyjne znajdziemy także w procesorach przeznaczonych na stacje robocze, usunięto je w niektórych procesorach przeznaczonych do urządzeń mobilnych, które dużo rzadziej poddawane są wirtualizacji.

Przyspieszanie wejścia-wyjścia

Równie istotnym elementem, jak obsługa „wirtualnych” instrukcji i mechanizmów w samym procesorze jest wsparcie dla wirtualizacji operacji wejścia wyjścia. Zapewnienie bezpośredniego dostępu do zasobów urządzeń sprzętowych podłączonych do serwera może znacznie podnieść wydajność.

Bazujące na oprogramowaniu metody wykorzystują emulację urządzeń wejśca-wyjścia. Warstwa emulatora udostępnia urządzenia dla wirtualnych maszyn w sposób współdzielony, co może spowolnić działanie urządzeń o wysokiej przepustowości operacji I/O. Mechanizmy sprzętowego wsparcia wirtualizacji, takie jak Intel VT-d Czy AMD IOMMU (Input Output Memory Management Unit) pozwalają na bezpośrednie przypisane urządzeń do VM.

W tym rozwiązaniu wirtualizator kontroluje bezpośrednie przypisane urządzeń do partycji. Zamiast uruchamiać wirtualizator dla wszystkich lub większości żądań I/O dla partycji, jest on wywoływany tylko gdy oprogramowanie gościa próbuje uzyskać dostęp do chronionych zasobów, które mają wpływ na funkcjonowanie systemu i izolację. Takie zasoby to np. konfiguracja I/O czy zarządzanie przerwaniami. Aby wspierać bezpośrednie przypisywanie urządzeń, wirtualizator wymusza izolację żądań DMA. Urządzenia wejścia-wyjścia mogą być przypisywane do domen a sprzętowe elementy służące do przepisywania DMA są używane do zastrzegania DMA danego urządzenia do fizycznej pamięci będącej w dyspozycji domeny.

Kiedy uruchamiana jest wirtualna maszyna, przestrzeń adresowa gościa (Guest Physical Address) może nie odpowiadać rzeczywistej przestrzeni adresowej hosta (Host Physical Address). Urządzenia korzystające z DMA wymagają HPA, aby transferować dane do i z fizycznych lokalizacji w pamięci. W modelu bezpośredniego przypisania, system operacyjny gościa kontroluje urządzenie i dostarcza mu adres GPA zamiast HPA. Chipset przepisujący DMA (DMA remapping) dokonuje odpowiedniej konwersji. Ponieważ wirtualizator zna GPA, wie również o wyniku konwersji z GPA na HPA. Dzięki przemapowaniu dane mogą być przetransferowane do właściwego bufora bez konieczności wykorzystania mechanizmów emulacji programowej.

Akceleracja interfejsów sieciowych

Szczególnym przypadkiem urządzenia wejścia-wyjścia, od którego wydajności zależy właściwie większość obecnych aplikacji jest karta sieciowa. Również dla interfejsów sieciowych powstały specjalne technologie i rozszerzenia przyspieszające ich pracę w środowiskach wirtualnych i odciążające od ich obsługi oprogramowanie wirtualizatora. W przypadku rozwiązań Intela możliwości te kryją się pod oznaczeniem Intel VT-c. W ramach tego rozwiązania dostępne są dwa mechanizmy – Virtual Machine Device Queues (VMDQ) oraz PCI-SIG Single Root I/O Virtualization (SR-IOV). W pierwszym przypadku wydajność w środowisku zwirtualizowanym zwiększana jest poprzez wsparcie systemu w takich operacjach jak sortowanie i ruting z wirtualnego przełącznika do karty sieciowej. W połączeniu z takimi rozwiązaniami jak VMware NetQueue czy Microsoft Virtual Machine Queues, VMDQ pozwala na sterowanie i równoważenie przepustowości łącza pomiędzy wieloma kolejkami sprzętowymi kart sieciowych.

Rozwiązanie SR-IOV pozwala na podział na partycje – wirtualne porty pojedynczego portu karty sieciowej. Administrator może wykorzystać te porty do stworzenia wielu izolowanych połączeń do maszyn wirtualnych.

Pamięć masowa na dopalaczu

Wirtualna maszyna może być podłączona do pamięci masowej na różne sposoby. Najprostszy to dysk lokalny (np. VMware VMFS local disk). Kolejna metoda to system plików maszyny wirtualnej na urządzeniu SAN. Na macierzy SAN można przechowywać dane także w trybie LUN. Możemy także skorzystać z sieciowego systemu plików NFS/CIFS na macierzach NAS.

Akceleracja sprzętowa blokowych pamięci masowych jest dostępna w VMware ESXi 4.1 lub nowszym oraz wirtualizatorach Microsoft i Citrix. Oprócz odpowiedniej wersji oprogramowania wymagane jest także posiadanie pamięci masowej wspierającej mechanizmy akceleracji. W przypadku hosta nie jest wymagana dodatkowa konfiguracja – przyspieszanie uruchamiane jest domyślnie. Wymagana jest tylko konfiguracja właściwej funkcji w urządzeniu. Akceleracja sprzętowa pamięci masowej SAN wpływa na szybkość takich procesów jak migracja maszyn wirtualnych, tworzenie i uruchamianie maszyn z template, klonowanie, zapis danych na dyski wirtualne oraz tworzenie konfiguracji maszyn fault-tolerant.

Implementacja funkcjonalności akceleracji sprzętowej obywa się w przypadku VMware z wykorzystaniem architektury Pluggable Storage Architecture (PSA), która stanowi połączenie wtyczek (plug-in) integracyjnych, nazywanych VAAI plug-in i filtrów integracyjnych VAAI. Architektura PSA automatycznie ładuje odpowiedni plug-in i filtr. W vSphere 5 dodatkowo wspierany jest standard T10 SCSI.

Piąta wersja wirtualizatora VMware dodaje obsługę urządzeń NAS (Network Attached Storage) obok urządzeń blokowych SAN.

Akceleracja NAS wspiera między innymi pełne klonowanie plików. Jest to operacja podobna do klonowania znanego z VMFS z tym, że dotyczy całych plików nie tylko ich segmentów. Kolejny wspierany mechanizm to rezerwacja zasobów, która pozwala macierzom na alokowanie miejsca pod pliki dysków wirtualnych w formacie „grubym” - thick. Zwykle, gdy tworzymy dysk wirtualny na datastore NFS, to NFS ustala reguły alokowania. Domyślna reguła na większości serwerów NAS jest „cienka” i nie gwarantuje dla pliku backing storage. Operacja rezerwowania zasobów może poinstruować urządzenie NAS, aby wykorzystywało specyficzne mechanizmy do rezerwowania zasobów. Kolejne wparcie akceleracja da nam w przypadku odciążenie klonowania plików – lazy file clone. Dla celów administracyjnych pozyskamy rozszerzone statystyki plików – macierz dostarczy dokładnych raportów odnośnie wykorzystania miejsca.

Urządzenia pamięci masowych wspierające wirtualizację są dostarczane ze specyficznymi wtyczkami producenta (NAS plug-in). Zwykle dostarczają je sami producenci albo firmy trzecie i są dystrybuowane jako pakiety VIB.

Jeśli rozwiązanie SAN lub NAS wykorzystuje pośrednio appliance (storage virtualization appliance, I/O acceleration appliance, encryption appliance, itp.), wymagane jest, aby także appliance wspierało akcelerację i dla niego także należy dostarczyć odpowiednie wtyczki.

Przykładowe wyniki akceleracji w przypadku funkcji klonowania pozwalają na ograniczenie ruchu sieciowego o 99 proc. przy 10-20 krotnym przyspieszeniu samej operacji.

Interfejs API VAAI

VAAI (vStorage API for Array Integration) ma za zadanie przekazywać niektóre specyficzne operacje na pamięciach masowych do odpowiednich funkcji sprzętowych urządzenia. Główne funkcje to sprzętowo przyspieszane zerowanie (Hardware Accelerated Zeroing), które pozwala zmniejszyć liczbę operacji wejścia-wyjścia bazujących na hoście od 2 do 10 razy. Do zerowania wykorzystuje wewnętrznie operację SCSI WRITE SAME. Kolejna przyspieszana operacja to kopiowanie. Tutaj również możemy liczyć na nawet 2- do 10- krotne zmniejszenie liczby operacji I/O, dzięki wewnętrznym wykorzystaniu operacji SCSI COPY/XCOPY zamiast wykonywania przez host operacji kopiowania LUN-a do innego LUN-a lub zbioru bloków w tym samym LUN-ie. Wspomniane operacje SCSI mogą zrobić to z wykorzystaniem jednej komendy a host jest zwolniony z wykonywania operacji odczytu i zapisu, ponieważ odbywa się to w ramach możliwości sprzętowych dostarczanych przez macierz. Jeszcze większy przyrost wydajności zauważymy przy wspieranym sprzętowo blokowaniu plików. Liczba operacji wejścia-wyjścia może ulec obniżeniu nawet od 10 do 100 razy.

Podsumowanie

Wykorzystanie sprzętowej akceleracji w środowiskach zwirtualizowanych znacząco podnosi efektywność wykorzystania zasobów hosta i wydajność maszyn. Specjalne instrukcje procesora, odciążanie go w komunikacji z urządzeniami wejścia-wyjścia a także w operacjach na pamięci masowej czy połączeniach sieciowych powodują, że wiele z operacji, które w dawnych rozwiązaniach były wykonywane programowo nie muszą już być elementem wirtualizatora. Dzięki temu oszczędzamy na zasobach hosta, które można wykorzystać na uruchomienie na nim kolejnej maszyny albo podwyższenie parametrów maszyn już na nim działających. Przy budowie rozwiązania wirtualizacyjnego warto wziąć pod uwagę także wykorzystanie akceleracji pamięci masowych, która jak opisaliśmy, może nawet wielokrotnie zwiększyć szybkość wykonywania operacji na dyskach. Ma to szczególne znaczenie w większych środowiskach, w których często tworzymy klony maszyn albo wykonujemy operację migracji na żywo (live migration).


TOP 200