Frage Wie viel Overhead hat die x86 / x64-Virtualisierung?


Wieviel Overhead kostet die x86 / x64-Virtualisierung (ich werde wahrscheinlich VirtualBox, möglicherweise VMWare, definitiv keine Paravirtualisierung verwenden) für jede der folgenden Operationen einen Win64-Host und Linux64-Gast mit Intel Hardware-Virtualisierung?

  • Rein CPU-gebundener 64-Bit-Benutzermodus

  • Rein CPU-gebundener 32-Bit-Benutzermodus

  • Datei-I / O auf die Festplatte (Ich kümmere mich hauptsächlich um den Durchsatz, nicht Latenz)

  • Netzwerk-E / A

  • Thread-Synchronisations-Primitive (Mutexe, Semaphore, Zustandsvariablen)

  • Thread-Kontextwechsel

  • Atomare Operationen (mit dem lock Präfix, Dinge wie Vergleichen und Tauschen)

Ich interessiere mich hauptsächlich für den hardwaregestützten x64-Fall (sowohl für Intel als auch für AMD), würde aber nichts dagegen haben, von der nicht unterstützten binären Übersetzung und x86-Fällen (d. H. 32-Bit-Host und Gast) zu hören. Ich bin nicht an Paravirtualisierung interessiert.


22
2018-04-20 23:48


Ursprung


(1) "x86" bedeutet 32-Bit. Sie können keinen 64-Bit-Code ausführen. Die AMD64-Virtualisierung (auch als x64 bekannt) hat andere Einschränkungen, da sie Hardwareerweiterungen erfordert. (2) Meinst du x86-Virtualisierung durch binäre Übersetzung (nur x86) oder hardwaregestützte Virtualisierung (VT)? - Skyhawk
@ Miles: Ich habe die Frage geklärt. - dsimcha


Antworten:


Ich habe festgestellt, dass es für Fragen wie die Ihre keine einfache und absolute Antwort gibt. Jede Virtualisierungslösung verhält sich bei bestimmten Leistungstests unterschiedlich. Außerdem können Tests wie der Datenträger-E / A-Durchsatz in viele verschiedene Tests unterteilt werden (Lesen, Schreiben, Neuschreiben, ...) und 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 Datenträger-E / A zu bezeichnen. Aus diesem Grund gibt es keine absolute Antwort für Labels wie Overhead für Datenträger-E / A.

Es wird komplexer, wenn man versucht, eine Beziehung zwischen verschiedenen Benchmark-Tests zu finden. Keine der Lösungen, die ich getestet habe, hatte eine gute Leistung bei Mikro-Betriebstests. Zum Beispiel: Innerhalb der VM dauerte ein einzelner Aufruf von "gettimeofday ()" im Durchschnitt 11,5 mal mehr Taktzyklen als auf der Hardware. Die Hypervisoren sind für reale Anwendungen optimiert und funktionieren nicht gut bei Mikrooperationen. Dies ist möglicherweise kein Problem für Ihre Anwendung, die möglicherweise besser als reale Anwendung passt. Ich meine durch Mikro-Operation jede Anwendung, die weniger als 1.000 Taktzyklen ausgibt (für eine 2.6 GHz-CPU werden 1.000 Taktzyklen in 385 Nanosekunden oder 3.85e-7 Sekunden ausgegeben).

Ich führte umfangreiche Benchmark-Tests für die vier Hauptlösungen für die Konsolidierung von Rechenzentren für x86-Architekturen durch. Ich habe fast 3000 Tests durchgeführt, bei denen die Leistung innerhalb von VMs mit der Hardwareleistung verglichen wurde. Ich habe "Overhead" genannt den Unterschied der maximalen Leistung in VM (s) mit maximaler Leistung gemessen auf Hardware gemessen.

Die Lösungen:

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

Die Gast-Betriebssysteme:

  • 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 Bits. Dies ist CPU- und speicherintensiv.

  • Datenträger-E / A und -Latenz: Bonnie ++

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

  • Mikro-Operationen: rdtscbench: Systemaufrufe, Interprozess-Pipe-Kommunikation

