KVM: Durch welche CPU-Funktionen werden VMs besser ausgeführt?

21

Wir verwenden Ubuntu 12.04 mit folgenden Parametern:

  • Dell R910
  • Kernel 3.2.0-25-generisch # 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 Intel (R) Xeon (R) -CPU E7-4870 bei 2,40 GHz (jeweils mit 10 physischen Kernen, HT und Intel VT aktiviert)
  • Die Windows-Gäste haben derzeit kein VirtIO, aber das wird sich bald ändern

Auf diesem Computer werden mehrere Windows-Gäste ausgeführt, einer davon ist Windows 2003 32 Bit, ein anderer Windows 2008 (64 Bit). Wir haben derzeit mit Leistungsproblemen zu kämpfen und haben mit den CPU-Modellen herumgespielt.

Wir verwenden normalerweise "qemu-system-x86_64" für unseren Windows 32-Bit-Gast, zB:

/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 [...] 

Die Leistung dieses Gastes fiel etwas gering aus. Wir haben noch keinen Benchmark durchgeführt, aber nehmen wir an, dass das Kopieren großer Datenmengen (Dateien) innerhalb der VM von einem Verzeichnis in das andere viel schneller geht, wenn wir das CPU-Modell von "-cpu qemu32" auf "-cpu Nehalem" umstellen ". Das Kopieren von Dateien dauerte ca. 2: 40h. Jetzt innerhalb von 40 Minuten kopieren. Natürlich ist dies kein qualitativ hochwertiger Test und es gibt viel Raum für einen professionelleren Versuch. Dies ist jedoch ein klarer Hinweis darauf, dass die Auswahl des richtigen CPU-Modells die Leistung des Gasts erheblich beeinträchtigen kann.

Jetzt wurde ich neugierig und lief:

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]

Und:

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

Bei all diesen verschiedenen Versionen ist es ein bisschen schwer zu erraten. "Nehalem" scheint auf dieser Liste am performantesten zu sein. Nun frage ich mich, wie ich feststellen kann, welches CPU-Modell für meinen Gast am besten geeignet ist. Beim Surfen im Internet habe ich folgende Ressourcen gefunden:

Wenn ich diese Sites richtig lese, behaupten sie, dass "-cpu host" die beste Leistung bringen könnte. Ich mache mir noch keine Sorgen um die Migration, da beide KVM-Hosts gleich ausgestattet sind (genau die gleiche Hardware).

Was empfehlen erfahrene KVM-Administratoren? Gibt es eine goldene Regel oder sogar eine Matrix wie "Dieses Modell ist das beste für dieses Gastbetriebssystem"?

Ich entschuldige mich dafür, dass ich diese Informationen selbst herausfinden konnte. Ich habe verschiedene Google-Suchanfragen durchgeführt und viele Websites durchsucht. Ich konnte nichts finden, was meine Frage beantwortet.

Valentin
quelle
Warum sollte man sich überhaupt um den -cpu-Schalter kümmern? Lass es einfach weg.
Psusi
1
Warum kümmert es sich nicht darum? Afaik könnte es Leistungsverbesserungen bringen.
Valentin
Wenn es eingreifen und Dinge emulieren muss, wird es die Leistung beeinträchtigen. Probieren Sie es aus ohne.
Psusi
2
Ich habe gerade herausgefunden, dass libvirt den Parameter "-host qemu32" automatisch hinzufügt, weil wir ihn nicht setzen.
Valentin
3
@psusi: Habe es erst heute getestet ... Wenn ich den -cpu-Schalter weglasse, ist die Leistung so gut, wie ich das bestmögliche CPU-Modell auswähle.
Valentin

Antworten:

13

Es ist wirklich ganz einfach. Verwenden Sie diese hostOption für homogene Cluster und Einzelhost-Setups . Verwenden Sie für gemischte Cluster die niedrigste verfügbare CPU-Version. Wenn also ein Host Penryn und der andere Nehalem ist, verwenden Sie Penryn auf beiden.

Wenn Sie RHEV oder oVirt verwenden, ist dies bereits integriert. VMWare hat dies als "EVC" bezeichnet und positioniert es als großes Feature.

Wenn Sie wieder zur Leistung zurückkehren, brauchen Sie auf jeden Fall virtio, wo immer Sie es ausdrücken können. Und wenn Sie immer noch auf Leistungsengpässe stoßen, können diese in der Regel von Fall zu Fall behoben werden, je nachdem, wo sie auftreten.

[offtop] Zu deiner Wahl der Distribution habe ich bereits in einem anderen Thread einen Kommentar abgegeben. [/ offtop]

dyasny
quelle
Danke dyasny, ich hatte gehofft, du würdest antworten und mir eine Art "goldene Regel" geben!
Valentin
11

Die Windows-Gäste haben derzeit kein VirtIO

Verlieren Sie keine Zeit mehr, wenn Sie etwas optimieren.
Installieren Sie die virtIO-Treiber und kehren Sie zurück. Der Unterschied ist so groß, dass jede Verbesserung, die Sie jetzt finden können, mit virtIO keine Bedeutung mehr hat.

Nur ein Beispiel für einen unserer Server:
- Ohne virtIO kann ein W2k3 ungefähr 10 Terminal Server-Benutzer verwalten
- Mit virtIO kann derselbe Computer mit demselben Betriebssystem derzeit 120 bis 125 Benutzer mit geringer Verzögerung verwalten. Und wir haben eine weitere virtuelle Maschine hinzugefügt, um SQL Server auf demselben physischen Computer auszuführen

