Popularność rozwiązań wirtualizacjnych powoduje, że przy konstrukcji platform serwerowych coraz mocniej brane są pod uwagę ich wymagania. Odpowiedni zestaw instrukcji procesora, fizyczne przydzielanie portów sieciowych czy zasobów dyskowych zapewnia pełne wykorzystanie możliwości sprzętu i niweluje wzajemny, negatywny wpływ na wydajność maszyn wirtualnych uruchamianych 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 przez ograniczenie konkurencji w dostępie do fizycznych zasobów przez maszyny. Odciążany jest także host, na którym uruchamiamy wirtualne maszyny.

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 operacji, które w dawnych rozwiązaniach były wykonywane programowo obecnie nie wymaga korzystania z oprogramowania wirtualizatora. Dzięki temu można zaoszczędzić zasoby hosta i wykorzystać je do uruchomienia na nim kolejnej maszyny albo podwyższenie parametrów maszyn już działających.

Procesory wspierają wirtualizację

Wykorzystanie sprzętowego wsparcia procesora 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 dla 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, brak ich tylko w niektórych procesorach przeznaczonych do urządzeń mobilnych, które dużo rzadziej poddawane są wirtualizacji.

Przyspieszanie operacji IO

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ń wymagających 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ć go 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 jego 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ć transferowane do właściwego bufora bez konieczności wykorzystania mechanizmów emulacji programowej.

Interfejsy sieciowe

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.

Podziel się na:
  • Facebook
  • Google Bookmarks
  • LinkedIn