Wie viel Overhead hat die x86 / x64-Virtualisierung?

24

Wie viel Aufwand verursacht die x86 / x64-Virtualisierung (ich verwende wahrscheinlich VirtualBox, möglicherweise VMWare, definitiv keine Paravirtualisierung) für jeden der folgenden Vorgänge einen Win64-Host und einen Linux64-Gast mit Intel-Hardwarevirtualisierung?

  • Rein CPU-gebundener 64-Bit-Code im Benutzermodus

  • Rein CPU-gebundener 32-Bit-Code im Benutzermodus

  • Datei-E / A auf der Festplatte (mir geht es hauptsächlich um den Durchsatz, nicht um die Latenz)

  • Netzwerk-E / A

  • Thread-Synchronisationsprimitive (Mutexe, Semaphoren, Bedingungsvariablen)

  • Thread-Kontext wechselt

  • Atomare Operationen (mit dem lockPräfix, Dinge wie Compare-and-Swap)

Ich interessiere mich in erster Linie für das hardwaregestützte x64-Gehäuse (sowohl Intel als auch AMD), würde aber nichts dagegen haben, von der nicht unterstützten binären Übersetzung und den x86-Gehäusen (dh 32-Bit-Host und -Gast) zu hören. Ich bin nicht an Paravirtualisierung interessiert.

dsimcha
quelle
(1) "x86" bedeutet 32-Bit. Sie können keinen 64-Bit-Code ausführen. Für die AMD64-Virtualisierung (auch als x64 bezeichnet) gelten andere Einschränkungen, da Hardware-Erweiterungen erforderlich sind. (2) Meinen Sie x86-Virtualisierung durch binäre Übersetzung (nur x86) oder hardwaregestützte Virtualisierung (VT)?
Skyhawk
@Miles: Ich habe die Frage geklärt.
DSIMCHA

Antworten:

26

Ich habe festgestellt, dass es keine einfache und absolute Antwort auf Fragen wie Ihre gibt. Jede Virtualisierungslösung verhält sich bei bestimmten Leistungstests anders. Tests wie der Datenträger-E / A-Durchsatz können in viele verschiedene Tests unterteilt werden (Lesen, Schreiben, Umschreiben usw.). Die Ergebnisse variieren von Lösung zu Lösung und von Szenario zu Szenario. Aus diesem Grund ist es nicht trivial, eine Lösung als die schnellste für Festplatten-E / A zu bezeichnen, und aus diesem Grund gibt es keine absolute Antwort für Bezeichnungen wie Overhead für Festplatten-E / A.

Es wird komplexer, wenn versucht wird, eine Beziehung zwischen verschiedenen Benchmark-Tests zu finden. Keine der von mir getesteten Lösungen zeigte eine gute Leistung bei Mikrobetriebstests. Beispiel: Innerhalb der VM dauerte ein einzelner Aufruf von "gettimeofday ()" durchschnittlich 11,5 Mal mehr Taktzyklen als auf der Hardware. Die Hypervisoren sind für Anwendungen in der realen Welt optimiert und eignen sich nicht für Mikrooperationen. Dies ist möglicherweise kein Problem für Ihre Anwendung, die möglicherweise besser als reale Anwendung geeignet ist. Ich meine mit Mikrobetrieb jede Anwendung, die weniger als 1.000 Taktzyklen benötigt, um fertig zu werden (für eine 2,6-GHz-CPU werden 1.000 Taktzyklen in 385 Nanosekunden oder 3,85 bis 7 Sekunden benötigt).

Ich habe ausführliche Benchmark-Tests für die vier Hauptlösungen für die Rechenzentrums-Konsolidierung für x86-Architektur durchgeführt. Ich habe fast 3000 Tests durchgeführt, bei denen die Leistung in VMs mit der Hardwareleistung verglichen wurde. Ich habe den Unterschied zwischen der in VMs gemessenen maximalen Leistung und der auf der Hardware gemessenen maximalen Leistung als "Overhead" bezeichnet.

Die Lösungen:

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

Die Gastbetriebssysteme:

  • Microsoft Windows 2008 R2 64 Bit
  • Red Hat Enterprise Linux 6.1 64-Bit

Test Info:

  • Server: 2x Sun Fire X4150 mit jeweils 8 GB RAM, 2x Intel Xeon E5440-CPU und vier Gigabit-Ethernet-Ports
  • Festplatten: 6 x 136 GB SAS-Festplatten über iSCSI über Gigabit-Ethernet

Benchmark-Software:

  • CPU und Speicher: Linpack-Benchmark für 32 und 64 Bit. Dies ist CPU- und speicherintensiv.

  • Festplatten-E / A und Latenz: Bonnie ++

  • Netzwerk-E / A: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR und UDP_STREAM

  • Mikrooperationen : rdtscbench : Systemaufrufe, Kommunikation zwischen Prozessleitungen

Die Mittelwerte werden mit den Parametern berechnet:

  • CPU und Speicher: DURCHSCHNITTLICH (HPL32, HPL64)

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

  • Netzwerk-E / A: DURCHSCHNITTLICH (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Mikrooperationen AVERAGE (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])

Für mein Testszenario mit meinen Metriken ergeben sich aus den Ergebnissen der vier Virtualisierungslösungen folgende Durchschnittswerte:

