Empfehlungen zur VM-Speicherzuweisung Allgemein/Hyper-V

Empfehlungen zur VM-Speicherzuweisung Allgemein/Hyper-V

Ich habe eine grundlegende Frage zur VM-Einrichtung. Ich verwende Hyper-V, aber ich denke, die Frage ist ziemlich allgemein gehalten. Dies ist für ein Heimbüro, ich möchte eine einigermaßen gute Leistung auf den VMs ohne viel Arbeit erzielen. Ich verwende die VMs zum Testen/Debuggen meiner Software. Idealerweise hätte ich alle Betriebssysteme gestartet, aber nur eines (wahrscheinlich die meiste Zeit null) würde gleichzeitig aktiv verwendet.

Gibt es allgemeine Richtlinien für die Speicherzuweisung an VMs? Im Extremfall könnten Sie den Gesamtspeicher durch die Anzahl der VMs teilen (insgesamt 4 GB, 4 VMs -> jeweils 1 GB). Im anderen Extremfall könnten Sie jeder VM den vollen Speicher zuweisen und das Betriebssystem entscheiden lassen. Ich vermute, beides ist falsch! Ich suche nach einer Faustregel für eine angemessene Leistung. Ich habe keine Ahnung, wie der VM-Server den Speicher für die VMs verwaltet.

[Bearbeiten] Ich habe diese Frage gestellt, weil ich fälschlicherweise davon ausgegangen bin, dass Hyper-V (Version 2008 R2) VMs dynamisch zusätzlichen Speicher zur Verfügung stellen kann, wenn dieser verfügbar ist. Ich dachte, ich könnte den Speicher überbelegen, solange meine Nutzung jeweils nur eine VM auf einmal auslastet. Da Hyper-V beim Start jeder VM den festen Speicher zuweisen möchte, muss ich entweder einige VMs herunterfahren und nur die ausführen, die ich brauche, oder die VMs auf niedrigere Speicherzuweisungen einstellen und sicherstellen, dass der physische Speicher für alle Zuweisungen plus den Hyper-V-Prozess und (möglicherweise) das Host-Betriebssystem ausreicht.

Es hört sich an, als ob VMWare mehr Optionen in dieser Richtung hat, wie in den bereitgestellten Antworten erwähnt. [/Bearbeiten]

Danke, Brett

Antwort1

Als allgemeine Regel gilt, dass Sie im schlimmsten Fall gerade genug physischen RAM haben müssen, damit alle Standardfunktionen zuverlässig aus dem RAM heraus ausgeführt werden können. Diese magische Zahl variiert von Betriebssystem zu Betriebssystem und hängt stark von der Verwendung des Gastbetriebssystems ab. Sie können einen Windows 2003-Server problemlos mit ein paar hundert Megabyte RAM booten, einige kompakte Linux-Distributionen mit 30 Megabyte oder weniger und so weiter. Wenn Sie jedoch SQL Server in Ihrem Gast mit Datenbanken mit mehreren Gigabyte ausführen möchten, müssen Sie sicherstellen, dass dieser tatsächlich über echten RAM verfügt, der die paar Gigabyte RAM unterstützt, die er zu haben glaubt.

Wie der Hypervisor mit RAM umgeht, variiert stark zwischen Anbietern und Produkten. Hyper-V unterstützt kein sogenanntes Memory-Overcommiting, sodass Sie RAM nur basierend auf dem physisch verfügbaren Speicher zuweisen können. VMware ESX ermöglicht Overcommiting und legt Regeln für die Konfliktschlichtung (Shares) fest, um zu steuern, was passiert, wenn die VMs ausgelastet sind und die Gesamtmenge an physischem RAM nicht ausreicht, um die Last zu bewältigen. In einer Hyper-V-Umgebung haben Sie diese Kontrollmöglichkeit nicht, sodass Sie im Voraus ausreichend RAM zuweisen müssen.

VMware verfügt über ein paar weitere Tricks, um bei Speicherüberbelegungen zu helfen: Transparent Page Sharing und Memory Ballooning.

Transparent Page Sharing ist im Grunde eine Einzelinstanzspeicherung für RAM. Der Hypervisor überwacht die RAM-Blöcke, die jeder VM zugewiesen sind, und wenn er feststellt, dass in mehreren VMs gemeinsame Blöcke vorhanden sind, behält er nur eine einzige Kopie und verweist alle VMs darauf. Wenn eine VM anschließend versucht, in diesen Block zu schreiben, teilt sie eine Kopie ab, damit keine schlimmen Dinge passieren. In einer homogenen VM-Umgebung kann dadurch eine beträchtliche Menge RAM gespart werden, ohne die Leistung zu beeinträchtigen.

