Ile narzutów ma wirtualizacja x86 / x64?

24

Ile narzutów ma wirtualizacja x86 / x64 (prawdopodobnie będę używać VirtualBox, prawdopodobnie VMWare, zdecydowanie nie parawirtualizacja) dla każdej z poniższych operacji hosta Win64 i gościa Linux64 przy użyciu wirtualizacji sprzętowej Intel?

  • Kod 64-bitowy w trybie użytkownika, wyłącznie związany z procesorem

  • Kod 32-bitowy w trybie użytkownika, wyłącznie związany z procesorem

  • Plik I / O na dysk twardy (zależy mi głównie na przepustowości, a nie opóźnieniu)

  • Sieciowe we / wy

  • Prymitywy synchronizacji wątków (muteksy, semafory, zmienne warunkowe)

  • Przełączniki kontekstu wątku

  • Operacje atomowe (przy użyciu lockprefiksu, takie jak porównywanie i zamiana)

Interesuje mnie przede wszystkim sprzętowa obudowa x64 (zarówno Intel, jak i AMD), ale nie miałbym nic przeciwko usłyszeniu o samodzielnym tłumaczeniu binarnym i x86 (tj. 32-bitowych hostach i gościach). Nie jestem zainteresowany parawirtualizacją.

dsimcha
źródło
(1) „x86” oznacza 32-bit. Nie będziesz w stanie uruchomić 64-bitowego kodu. Wirtualizacja AMD64 (znana również jako x64) ma różne ograniczenia, ponieważ wymaga rozszerzeń sprzętowych. (2) Czy masz na myśli wirtualizację x86 przez tłumaczenie binarne (tylko x86) lub wirtualizację wspomaganą sprzętowo (VT)?
Skyhawk,
@Miles: Wyjaśniłem pytanie.
dsimcha

Odpowiedzi:

26

Odkryłem, że nie ma prostej i absolutnej odpowiedzi na pytania takie jak twoje. Każde rozwiązanie do wirtualizacji zachowuje się inaczej w określonych testach wydajności. Ponadto testy, takie jak przepustowość we / wy dysku, można podzielić na wiele różnych testów (odczyt, zapis, przepisywanie, ...), a wyniki będą się różnić w zależności od rozwiązania i od scenariusza do scenariusza. Dlatego wskazanie jednego rozwiązania jako najszybszego we / wy dysku nie jest trywialne, i dlatego nie ma absolutnej odpowiedzi na etykiety takie jak koszty ogólne we / wy dysku.

Staje się bardziej skomplikowany, gdy próbujesz znaleźć związek między różnymi testami porównawczymi. Żadne z testowanych przeze mnie rozwiązań nie miało dobrej wydajności w testach mikrooperacyjnych. Na przykład: W maszynie wirtualnej jedno pojedyncze wywołanie „gettimeofday ()” zajęło średnio 11,5 razy więcej cykli zegara niż na sprzęcie. Hiperwizory są zoptymalizowane do zastosowań w świecie rzeczywistym i nie działają dobrze w przypadku mikrooperacji. Może to nie stanowić problemu dla Twojej aplikacji, który może lepiej pasować do aplikacji w świecie rzeczywistym. Rozumiem przez mikrooperację każdą aplikację, która kończy mniej niż 1000 cykli zegara (w przypadku procesora 2,6 GHz 1000 cykli jest zużywanych w 385 nanosekundach lub 3,85e-7 sekund).

Przeprowadziłem szeroko zakrojone testy porównawcze czterech głównych rozwiązań konsolidacji centrów danych w architekturze x86. Zrobiłem prawie 3000 testów porównujących wydajność maszyn wirtualnych z wydajnością sprzętową. Nazwałem „narzut” różnicą maksymalnej wydajności mierzonej w maszynach wirtualnych z maksymalną wydajnością mierzoną sprzętowo.

Rozwiązania:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

Systemy operacyjne gościa:

  • Microsoft Windows 2008 R2 64 bity
  • Red Hat Enterprise Linux 6.1 64 bity

Informacje o teście:

  • Serwery: 2 x Sun Fire X4150 każdy z 8 GB pamięci RAM, 2 x procesor Intel Xeon E5440 i cztery porty Gigabit Ethernet
  • Dyski: 6x 136 GB dyski SAS przez iSCSI przez gigabit Ethernet

Oprogramowanie testowe:

  • Procesor i pamięć: Test porównawczy Linpack dla 32 i 64 bitów. Jest to procesor i pamięć bardzo intensywna.

  • Dysk I / O i opóźnienie: Bonnie ++

  • Network I / O: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR i UDP_STREAM

  • Mikrooperacje : rdtscbench : wywołania systemowe, komunikacja między procesami

