Also, was ist der Overhead der Virtualisierung und wann sollte ich besorgt sein?

16

Ich suche nach guten Faustregeln, um zu verstehen, wann eine Maschine NICHT virtualisiert werden muss.

Ich weiß zum Beispiel, dass ein vollständig CPU-gebundener Prozess mit einer Auslastung von nahezu 100% wahrscheinlich keine gute Idee für die Virtualisierung ist. Ist es jedoch sinnvoll, einen Vorgang auszuführen, bei dem die CPU die meiste Zeit über eine "erhebliche Menge" beansprucht (z. B. 40)? oder 50%)?

Ein weiteres Beispiel: Wenn ich 1000 Maschinen virtualisiere, auch wenn sie nur leicht oder mäßig ausgelastet sind, wäre es wahrscheinlich schlecht, wenn alle auf einem Host mit nur 4 Kernen ausgeführt würden.

Kann jemand Hinweise zur Virtualisierung basierend auf der Maschinenauslastung oder der Anzahl der Gastmaschinen im Vergleich zu den Hostressourcen zusammenfassen?

Normalerweise virtualisiere ich auf Windows-Hosts mit VirtualBox oder VMWare, aber ich gehe davon aus, dass dies eine ziemlich allgemeine Frage ist.

kvista
quelle
1
Selbst bei einigen CPU-gebundenen Aufgaben kann Virtualisierung sinnvoll sein. Wenn Benutzer Jobs als VM-Images an Cluster senden können, können sie die Umgebung, in der die Jobs ausgeführt werden, wesentlich besser steuern, als dies zum Beispiel mit einem einfachen Batch-Scheduler möglich wäre.
Flexo
Aber irgendwann erscheint die Planung der "VM-Ausführung" als unnötiger Aufwand, wenn es schon schwierig genug ist, Threads innerhalb einer einzelnen VM zu planen, oder?
kvista

Antworten:

13

Festplattensubsystem. Dies ist normalerweise die am wenigsten gemeinsam nutzbare Ressource. Erinnerung natürlich, aber diese ist offensichtlich.

Einschränkungen des Festplattensubsystems können auf beide Arten angewendet werden. Wenn ein System viele Festplatten-E / A verwendet, werden andere Gäste langsamer. Wenn dieser Gast in Produktion ist, muss er wahrscheinlich schnell auf Webanfragen reagieren. Dies kann sehr frustrierend sein und ist auch ein wichtiger Grund, warum Sie keine virtuelle Hardware mieten sollten. Sie können dieses Problem minimieren, indem Sie dedizierte Datenträger verwenden.

Bei Verwendung von nur 512 MB Arbeitsspeicher in Guests wird der gesamte Festplatten-Cache auf dem Host gespeichert. Und es ist nicht gleichmäßig unter den Gästen aufgeteilt.

Sorgen Sie sich nicht um CPU IO. Auf diese Weise ist die Virtualisierung sehr effizient, da häufig nur mehrere Prozesse auf demselben System ausgeführt werden. Ich sehe selten Multi-Xeon-Systeme, die zu 100% auf CPU laufen.

Bearbeiten: Tippfehler

Antti Rytsölä
quelle
3
schwere Platten - I / O - Anforderungen würden die # 1 Grund, nicht virtualisieren - es ist die Ressource am stärksten von Virtualisierungs - Strafen finden codinghorror.com/blog/2006/10/...
Jeff Atwood
Danke - beide Kommentare sind hilfreich. Sie fragen sich nur, ob jemand weiß, warum die Virtualisierung bei hohem Festplattenverbrauch problematisch ist? Warum sollten Virtualisierungstechniker dieses relativ grundlegende Problem ignorieren? Oder ist es nur wesentlich komplexer als die CPU-Virtualisierung?
Kvista
Hinweis - @ Jeff, ich lese Ihren Blogbeitrag aus dem Jahr 2006 und gehe davon aus, dass dies den Grund für die Verbesserung (dh die Spindelreservierung) erklären wird. Meine Frage an Virtualisierungsdesigner / -implementierer bleibt jedoch die gleiche - ist dies für die Virtualisierung im Grunde problematisch ein Weg, CPU-Virtualisierung ist nicht?
kvista
3
Es gibt nur so viele Suchvorgänge, die eine Festplatte ausführen kann. Für eine 5-ms-Festplatte wären dies 200 Suchvorgänge pro Sekunde. Und wenn ein Betriebssystem Dateien kopiert oder Verzeichnisse scannt, verwendet es im Allgemeinen immer 100% der Festplatte. Während dieser Zeit sind alle kleinen Anfragen von der Festplatte verzögert, und es gibt viele von ihnen. Auch Dateisystempuffer werden durch die Kopie verschwendet. Man könnte sagen, unser Konzept eines funktionierenden Betriebssystems beruht auf einer inaktiven Festplatte.
Antti Rytsölä
1
Vielen Dank. Ich denke, es wäre interessant zu sehen, ob SSDs diese Gleichung überhaupt ändern. Aber jetzt kommen wir zu weit in den Diskussionsmodus. Ich verstehe - danke an alle.
kvista
15

Dinge, die ich niemals in eine VM stecken würde:

  • Alles, was bestimmte Hardware verwendet, die nicht virtualisiert werden kann: in der Regel Grafiken, eine ganze Reihe von Hardware-Sicherheitsmodulen, alles mit angepassten Treibern (z. B. spezielle Netzwerktreiber).

  • Systeme mit Lizenzproblemen. Einige Softwaregebühren pro physischer CPU oder Core, unabhängig davon, wie wenig Sie der VM zugewiesen haben. Ein Audit würde Sie treffen, wenn Sie Software für einen einzelnen Kern lizenziert hätten, der in einer VM auf einem 32-Kern-Server ausgeführt wird.

