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
lock
prefiksu, 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ą.
źródło
Odpowiedzi:
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:
Systemy operacyjne gościa:
Informacje o teście:
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
źródło
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)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.
źródło
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/
źródło