Temat wirtualizacji od jakiegoś czasu jest bardzo popularny w środowisku IT, jest to związane z kilkoma zaletami, które daje wirtualizacja. Pierwszą z nich jest uniezależnienie się od sprzętu, aplikacje uruchomione w wirtualnych maszynach mają to samo środowisko, te same sterowniki niezależnie od tego na jakim fizycznym sprzęcie pracują. Ułatwia to np. migracje aplikacji, która działa na starym środowisku i nie opłaca się jej przystosowywać do nowego środowiska, w razie uszkodzenia sprzętu bardzo łatwo ją przenieść na inny sprzęt oraz ograniczyć lub zwiększyć zasoby w zależności od potrzeb. Kolejną zaletą jaką daje wirtualizacja jest łatwiejsze maksymalne wykorzystanie zasobów danego sprzętu. Jak wiadomo za tą samą cenę można kupić coraz mocniejszy sprzęt, wirtualizacja pozwala nam lepiej podzielić i wykorzystać zasoby, co niekoniecznie jest proste bez wirtualizacji. Mamy dwa typy wirtualizacji: parawirtualizacja oraz pełna wirtualizacja. Pełna wirtualizacja emuluje odwołania do elementów fizycznych komputera, przez co wirtualizowanemu systemowi wydaję się, że pracuje na fizycznym sprzęcie. Oczywiście emulacja spowalnia działanie takiej wirtualnej maszyny. W parawirtualizacji wirtualna maszyna współpracuje z kontenerem przy obsłudze elementów sprzętowych.

Postanowiliśmy przeprowadzić testy, które dadzą nam odpowiedź jakie straty poniesiemy używając wirtualnych maszyn w stosunku do fizycznego sprzętu. Przetestowaliśmy dwa rozwiązania open-sourcowe KVM i Xen działające w pełnej wirtualizacji ze wsparciem jej w procesorach Intela.

Środowisko testowe

Środowisko testowe to kontener zbudowany na Ubuntu Natty 64bit. Na jednym był uruchomiony Xen w wersji 4.1, na drugim KVM z kernelem 2.6.32. DomU zarówno w jednym i drugim przypadku był to Debian Squeeze wersja 64bit, dodatkowo przetestowana została wersja Xena 4.0. Wersja 3.x nie była testowana ponieważ już wychodzi z użytku.

Testy wydajnościowe (CPU, Network, IO)

Testy CPU

  • Test był wykonany programem nbench
  • Polegał on na sortowaniu liczb całkowitych, sortowaniu stringów, operacjach na bitach, analizie Fouriera, operacjach na liczbach zmienno- przecinkowych, wykonywaniu algorytmów szyfrujących oraz algorytmów kompresujących dane (tekstowe i graficzne)
  • Test był wykonywany najpierw na kontenerze, a później na wirtualnej maszynie znajdującej się na tym kontenerze, wyniki były porównywane miedzy VM a kontenerem i była określana strata wydajności
  • Wyniki: strata wydajności wirtualnych maszyn w stosunku do kontenera jest rzędu kilku procent, natomiast różnicy między Xenem i KVMem nie ma, zachowują się identycznie.

Testy sieci

  • Przepustowość sieci była testowana programem iperf
  • Test polegał na mierzeniu przepustowości między maszyną wirtualną a kontenerem innym niż ten, na którym była umieszczona testowana VM. Całkowita przepustowość sieci wynosiła 1Gbit, a kontenery były wpięte do tego samego switcha.
  • Wykonane było kilka scenariuszy testowych, testowane były przepustowości w jedna stronę przez połączenie od 1 do 5 socketów przez które były przesyłane dane, oraz jednocześnie w 2 strony i tez od 1 do 5 socketów.
  • Wyniki: W przypadku jednostronnego testu, nie było strat wydajności zarówno w Xenie jak i KVMie, natomiast w 2 przypadku, testu który odzwierciedla ruch produkcyjny, Xen wypadł zdecydowanie lepiej niż KVM, straty przepustowości Xena były rzędu kilku procent, a KVM miał straty do 20%. Ponieważ KVM może używać wielu sterowników kart sieciowych, najlepiej wypadł przy sterowniku virtio, przy innych jak e1000, relatek straty były jeszcze większe.
  • KVM lepiej zachowywał się, gdy na danym kontenerze było uruchomionych więcej VM, tzn. testy przeprowadzane z kilku VM potrafiły wysycić linka 1Gbitowego.

Testy IO

  • Wydajność dysków była testowana programem iozone
  • Polegał on na zapisywaniu i odczytywaniu przez 5 równoległych wątków 4k bloków do wartości 100MB, jako dyski w wirtualnych maszynach były użyte pliki w kontenerze.
  • Po stronie KVMa został użyty sterownik virtio, po stronie Xena były użyte sterowniki file oraz tap.
  • Testowane były odczyty, zapisy, ponowne odczyty oraz randomowe zapisy i odczyty.
  • Tak jak w przypadku mierzenia wydajności CPU, testy były najpierw wykonane na kontenerze, a potem na maszynie wirtualnej znajdującej się na tym kontenerze. Wyniki były porównywane i mierzona była strata.
  • Wyniki: testy te wypadły najgorzej, straty są duże. Zdecydowanie lepiej w tych testach wypadł KVM. Odczyty dla KVM wyniosły około 55% tego, co na kontenerze, Xen – około 25%, zapisy wypadły gorzej: KVM 20%, a Xen 2%.
  • Ponieważ wyniki dla Xena były bardzo słabe, zrobione zostały dodatkowe testy, w których zamiast pliku jako dysku zostało przekazane fizyczne urządzenie oraz użyty sterownik phy, wyniki jednak nie polepszyły się.

Pamięć

Testy wydajnościowe nie zostały przeprowadzone, jednak porównaliśmy możliwości obu wirtualizatorów:

  • Driver ballooning, obydwa posiadają driver, który pozwala w locie zmniejszać pamięć dostępną w wirtualnej maszynie, oraz zwiększyć do maksymalnej zdefiniowanej przy starcie maszyny. Aby zwiększyć ilość pamięci powyżej tego limitu należy zrestartować VMz odpowiednimi parametrami.
  • Swapowanie: KVM jest tak naprawdę procesem w dom0 i może być wyswapowany przez kernel, co pozwala rezerwować więcej pamięci na VM niż ma dostępny kontener. Xen tego nie potrafi, co więcej VM zmniejsza ilość pamięci dostępnej kontenerowi.
  • KSM (Kernel Samepage Merging), jest to własność kernela polegająca na de-duplikacji stron pamięci, KVM jako zwykły proces korzysta z tego natomiast, Xen nie.

Podsumowanie

Jak widać jedyna większa różnica miedzy tymi wirtualizatorami jest w obsłudze I/O. Dużą zaletą KVM jest to, że jest wspierany w waniliowym kernelu, aczkolwiek Xen ma wejść w pełni do wanilowego kernela w wersji 3.0. KVM wymaga wsparcia wirtualizacji w sprzęcie, dlatego na starszym sprzęcie nie może działać, natomiast Xen może. Xen jest zdecydowanie dłużej na rynku, przez co wydaje się być bardziej dojrzałym produktem, natomiast KVM, który jeszcze rok temu nie mógł konkurować z Xenem, bardzo szybko się rozwija i według mnie dogonił już Xena. Rywalizacja między nimi zapowiada się bardzo interesująco. Czas pokaże, czy obydwa produkty będą coraz lepsze i zostaną na rynku czy jednak któryś wygra tą rywalizację.

Paweł Andrejas
Inżynier systemów UNIX