Die Durchschnittswerte werden mit den Parametern berechnet:

  • CPU und Arbeitsspeicher: AVERAGE (HPL32, HPL64)

  • Datenträger-E / A: AVERAGE (put_block, rewrite, get_block)

  • Netzwerk-E / A: AVERAGE (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 unter Verwendung meiner Metriken sind die Durchschnittswerte der Ergebnisse der vier Virtualisierungslösungen:

VM-Layer-Overhead, Linux-Gast:

  • CPU und Speicher: 14.36%

  • Netzwerk-E / A: 24.46%

  • Datenträger-E / A: 8.84%

  • Festplattenlatenz beim Lesen: 2,41-mal langsamer

  • Ausführungszeit der Mikrooperationen: 10,84 mal langsamer

VM-Layer-Overhead, Windows-Gast:

  • CPU- und Speicherdurchschnitt für 32 und 64 Bits: 13.06%

  • Netzwerk-E / A: 35.27%

  • Datenträger-E / A: 15.20%

Beachten Sie, dass diese Werte generisch sind und nicht das Szenario mit spezifischen Fällen widerspiegeln.

Bitte werfen Sie einen Blick auf den ganzen Artikel: http://petersenna.com/de/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions


24
2018-02-08 15:56



Dieser Artikel ist veraltet - dyasny
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds, sollte das nicht eine einfache Unterteilung von 1.000 durch 2.600.000 sein, um die Anzahl der Sekunden zu erhalten, die 1.000 Taktzyklen benötigen? (was nicht 23 Millisekunden ist) - dvdvorle
@Herr. Glücklich, du hast Recht. Ich habe 385 Nanosekunden mit: 1000/2600000000 = 0,000000385 = 385 Nanosekunden. Stimmst du dem zu? Danke, dass du darauf hingewiesen hast. - Peter Senna
@dyasny, Ich suche nach Hardware, um die Tests mit aktualisierten Versionen zu wiederholen. Irgendeine Idee wo kann ich es finden? - Peter Senna
Hardware kann leicht in einem Geschäft gefunden werden - dyasny


Es gibt zu viele Variablen in Ihrer Frage, aber ich könnte versuchen, sie einzugrenzen. Nehmen wir an, Sie gehen mit VMware ESX, Sie machen alles richtig - neueste CPU mit Unterstützung für Virtualisierung, VMware Tools mit paravirtualisierten Speicher- und Netzwerktreibern, viel Speicher. Angenommen, Sie führen bei diesem Setup eine einzelne virtuelle Maschine aus. Aus meiner Erfahrung sollten Sie ~ 90% der CPU-Geschwindigkeit für CPU gebundene Arbeitslast haben. Ich kann Ihnen nicht viel über Netzwerkgeschwindigkeiten erzählen, da wir 1Gbps Links verwenden und ich kann es ohne Probleme sättigen, es kann mit 10Gbps Verbindung anders sein, aber wir haben keine von denen. Der Speicherdurchsatz hängt von der Art des Speichers ab, wobei ich ca. 80% des Speicherdurchsatzes mit lokalem Speicher erreichen kann, aber bei 1 Gbps NFS liegt er nahe bei 100%, da der Netzwerkbetrieb hier ein Flaschenhals ist. Über andere Messwerte können Sie nichts sagen, Sie müssen mit Ihrem eigenen Code experimentieren.

Diese Zahlen sind sehr ungefähr und hängen stark von Ihrem Ladungstyp, Ihrer Hardware, Ihrem Netzwerk ab. Es wird noch unschärfer, wenn Sie mehrere Workloads auf dem Server ausführen. Aber ich möchte hier sagen, dass Sie unter idealen Bedingungen in der Lage sein sollten, 90% der nativen Leistung zu erreichen.

Aus meiner Erfahrung ist das viel größere Problem für Hochleistungsanwendungen die Latenz, und dies gilt insbesondere für Client-Server-Anwendungen. Wir haben eine Berechnungs-Engine, die Anfragen von mehr als 30 Clients empfängt, kurze Berechnungen durchführt und Ergebnisse zurückgibt. Auf blankem Metall schiebt es normalerweise die CPU zu 100%, aber der gleiche Server auf VMware kann die CPU nur zu 60-80% laden, und dies liegt hauptsächlich an der Latenz bei der Behandlung von Anfragen / Antworten.


4
2018-04-21 05:09



Ich kann aus Erfahrung sagen, dass das Sättigen einer 10GbE-Verbindung mit einer einzelnen VM sehr schwierig ist. Wir haben VMWare FT verwendet, das eine 1-Gbps-Verbindung problemlos über 10 Gbe sättigen kann und es nicht annähernd gesättigt hat. - Mark Henderson♦


Ich habe mich nicht mit den grundlegenden Grundfunktionen wie Kontextwechsel und atomaren Operationen beschäftigt, aber hier sind meine Ergebnisse eines Brute-Force-Tests, den ich kürzlich mit verschiedenen Hypervisoren durchgeführt habe. Es sollte anzeigen, was Sie erwarten könnten, wenn Sie hauptsächlich CPU- und RAM-Bandbreite begrenzt sind.

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


0
2017-08-07 13:25



Das ist großartig, dass Sie ein paar Informationen für Xen und KVM haben ... Aber was ist mit den beliebtesten zwei Hypervisors ?! Sie fehlen komplett. Und Sie haben mehrere Typ-2-Hypervisoren, die kein SineAdmin für die Produktion verwenden würde. - Chris S
Abgestimmt. Der Link ist tot. - Tim Duncklee