Dinge, von denen ich abraten würde, eine VM einzubauen:

  • Software, die sich bereits bemüht, alle Ressourcen in Standardhardware zu nutzen. Maschinen, die im Rahmen eines Big-Data-Projekts wie Hadoop betrieben werden, sind in der Regel für den Betrieb auf Bare-Metal-Basis ausgelegt.

  • Alles, was fein abgestimmt werden soll, um Ressourcen zu nutzen. Wenn Sie wirklich anfangen, eine Datenbank zu optimieren, werden VMs, die um Ressourcen kämpfen, die Arbeit wirklich in die Knie zwingen.

  • Alles, was schon einen großen Engpass hat. Es spielt schon nicht gut mit sich selbst, es wird wahrscheinlich nicht gut mit anderen spielen.

Es gibt einige Dinge, die für das Einfügen von VMs ziemlich großartig sind:

  • Alles, was viel Zeit im Leerlauf verbringt. Dienstprogramm-Hosts wie Mail und DNS haben es schwer, genug Last auf moderner Hardware zu erzeugen, um dedizierte Server zu gewährleisten.

  • Anwendungen, die von sich aus nicht gut (oder nicht leicht) skalierbar sind. Legacy-Code fällt ziemlich häufig in diese Kategorie. Wenn sich die App nicht erweitern lässt, um den Server zu belegen, verwenden Sie viele kleine virtuelle Server.

  • Projekte / Anwendungen, die klein anfangen, aber wachsen. Es ist viel einfacher, Ressourcen zu einer VM hinzuzufügen (und auf neuere, größere Hardware umzusteigen), als auf Bare-Metal-Basis zu starten.

Ich bin mir auch nicht sicher, ob Sie es übertreiben, eine große Anzahl von VMs auf einen einzelnen Host zu setzen, aber wenn Sie ein großes VM: HW-Verhältnis anstreben, sollten Sie stattdessen ESX, Xen, KVM in Betracht ziehen. Sie werden viel besser abschneiden als mit VMware oder VirtualBox unter Windows.

Cakemox
quelle
1
+1 sehr hilfreiche organisierte Kommentare - danke!
Kvista
Noch ein Kommentar - selbst wenn ich ESX usw. verwende, gehe ich davon aus, dass es irgendwann keinen Sinn mehr macht, X-Maschinen auf einen Y-Core-Host zu setzen. Was sind gute Faustregeln? Ich gehe davon aus, dass Whitepaper zu Virtualisierung irgendwo dieses Problem beheben müssen, aber leider kann ich es nicht leicht finden.
kvista
1
Für VMware können Sie hier beginnen: vmware.com/technology/whyvmware/calculator
Cakemox
Als Referenz: Über den obigen VMWare-Link können Sie bis zu 30 VMs pro CPU konfigurieren. Der Standardwert beträgt 6 VMs pro CPU.
Alex Yursha
4

Es gibt zwei Punkte für die Virtualisierungsleistung.

  • gemeinsamer Engpass
  • Emulation

Wer ist bei geteilten Engpässen noch auf dem gleichen Eisen? Wenn Sie sich in einer virtualisierten Umgebung befinden, sind Sie sehr darauf angewiesen, dass der Hosting-Partner Ihnen gegenüber ehrlich ist.

Ich denke, die Hauptfrage für die Rohleistung (insbesondere die Interaktivität) ist, welche Teile des Virtualisierungssystems emuliert werden. Dies ist je nach Einrichtung unterschiedlich. Festplatte und Netzwerk sind die typischen Kandidaten. Als Faustregel gilt, dass die Emulation die Performance- "Kosten" für die Durchführung einer Aktion verdoppelt. Daher sollte jede Hardware-Latenzzeit doppelt gezählt und jede Durchsatzzahl halbiert werden.

Bittrance
quelle
1
Die Zahlen, die ich sah, waren CPU bei 96-97%, Netzwerk bei 70-90% und Festplatte bei 40-70% (von Bare Metal)
Jeff Atwood
1
+1 Faustregel Kommentar ist hilfreich.
kvista
2

Letztendlich sollte keine Hochleistungslast virtualisiert werden. Die Leistungsüberschüsse der Virtualisierung sind nicht trivial. Sehen Sie die Ergebnisse meiner Tests hier:

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

OTOH, wenn Sie eine Reihe von Maschinen konsolidieren möchten, die die ganze Zeit im Leerlauf sind, ist die Virtualisierung der richtige Weg.

Gordan
quelle
1

Gute Antwort von anttiR.

Darüber hinaus zeitkritische Systeme. Ich habe gerade herausgefunden, dass das Hyper-V-Problem (vm fällt langsam zurück, alle modernen Betriebssysteme in vm tun das, werden oft resynchronisiert) mit einigen zeitkritischen Anwendungen, die ich entwickle, nicht gut funktioniert. Außerdem werde ich dort "viel" CPU verwenden und plane, eine 12-Kern-Maschine nur für diese Anwendung in der Produktion zu bekommen.

TomTom
quelle
Asterisk ist eine solche Anwendung. Bei Telefonkonferenzen passieren bei der Visualisierung einige sehr unkonventionelle Dinge.
Ryaner
Ich habe das Problem mit der Taktstabilität für Datenaufzeichnungen;) Gott sei Dank bekomme ich einen zuverlässigen Zeitstempel aus dem Datenfeed, aber herauszufinden, ob es Netzwerkprobleme gibt, ist schwierig, wenn die Systemuhr nicht stabil ist.
TomTom