KVM: Które funkcje procesora poprawiają działanie maszyn wirtualnych?

21

Używamy Ubuntu 12.04 z następującymi parametrami:

  • Dell R910
  • Jądro 3.2.0-25-generic # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 1.0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x procesor Intel (R) Xeon (E) E7- 4870 @ 2,40 GHz (każdy z 10 rdzeniami fizycznymi, włączonymi HT i Intel VT)
  • Goście Windows nie mają obecnie VirtIO, ale wkrótce się to zmieni

Na tym komputerze działa kilku gości Windows, jeden z nich to Windows 2003 32-bitowy, inny Windows 2008 (64-bitowy). Obecnie zmagamy się z problemami z wydajnością i bawiliśmy się modelami procesorów.

Zwykle używamy „qemu-system-x86_64 dla naszego gościa z 32-bitowym systemem Windows, np .:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

Wydajność tego gościa okazała się nieco niska. Nie uruchomiliśmy jeszcze żadnego testu porównawczego, ale powiedzmy, że kopiowanie dużej ilości danych (plików) w maszynie wirtualnej z jednego katalogu do drugiego przebiega znacznie szybciej po zmianie modelu procesora z „-cpu qemu32” na „-cpu Nehalem „. Pliki, których skopiowanie trwało około 2:40 h, teraz są kopiowane w ciągu 40 minut. Oczywiście nie jest to test wysokiej jakości i jest dużo miejsca na bardziej profesjonalną próbę. Jest to jednak wyraźny wskaźnik, że wybór odpowiedniego modelu procesora może mieć duży wpływ na wydajność gościa.

Teraz się zaciekawiłem i pobiegłem:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

I:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

Przy wszystkich tych różnych wersjach trudno jest zgadnąć. „Nehalem” wydaje się najbardziej wydajny na tej liście. Teraz zastanawiam się, jak powiedzieć, który model procesora jest najlepszy dla mojego gościa? Przeglądając Internet, znalazłem następujące zasoby:

Kiedy czytam te strony poprawnie, twierdzą, że „host -cpu” może przynieść najlepszą wydajność. Nie martwię się jeszcze o migrację, ponieważ oba hosty KVM są równo wyposażone (dokładnie ten sam sprzęt).

Co więc polecają doświadczeni administratorzy KVM? Czy istnieje złota zasada, a nawet matryca, na przykład „ten model jest najlepszy dla tego gościa”

Przepraszam, że sam mogłem znaleźć te informacje - prowadziłem różne wyszukiwania w Google i przeglądałem wiele stron internetowych. Nie byłem w stanie znaleźć odpowiedzi na moje pytanie.

Valentin
źródło
Po co w ogóle męczyć się z przełącznikiem -cpu? Po prostu to pomiń.
psusi
1
Dlaczego nie zawracasz sobie tym głowy? Afaik może przynieść poprawę wydajności.
Valentin,
Jeśli musi wkroczyć i naśladować różne rzeczy, pogorszy to wydajność. Spróbuj bez.
psusi
2
Właśnie dowiedziałem się, że libvirt automatycznie dodaje parametr „-host qemu32”, ponieważ go nie ustawiamy.
Valentin,
3
@psusi: Właśnie go dzisiaj przetestowałem ... kiedy zostawiam przełącznik -cpu z dala, wydajność jest tak dobra, jak wybieram najlepszy możliwy model procesora.
Valentin,

Odpowiedzi:

13

To naprawdę bardzo proste. W przypadku jednorodnych klastrów i konfiguracji z jednym hostem użyj hostopcji. W przypadku klastrów mieszanych użyj najniższej dostępnej wersji procesora, więc jeśli jeden host to Penryn, a drugi Nehalem, użyj Penryn na obu.

Jeśli używasz RHEV lub oVirt, jest to już wbudowane. VMWare ma to o nazwie „EVC” i pozycjonuje je jako ogromną funkcję.

Wracając do wydajności, zdecydowanie potrzebujesz virtio wszędzie, gdzie możesz go umieścić. A jeśli nadal napotykasz wąskie gardła związane z wydajnością, zazwyczaj można je rozwiązać w zależności od przypadku, w zależności od tego, gdzie występują.

[offtop] Przy wyborze dystrybucji skomentowałem już w innym wątku [/ offtop]

dyasny
źródło
Dzięki dyasny, miałem nadzieję, że odpowiesz i zapewnisz mi jakąś „złotą zasadę”!
Valentin,
11

Goście systemu Windows nie mają obecnie VirtIO

Nie trać więcej czasu na ulepszanie czegokolwiek.
Zainstaluj sterowniki virtIO i wróć. Różnica jest tak duża, że ​​wszelkie ulepszenia, które możesz teraz znaleźć, nie będą miały znaczenia w virtIO.

Przykład z jednym z naszych serwerów:
- bez virtIO W2k3 może obsłużyć około 10 użytkowników serwera terminali
- z virtIO, ta sama maszyna z tym samym systemem operacyjnym obsługuje obecnie od 120 do 125 użytkowników z niewielkim spowolnieniem. I dodaliśmy kolejną maszynę wirtualną do uruchamiania programu SQL Server na tym samym komputerze fizycznym