Średnie są obliczane za pomocą parametrów:

  • Procesor i pamięć: ŚREDNIA (HPL32, HPL64)

  • Disk I / O: AVERAGE (put_block, rewrite, get_block)

  • Network I / O: AVERAGE (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • ŚREDNIE operacje (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simpleemath [])

W moim scenariuszu testowym, korzystając z moich danych, średnie wyników czterech rozwiązań wirtualizacyjnych są następujące:

Narzut warstwy VM, gość Linux:

  • Procesor i pamięć: 14,36%

  • Sieciowe We / Wy: 24,46%

  • Dysk I / O: 8,84%

  • Opóźnienie dysku do odczytu: 2,41 razy wolniejsze

  • Czas wykonywania mikrooperacji: 10,84 razy wolniejszy

Narzut warstwy VM, gość Windows:

  • Średnia procesora i pamięci dla 32 i 64 bitów: 13,06%

  • Sieciowe We / Wy: 35,27%

  • Dysk I / O: 15,20%

Należy pamiętać, że te wartości są ogólne i nie odzwierciedlają scenariusza konkretnych przypadków.

Przeczytaj pełny artykuł: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions

Peter Senna
źródło
2
Ten artykuł jest przestarzały
dyasny
1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds, czy nie powinien to być prosty podział 1000 na 2 600 000, aby uzyskać liczbę sekund, jaką zajmuje 1000 cykli zegara? (co nie jest 23 milisekundami)
dvdvorle,
2
@Pan. Masz rację. Mam 385 nanosekund przez: 1000/2600000000 = 0,000000385 = 385 nanosekund. Czy zgadzasz się z tym? Dzięki za zwrócenie na to uwagi.
Peter Senna
@dyasny, szukam sprzętu do powtórzenia testów ze zaktualizowanymi wersjami. Masz pomysł, gdzie mogę go znaleźć?
Peter Senna
sprzęt można łatwo znaleźć w sklepie
dyasny
4

W twoim pytaniu jest zbyt wiele zmiennych, ale mógłbym spróbować je zawęzić. Załóżmy, że korzystasz z VMware ESX, robisz wszystko dobrze - najnowszy procesor z obsługą wirtualizacji, narzędzia VMware z parawirtualizowaną pamięcią masową i sterownikami sieci, mnóstwo pamięci. Załóżmy teraz, że w tej konfiguracji działa pojedyncza maszyna wirtualna. Z mojego doświadczenia wynika, że ​​powinieneś mieć ~ 90% prędkości procesora dla obciążenia związanego z procesorem. Nie mogę powiedzieć wiele na temat prędkości sieci, ponieważ używamy łączy 1 Gb / s i mogę je nasycić bez problemu, może być inaczej z łączem 10 Gb / s, ale nie mamy żadnego z nich. Przepustowość pamięci zależy od rodzaju pamięci, z lokalną pamięcią mogę uzyskać około 80% przepustowości, ale w przypadku NFS 1 Gb / s jest to prawie 100%, ponieważ w tym przypadku sieć jest wąska. Nie mogę powiedzieć o innych danych,

Liczby te są bardzo przybliżone i w dużym stopniu zależą od typu obciążenia, sprzętu, sieci. Robi się jeszcze gorzej, gdy uruchamiasz wiele obciążeń na serwerze. Ale chcę powiedzieć, że w idealnych warunkach powinno być możliwe uzyskanie 90% wydajności natywnej.

Z mojego doświadczenia wynika, że ​​znacznie większym problemem dla aplikacji o wysokiej wydajności jest opóźnienie i jest to szczególnie prawdziwe w przypadku aplikacji serwerowych. Mamy silnik obliczeniowy, który odbiera żądanie od ponad 30 klientów, wykonuje krótkie obliczenia i zwraca wyniki. Na czystym metalu zwykle przesuwa procesor do 100%, ale ten sam serwer na VMware może tylko załadować procesor do 60-80%, a jest to głównie spowodowane opóźnieniem w obsłudze żądań / odpowiedzi.

dtoubelis
źródło
Mogę powiedzieć z doświadczenia, że ​​nasycenie łącza 10GbE pojedynczą maszyną wirtualną jest bardzo trudne. Użyliśmy VMWare FT, który z łatwością może samodzielnie nasycić łącze 1 Gb / s, ponad 10 Gbe i nie zbliżył się do nasycenia go.
Mark Henderson
0

Nie zagłębiłem się w działanie podstawowych prymitywów, takich jak przełączanie kontekstu i operacje atomowe, ale oto moje wyniki testu siły brutalnej, który przeprowadziłem ostatnio z różnymi hiperwizorami. Powinno to wskazywać na to, czego możesz się spodziewać, jeśli masz ograniczoną przepustowość procesora i pamięci RAM.

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/

Gordan
źródło
2
To świetnie, że masz jakieś informacje na temat Xen i KVM ... A co z najpopularniejszymi dwoma hiperwizorami ?! Całkowicie ich brakuje. A do tego dołączono kilka hiperwizorów typu 2, żaden rozsądny SysAdmin nie użyłby tego do produkcji.
Chris S
Głosowałem w dół. Link nie działa.
Tim Duncklee,