VM-Schicht-Overhead, Linux-Gast:

  • CPU und Speicher: 14,36%

  • Netzwerk-E / A: 24,46%

  • Festplatten-E / A: 8,84%

  • Datenträgerlatenz zum Lesen: 2,41-mal langsamer

  • Ausführungszeit für Mikrooperationen: 10,84-mal langsamer

VM Layer Overhead, Windows Gast:

  • CPU- und Speicher-Durchschnitt für 32 und 64 Bit: 13,06%

  • Netzwerk-E / A: 35,27%

  • Festplatten-E / A: 15,20%

Bitte beachten Sie, dass diese Werte generisch sind und nicht das Szenario für bestimmte Fälle widerspiegeln.

Bitte schauen Sie sich den vollständigen Artikel an: http://petersenna.com/de/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions

Peter Senna
quelle
2
Dieser Artikel ist veraltet
dyasny
1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 millisecondsSollte das nicht eine einfache Division von 1.000 durch 2.600.000 sein, um die Anzahl der Sekunden zu erhalten, die 1.000 Taktzyklen benötigen? (das sind nicht 23 Millisekunden)
dvdvorle
2
@Herr. Glücklich, du hast recht. Ich habe 385 Nanosekunden durch: 1000/2600000000 = 0,000000385 = 385 Nanosekunden. Stimmst du dem zu? Vielen Dank für den Hinweis.
Peter Senna
@dyasny, ich suche Hardware, um die Tests mit aktualisierten Versionen zu wiederholen. Irgendeine Idee, wo ich es finden kann?
Peter Senna
Hardware kann leicht in einem Geschäft gefunden werden
dyasny
4

Ihre Frage enthält zu viele Variablen, aber ich könnte versuchen, sie einzugrenzen. Nehmen wir an, Sie entscheiden sich für VMware ESX und machen alles richtig - neueste CPU mit Unterstützung für Virtualisierung, VMware-Tools mit paravirtualisiertem Speicher und Netzwerktreibern, viel Speicher. Nehmen wir nun an, dass Sie in diesem Setup eine einzelne virtuelle Maschine ausführen. Nach meiner Erfahrung sollten Sie ~ 90% der CPU-Geschwindigkeit für die CPU-gebundene Arbeitslast haben. Ich kann Ihnen nicht viel über die Netzwerkgeschwindigkeit sagen, da wir 1-Gbit / s-Verbindungen verwenden und diese problemlos auslasten können. Bei 10-Gbit / s-Verbindungen kann dies anders sein, wir haben jedoch keine davon. Der Speicherdurchsatz hängt von der Art des Speichers ab. Mit lokalem Speicher kann ich ca. 80% des Speicherdurchsatzes erzielen, aber für 1-Gbit / s-NFS liegt er nahe bei 100%, da die Vernetzung hier einen Engpass darstellt. Kann nicht über andere Metriken erzählen,

Diese Zahlen sind sehr ungefähr und hängen stark von Ihrem Lasttyp, Ihrer Hardware und Ihrem Netzwerk ab. Es wird noch unübersichtlicher, wenn Sie mehrere Workloads auf dem Server ausführen. Aber was ich damit sagen will, ist, dass Sie unter idealen Bedingungen in der Lage sein sollten, 90% der nativen Leistung zu erreichen.

Meiner Erfahrung nach ist das weitaus größere Problem bei Hochleistungsanwendungen die Latenz, insbesondere bei Client-Server-Anwendungen. Wir haben eine Berechnungs-Engine, die Anfragen von mehr als 30 Clients entgegennimmt, kurze Berechnungen durchführt und Ergebnisse zurückgibt. Auf Bare-Metal-Systemen wird die CPU normalerweise auf 100% gedrängt, aber derselbe Server auf VMware kann die CPU nur auf 60-80% laden. Dies liegt hauptsächlich an der Latenz bei der Verarbeitung von Anfragen / Antworten.

dtoubelis
quelle
Ich kann aus Erfahrung sagen, dass die Sättigung einer 10-GbE-Verbindung mit einer einzelnen VM sehr schwierig ist. Wir haben VMWare FT verwendet, mit dem eine 1-Gbit / s-Verbindung problemlos über 10 Gbit / s ausgelastet werden kann und das nicht annähernd ausgelastet ist.
Mark Henderson
0

Ich habe mich nicht auf die Leistung der Grundelemente wie Kontextwechsel und Atomoperationen beschränkt, aber hier sind meine Ergebnisse eines Brute-Force-Tests, den ich kürzlich mit verschiedenen Hypervisoren durchgeführt habe. Es sollte ein Hinweis darauf sein, was Sie möglicherweise erwarten, wenn Sie hauptsächlich über eine begrenzte CPU- und RAM-Bandbreite verfügen.

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

Gordan
quelle
2
Das ist großartig, dass Sie einige Informationen für Xen und KVM haben ... Aber was ist mit den beliebtesten zwei Hypervisoren ?! Sie fehlen völlig. Und wenn Sie mehrere Typ-2-Hypervisoren einbinden, würde kein vernünftiger SysAdmin dies für die Produktion verwenden.
Chris S
Abgestimmt. Link ist tot.
Tim Duncklee