Gregory MOUSSAT
źródło
Dzięki za podpowiedź. Tak, VirtIO powinien zdecydowanie włączyć się, ale mamy kilka problemów z gościem Windows 2003, które należy rozwiązać w pierwszej kolejności. Poza tym chcę uzyskać wyjaśnienie na temat modelu procesora.
Valentin,
To jeden z powodów, dla których używam Hyper-V. Od 2008 roku oznacza to BRAK INSTALACJI i oznacza wszystkie sterowniki dla Hyper-V obsługiwane przez Windows Update. Problemy z kompatybilnością są śmiertelnie niebezpieczne.
TomTom
@TomTom Hyper-V nie jest jedynym hypervisorem certyfikowanym do uruchamiania systemu Windows. A certyfikacja w tym kontekście oznacza SVVP / WHQL.
dyasny
1
Nie, ut jest to jedyny, który działa od razu po wyjęciu z pudełka, ponieważ ma już zainstalowane sterowniki;) Plus myślę, że XEN, gdy wkuwają na sterownikach Hyper-V. Nie trzeba utrzymywać innego, zaktualizowanego zewnętrznie elementu, jest naprawdę miłą rzeczą. Nie obchodzi mnie, czy są podpisane - chodzi o to, że nie muszę oglądać innego dostawcy, ponieważ wszystko odbywa się za pośrednictwem aktualizacji systemu Windows. Po prostu WISH MS otworzy Windows Update dla oprogramowania innej firmy;)
TomTom
1
Ponieważ jestem pewien, że słyszałeś o slipstreamingu i szablonach maszyn wirtualnych, (prawie) nie wspomnę o nich :) Moim problemem z Hyper-V jest bardzo słaba obsługa gości Linuksa.
dyasny
8

Qemu nie działa w taki sam sposób, jak wiele innych hiperwizorów. Na początek może zapewnić pełną emulację. Oznacza to, że możesz na przykład uruchomić kod x86 na procesorze ARM. W trybie KVM, gdy go używasz, tak naprawdę nie robi tego ... procesor jest narażony bez względu na wszystko, ale to, co jest zgłaszane do systemu operacyjnego, zostanie zmienione przez -cpuflagę.

Jeśli potrzebujesz szybszych prędkości, punktem wyjścia jest jak najlepsze dopasowanie możliwości procesora wirtualnego do rzeczywistego procesora. Zmniejszy to przypadki, w których wywoływane są nieoptymalne kody do uruchamiania zadań, a także zmniejszy liczbę kodów, które nie są możliwe na twoim sprzęcie, zanim zostaną przetłumaczone na coś innego. Ponieważ Twój model procesora Xeon został wydany na początku 2011 r., Prawdopodobnie obsługuje on głównie serię Core i7. W tym celu powiedziałbym, że architektura Nehalem jest twoją najlepszą emulacją.

Cytowanie z jednego z twoich linków ( Tuning KVM ):

Aby przekazać wszystkie dostępne funkcje procesora hosta gościowi, użyj przełącznika wiersza polecenia

 qemu -cpu host

jeśli chcesz zachować zgodność, możesz udostępnić wybrane funkcje gościowi. Jeśli wszystkie hosty mają te funkcje, zachowana zostanie zgodność:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

Tak więc, jeśli uważasz, że możesz w końcu przenieść rzeczy na tyle, aby stworzyć problem, możesz znaleźć wszystkie obsługiwane zestawy instrukcji, które Twoim zdaniem mogą być obsługiwane przez dowolny procesor w przyszłości lub wymienić je.

Jednak przez większość czasu chcesz się trzymać -cpu host. Określenie procesora z mniej dostępnymi flagami oznacza, że ​​aplikacje będą unikać używania funkcji, które mogłyby je przyspieszyć.

Jeff Ferland
źródło
4
Używa KVM, który potrzebuje tych rozszerzeń wirtualizacji i nie uruchamia emulacji; nawet jeśli jest oparty na qemu
Javier
1
Nadal +1 głosuj ode mnie za wysiłki i zalecenie użycia hosta -cpu!
Valentin,
3

Mylona jest opcja „host-cpu”. Ta opcja NIE włącza tylko wszystkich funkcji procesora specyficznych dla systemu hosta, włącza WSZYSTKIE funkcje obsługiwane przez procesor i wszystkie, które można emulować, nawet jeśli procesor ich nie obsługuje.

- host CPU
jest dobrą opcją, ale nie najbardziej wydajną, ponieważ może włączyć opcje, które mogą być emulowane, których procesor nie obsługuje, system gościa może być nieco spowolniony za każdym razem, gdy spróbuje użyć jednej z tych funkcji, które muszą być emulowane .

Źródło: http://wiki.qemu.org/Features/CPUModels

Joe Huss
źródło
1
Początkowo myślałem, że ta odpowiedź dotyczy wsparcia instrukcji, np. Wsparcia SSE, które można emulować. Ale to oczywiście nie ma sensu, ponieważ albo pracujesz w trybie KVM lub TCG, a nie jako połączenie obu. Sądzę więc, że emulacja, o której tu mowa, może być czymś takim jak x2apic, gdzie nie ma wsparcia sprzętowego, ale jądro może go sfałszować. Wspominam tylko o tym, aby spróbować wyjaśnić powyższe, ponieważ początkowo byłem zdezorientowany.
Neil McGill,
-2

CentOS 6.7 zapewnia mi odpowiednią wydajność KVM + Spice na Dell R910. Myślę, że kiedy spróbujesz, nie wrócisz do niczego innego (poważnie)!

Marc Cyr
źródło