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
lock
Prä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.
quelle
Antworten:
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:
Die Gastbetriebssysteme:
Test Info:
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
quelle
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds
Sollte 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)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.
quelle
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/
quelle