it-swarm.com.de

KVM: Welche CPU-Funktionen sorgen dafür, dass VMs besser laufen?

Wir verwenden Ubuntu 12.04 mit den folgenden Parametern:

  • Dell R910
  • Kernel 3.2.0-25-generic # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1,0 + norome + 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.

Normalerweise verwenden wir "qemu-system-x86_64" für unseren Windows 32-Bit-Gast, z.

/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 erwies sich als etwas gering. Wir haben noch keinen Benchmark ausgeführt, aber sagen wir, 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 "bis" -cpu Nehalem ". Dateien, deren Kopieren etwa 2: 40h dauerte, werden jetzt innerhalb von 40 Minuten kopiert. Dies ist natürlich kein qualitativ hochwertiger Test und es gibt viel Raum für einen professionelleren Versuch. Aber das ist es Ein klarer Indikator dafür, dass die Auswahl des richtigen CPU-Modells die Leistung des Gastes stark beeinträchtigen kann.

Jetzt wurde ich neugierig und rannte:

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 etwas schwer zu erraten. "Nehalem" scheint der performanteste auf dieser Liste zu sein. Jetzt 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 Seiten richtig lese, behaupten sie, dass "-cpu Host" die beste Leistung bringen könnte. Ich habe noch keine Sorgen um die Migration, da beide KVM Hosts gleich ausgestattet sind (genau die gleiche Hardware).

Also, was empfehlen erfahrene KVM Admins? Gibt es eine goldene Regel oder sogar eine Matrix wie "Dieses Modell ist das Beste für dieses Gastbetriebssystem"?

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

21
Valentin

Es ist wirklich ganz einfach. Verwenden Sie für homogene Cluster und einzelne Host-Setups die Option Host. 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 für beide.

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

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 kommentiert [/ offtop]

13
dyasny

Die Windows-Gäste haben derzeit kein VirtIO

Verlieren Sie nicht mehr Zeit, 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 hat.

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

11
Gregory MOUSSAT

Qemu funktioniert nicht so wie viele andere Hypervisoren. Für den Anfang kann es eine vollständige Emulation bereitstellen. Das bedeutet, dass Sie x86-Code beispielsweise auf einem ARM -Prozessor) ausführen können. Wenn Sie sich im Modus KVM) befinden, funktioniert dies nicht Tun Sie das ... der Prozessor ist auf jeden Fall verfügbar, aber was dem Betriebssystem gemeldet wird, wird durch das Flag -cpu geändert.

Wenn Sie schnellere Geschwindigkeiten wünschen, ist dies ein Ausgangspunkt, um die Funktionen 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, wenn sie zuerst in etwas anderes übersetzt werden. Da Ihr Modell des Xeon-Prozessors Anfang 2011 veröffentlicht wurde, wird es wahrscheinlich größtenteils im Einklang mit der Core i7-Serie unterstützt. Dafür würde ich sagen, dass die Nehalem-Architektur Ihre beste Emulation ist.

Zitieren von einem Ihrer Links ( Tuning KVM ):

Verwenden Sie den Befehlszeilenschalter, um alle verfügbaren Host-Prozessorfunktionen 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 bewegen, dass ein Problem entsteht, können Sie alle unterstützten Befehlssätze finden, die Ihrer Meinung nach von jedem Prozessor unterstützt werden, den Sie jetzt oder in Zukunft haben, und diese auflisten.

Meistens möchten Sie jedoch bei -cpu Host Bleiben. Wenn Sie eine CPU mit weniger verfügbaren Flags angeben, vermeiden Anwendungen die Verwendung von Funktionen, die sie schneller machen könnten.

8
Jeff Ferland

Sie bekommen die Option '-cpu Host' verwirrt. Diese Option aktiviert NICHT nur alle für Ihr Host-System spezifischen CPU-Funktionen, sondern ALLE Funktionen, die Ihre CPU unterstützt, und alle Funktionen, die emuliert werden können, auch wenn Ihre CPU sie nicht unterstützt.

-cpu Host
ist eine gute Option, aber nicht die effizienteste, da sie möglicherweise Optionen ermöglicht, die emuliert werden können und die Ihre CPU nicht unterstützt. Das Gastsystem kann jedes Mal leicht verlangsamt werden, wenn versucht wird, eine dieser Funktionen zu verwenden, die erforderlich sind emuliert werden.

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

3
Joe Huss