Gregory MOUSSAT
quelle
Danke für den Tipp. Ja, VirtIO sollte definitiv aktiviert sein, aber wir haben ein paar Probleme mit dem Windows 2003-Gast, die zuerst behoben werden sollten. Außerdem möchte ich das Thema CPU-Modell näher erläutern.
Valentin
Dies ist ein Grund, warum ich Hyper-V verwende. Seit 2008 bedeutet dies KEINE INSTALLATION und bedeutet, dass alle Treiber für Hyper-V mit Windows Update verwaltet werden. Kompatibilitätsprobleme dort sind absolut tödlich.
TomTom
@TomTom Hyper-V ist nicht der einzige Hypervisor, der für die Ausführung von Windows zertifiziert ist. Und Zertifizierung bedeutet in diesem Zusammenhang SVVP / WHQL.
Dyasny
1
Nein, aber es ist das einzige, das sofort funktioniert, da die Treiber bereits installiert sind. Außerdem denke ich, dass XEN die Hyper-V-Treiber blockiert. Es ist wirklich nett, kein anderes extern aktualisiertes Element warten zu müssen. Es ist mir egal, ob sie signiert sind - Punkt ist, dass ich keinen anderen Anbieter beobachten muss, da alles über Windows Update kommt. Ich wünsche mir nur, MS würde Windows Update für Drittanbieter-Software öffnen;)
TomTom
1
Da ich mir sicher bin, dass Sie von Slipstreaming und VM-Vorlagen gehört haben, werde ich diese (fast) nicht erwähnen :) Mein Problem mit Hyper-V ist die äußerst schlechte Unterstützung von Linux-Gästen.
Dyasny
8

Qemu funktioniert nicht so wie viele andere Hypervisoren. Für den Anfang kann es eine vollständige Emulation bereitstellen. Das heißt, Sie können beispielsweise x86-Code auf einem ARM-Prozessor ausführen. Wenn Sie sich im KVM-Modus befinden, geschieht dies nicht. Der Prozessor ist auf jeden Fall exponiert, aber was dem Betriebssystem gemeldet wird, wird durch das -cpuFlag geändert .

Wenn Sie schnellere Geschwindigkeiten wünschen, ist dies ein Ausgangspunkt, um zu versuchen, die Fähigkeiten des virtuellen Prozessors so gut wie möglich an Ihren realen Prozessor anzupassen. Dies reduziert Fälle, in denen nicht optimale Opcodes aufgerufen werden, um Aufgaben auszuführen, und reduziert auch Opcodes, die auf Ihrer Hardware nicht möglich sind und zuerst in etwas anderes übersetzt werden. Da Ihr Modell des Xeon-Prozessors Anfang 2011 veröffentlicht wurde, unterstützt es wahrscheinlich hauptsächlich die Core i7-Serie. Dafür würde ich sagen, dass die Nehalem-Architektur Ihre beste Emulation ist.

Zitieren von einem Ihrer Links ( Tuning KVM ):

Verwenden Sie die Befehlszeilenoption, um alle verfügbaren Hostprozessorfunktionen an den Gast zu übergeben

 qemu -cpu host

Wenn Sie die Kompatibilität beibehalten möchten, können Sie Ihrem Gast ausgewählte Funktionen zur Verfügung stellen. Wenn alle Ihre Hosts über diese Funktionen verfügen, bleibt die Kompatibilität erhalten:

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

Wenn Sie also das Gefühl haben, dass Sie die Dinge möglicherweise so weit verschieben, dass ein Problem auftritt, finden Sie möglicherweise alle unterstützten Befehlssätze, von denen Sie glauben, dass sie jetzt oder in Zukunft von einem Prozessor unterstützt werden, und listen diese auf.

Meistens möchten Sie sich jedoch daran halten -cpu host. Wenn Sie eine CPU mit weniger verfügbaren Flags angeben, vermeiden Anwendungen die Verwendung von Funktionen, die diese schneller machen könnten.

Jeff Ferland
quelle
4
Er verwendet KVM, das diese Virtualisierungserweiterungen benötigt und keine Do-Emulation ausführt. auch wenn es auf qemu basiert
Javier
1
Noch +1 Stimme von mir für die Bemühungen und die Empfehlung, -cpu Host zu verwenden!
Valentin
3

Die Option '-cpu host' ist verwirrt. Diese Option aktiviert NICHT nur alle CPU-Funktionen, die für Ihr Hostsystem spezifisch sind. Sie aktiviert ALLE Funktionen, die Ihre CPU unterstützt, und alle Funktionen, die emuliert werden können, auch wenn Ihre CPU diese Funktionen nicht unterstützt.

-cpu host
ist eine gute Option, aber nicht die effizienteste, da sie möglicherweise Optionen aktiviert, die emuliert werden können und die Ihre CPU nicht unterstützt. Das Gastsystem kann bei jedem Versuch, eine dieser Funktionen zu verwenden, die emuliert werden müssen, leicht verlangsamt werden .

Quelle: http://wiki.qemu.org/Features/CPUModels

Joe Huss
quelle
1
Anfangs dachte ich, diese Antwort beziehe sich auf Anweisungsunterstützung, z. B. SSE-Unterstützung, die emuliert werden könnte. Aber das macht natürlich keinen Sinn, da Sie entweder im KVM-Modus oder im TCG-Modus arbeiten und keine Mischung aus beidem. Die hier erwähnte Emulation könnte also Dinge wie x2apic sein, bei denen es keine Hardwareunterstützung gibt, der Kernel sie jedoch vortäuschen kann. Ich erwähne dies nur, um das Obige zu klären, da es mich anfangs verwirrt hatte.
Neil McGill
-2

CentOS 6.7 bietet mir die richtige KVM + Spice-Leistung auf dem Dell R910. Ich denke, wenn Sie es einmal probiert haben, werden Sie (ernsthaft) zu nichts anderem zurückkehren!

Marc Cyr
quelle