Memory Ballooning ist ein Mechanismus, der es dem Hypervisor ermöglicht, einer VM zugewiesenen RAM zu „leihen“ und ihn einer wichtigeren VM zu geben, indem er in der VM einen Gastbetriebssystemtreiber verwendet, der einen (großen) Speicherblock innerhalb dieses Gasts zuweist. Sobald dieser zugewiesen ist, kann der Hypervisor den physischen RAM, der den ihm vom Balloon-Treiber zugewiesenen Speicher unterstützt, sicher neu zuweisen. Der Vorteil dieser Vorgehensweise gegenüber dem direkten Ansatz, bei dem der Hypervisor den Speicher der Gast-VM einfach auf die Festplatte auslagert, um den RAM neu zuzuweisen, besteht darin, dass der Gast, der den physischen RAM verliert, weiß, dass der Speicher von etwas anderem verwendet wird, und das Risiko, dass der „geliehene“ RAM wichtigen Systemfunktionen innerhalb des Gasts zugewiesen wurde, erheblich geringer ist.

Bearbeitet, um hinzuzufügen: Ich habe nie versucht herauszufinden, was mit Hyper-V passiert, wenn Sie versuchen, VMs zu starten, deren Speicheranforderungen die Menge des verfügbaren physischen RAM überschreiten. In allen Dokumentationen, die ich finden kann, heißt es, dass die VMs den gesamten RAM erhalten, den Sie für sie konfiguriert haben, und dass dann dem Hypervisor und dem Host-Betriebssystem der Rest zugewiesen wird. Hyper-V verfügt über keinen Mechanismus, um einer VM eine Mindestreserve an RAM zuzuweisen und dann den Rest aus einem Pool zuzuweisen, obwohl es einen solchen Mechanismus für CPU-Ressourcen bietet. Auch hier bietet VMware ESX\ESXi diese Option.

Denken Sie daran, dass Sie auch den physischen Speicher einplanen müssen, der sowohl vom Hypervisor als auch vom Host-Betriebssystem benötigt wird (vergessen Sie letzteres, wenn Sie den Bare-Metal-Hyper-V-Server betreiben). MicrosoftsRatschläge zur Leistungsoptimierung für Hyper-Vbesagt, dass Sie zusätzlich zu den XGig RAM, die Sie in Ihren VMs haben, Folgendes benötigen:

  • 300 MB für den Hypervisor
  • plus 32 MB für das erste GB RAM, das jeder virtuellen Maschine zugewiesen wird
  • plus weitere 8 MB für jedes zusätzliche GB RAM, das jeder virtuellen Maschine zugewiesen wird
  • plus 512 MB für das Host-Betriebssystem, das auf der Root-Partition ausgeführt wird

Wenn Sie hierfür nicht über genügend physischen RAM verfügen, wird die Leistung und möglicherweise auch die Stabilität erheblich beeinträchtigt.

Antwort2

Hyper-V in Windows Server 2008 R2tutunterstützt eine dynamische Speicherfunktion (ich verwende SP1 – bin nicht sicher, ob es in der RTM-Version enthalten war). Mir ist klar, dass Ihre Frage ziemlich alt ist, also war es wahrscheinlich nicht vorhanden, als Sie sie gestellt haben.

Ich habe damit begonnen, jeder Gast-VM statischen Speicher zuzuweisen, aber mein Server war schnell voll ausgelastet. Mit dynamischem Speicher können Sie pro VM eine anfängliche (vielleicht niedrige) Menge und eine maximale Menge zuweisen. Anschließend wird Speicher nach Bedarf zugewiesen und auch ungenutzter Speicher wird wiederhergestellt. Sie müssen die Einstellungen jeder VM bearbeiten, um dies einzurichten – es ist beim Erstellen einer neuen VM nicht verfügbar. Ich habe gerade eine Reihe von VMs neu konfiguriert, um dynamischen Speicher zu verwenden, und meinen gesamten Speicherbedarf um fast die Hälfte reduziert.

Screenshot des Hyper-V-Managers mit zugewiesenem Speicher

Die VMs, die ich für Dynamic Memory konfiguriert habe, zeigen den aktuellen Speicherbedarf und -status. Die hervorgehobene VM läuft noch innerhalb ihrer anfänglichen Zuweisung von 1 GB. Der Exchange-Server (zweiter von oben) ist ein dickes Schwein und hat seine anfänglichen 1 GB aufgebraucht und ihm wurden noch ein paar mehr zugewiesen. Die Funktion ermöglicht einen konfigurierbaren Puffer (standardmäßig 20 %), sodass Hyper-V Exchange die benötigte Menge plus etwas mehr zugewiesen hat.

Antwort3

Dies ist keine allgemeine Frage, da Hyper-V keine Speicherseitenfreigabe wie VMWare durchführen kann. Diese Technologie kann die Art und Weise, wie VM-Speicher zugewiesen wird, enorm verändern. Wenn Hyper-V dies unterstützt, würde ich vorschlagen, dass Sie Ihren VMs eine Anfangsmenge zuweisen und dann die tatsächliche Nutzung im Zeitverlauf pro VM betrachten und die Zuweisung ändern, wenn Sie mehr über ihr Verhalten erfahren.

verwandte Informationen