Mit Service Pack 1 (SP1) für Windows Server 2008 R2 wird Hyper-V um eine weitere wichtige Funktion erweitert, um Dynamic Memory. Mit dieser Erneuerung wird die Memory Konfiguration einer Virtual Machine (VM) einfacher, indem jeweils ein Start- und Maximalwert definiert wird und zukünftig die Zuweisung dynamisch erfolgt. Die VMs teilen dem Hypervisor jeweils den Memory Bedarf mit – verfügt dieser über genügend Memory so kann die VM darüber verfügen.
Wichtig, Dynamic Memory ist ein “Over-Subscription” und kein “Over-Commit” Feature (bekannt von VMware). Das heisst es kann nicht mehr Memory verwendet werden als der Hyper-V Host bereitstellen kann, sprich physikalisch vorhanden ist! Ein kleines Beispiel zum Unterschied der beiden Features: Over-Subscription ist, wenn eine Fluggesellschaft zu viele Flugtickets für den gleichen Flug verkauft hat. Over-Commit ist, wenn all diese Personen auftauchen.
How it works
Eine VM startet mit einem Minimal Wert an Memory, zum Beispiel 512 MB. Sobald der Memory Bedarf steigt und mehr Ressourcen benötigt werden, bezieht ein “Virtual Service Consumer” (VSC) Driver, im Kernel Mode der VM, zusätzliches Memory vom Hyper-V Host und weisst dies der VM zu. Wie der der VSC Driver funktioniert, lässt sich am besten mit der Architektur des Hypervisor zeigen:
Sobald eine VM dieses Memory nicht mehr benötigt, kommt das “Ballooning” zum Zug. Da nur die wenigsten Guest OS damit umgehen können, dass im laufenden Betrieb Memory weggenommen wird, muss bei Dynamic Memory eine andere Methode angewendet werden. Damit das erforderliche Memory nicht mehr für das OS verfügbar ist, reserviert der VSC dieses einfach. Da das Guest OS dies nun nicht mehr belegen wird, gibt der VSC das freie / ballooned Memory dem Host zurück damit dies anderen VMs bereitgestellt werden kann.
Folgende Einstellungen können für Dynamic Memory vorgenommen werden:
Startup und Maximum RAM – Mit “Startup RAM” wird die minimale Grösse des Memory welcher einer VM beim Power On zur Verfügung steht. Dieser Wert muss gross genug sein, damit ein OS gestartet werden kann. Als Default für Minimum RAM sind 512 MB konfiguriert. Mit “Maximum RAM” wird die maximale Grösse des Memory begrenzt. Ein VM kann allerdings nie mehr Memory adressieren als das Guest OS unterstützt. Der Default für Maximum RAM sind 64 GB.
Memory Buffer – Mit dem Buffer wird definiert wie viel zusätzliches Memory einer VM jeweils zugewiesen werden soll. Für jede VM kann ein zusätzlich zum Total Committed Memory ein Buffer zwischen 5 und 2‘000% konfiguriert werden. Dieses zusätzliche Memory kann dann für System File Cache genutzt werden um die Performance des OS zu verbessern. Steht nicht genügend Memory zur Verfügung, wird der Buffer allerdings nicht angewendet. Der Default eines Buffer ist 20%.
Memory Weight (in Beta noch als “Memory Priority” bezeichnet) – Mit der Gewichtung werden Anfragen nach mehr Memory gesteuert, wenn bereits sämtlich verfügbares Memory an andere VMs zugewiesen wurde. In anderen Worten gesagt, je höher die Gewichtung einer VM – desto weniger Memory wird dieser VM durch den VSC entfernt wenn der Hyper-V Hosts voll ausgelastet sein sollte.
.
Lizenzierung
Folgende Operating Systems, jeweils in der 32- und 64-Bit Version, können Dynamic Memory von SP1 nutzen:
- Windows Server 2003 / 2003 R2 / 2008 / 2008 R2 Web, Standard, Enterprise und Datacenter Edition
- Windows Vista / 7 Enterprise und Ultimate Edition
Aus der Sicht von Hyper-V könnte Dynamic Memory auch für ein unsupported OS aktiviert werden. Allerdings wird diese VM nie mehr als das zugewiesene Startup RAM verwenden können. Ob später Dynamic Memory auch für Linux Guests unterstützt wird, ist zum aktuellen Zeitpunkt nicht klar und wird durch Microsoft auch nicht kommentiert.
Konfiguration des Hyper-V Hosts
Sämtliche Hyper-V Hosts müssen mit dem SP 1 ausgestattet werden. In einem Failover Cluster sollte Dynamic Memory (oder RemoteFX) nicht aktiviert werden, bevor nicht sämtliche Nodes in diesem Cluster aktualisiert wurden. Das Vorgehen für die Installation von Service Packs in einem Failover Cluster wird in KB 174799 beschrieben. Für die Installation von SP1 wird zwischen 2.5 und 3.3 GB freien Disk Space benötigt. Will man bei Server Core nicht auf Windows Update, oder WSUS zurückgreifen, kann der Setup auch wie folgt aufgerufen werden: Windows6.1-kb976932-nnn.exe /quiet /norestart
Nebst der Installation von SP1 auf dem Host muss auch eine Memory Reserve eingebaut werden. Andernfalls kann es dazu kommen, dass die Parent Partition nicht mehr über genügen Memory verfügt und nicht mehr reagiert – oder sogar in einem Bluescreen endet. Um dies zu verhindern muss folgender Registry Key hinzugefügt werden:
Key: HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Virtualization
Entry: MemoryReserve
Type: DWORD
Value: 2048 (Decimal)
Mit dem Wert “2048″ wird 2GB für die Parent Partition reserviert, was dem empfohlenen Wert entspricht. Damit die Einstellung aktiv wird, muss der Host neugestartet werden.
Konfiguration der Guests
Damit Dynamic Memory verwendet werden kann, müssen zunächst die neuen Integration Services (IS) von SP1 installiert werden. Ohne, oder auch ohne aktuelle, IS ist das Betriebssystem der VM nicht in der Lage die neue Funktion zu verwenden.
Nachdem die IS aktualisiert wurden, ist ein Neustart erforderlich. Danach ist “Virtual Dynamic Memory” als neues Device verfügbar. Dies kann zum Beispiel im Device Manager kontrolliert werden und zeigt zugleich dass der Upgrade erfolgreich war: “Server Manager ⇒ Diagnostics ⇒ Device Manager ⇒ System devices”
Der Standardwert für Startup RAM liegt bei 512 MB, das Maximum liegt bei 65‘536 MB, das Minimum bei 8 MB. Bei der Konfiguration muss zwingend berücksichtigt werden, dass ein Guest Operating System über genügend Ressourcen verfügt um starten zu können. Wird das Startup RAM allerdings zu weit nach oben angepasst, so reduziert sich allerdings automatisch die Flexibilität und auch Effektivität von Dynamic Memory.
Der für das jeweilige Operating System empfohlene Wert kann aus der nachfolgenden Tabelle entnommen werden:
| Guest Operating System | Empfohlenes Startup RAM |
|---|---|
| Windows Server 2008 R2 | 512 MB |
| Windows Server 2008 | 512 MB |
| Windows Server 2003 R2 | 128 MB |
| Windows Server 2003 | 128 MB |
| Windows 7 | 512 MB |
| Windows Vista | 512 MB |
Die Einstellung Maximum RAM definiert, wie viel physikalisches Memory der VM zugewiesen werden kann. Es kann nie mehr Memory verwendet werden als hier definiert wurde – das aktuelle Limit einer Hyper-V VM liegt bei 64 GB, mit oder ohne Dynamic Memory.
Weitere Informationen
- Microsoft TechNet: Requirements and Limits for Virtual Machines and Hyper-V in Windows Server 2008 R2
- Microsoft TechNet: Deployment Guide for Windows Server 2008 R2 with SP1 and Windows 7 with SP1
- Microsoft Download Center: Dynamic Memory Technical Overview Whitepaper
- Ben Armstrong’s MSDN Blog: What is the memory buffer when dynamic memory is enabled?
- Ben Armstrong’s MSDN Blog: What is “memory priority” when service pack 1 is installed?

Bevor die Registry bearbeitet wird, sollte zwingend ein Backup erstellt werden (siehe KB 322756). Die inkorrekte Verwendung eines Registry-Editors kann schwerwiegende Probleme verursachen. Die Anpassung erfolgt auf eigene Verantwortung.
Shortlink: http://wp.me/pmjz3-HP




Comments (3)
Michael Seidl says:
Februar 25, 2011 at 1:45 pmHallo Michel,
hast du schon Erfahrung ob die 2GB “MemoryReserve” ausreichend sind? Ich dachte hier eher an 4GB?
lg Michael
Michel says:
Februar 26, 2011 at 12:11 amHallo Michael
Es kommt auf den Memory Bedarf an, aber die Parent sollte eigentlich nicht so viel Memory benötigen. Wie im Pagefile Artikel (http://www.server-talk.eu/2011/01/31/wie-viel-virtual-memory-braucht-ein-hyper-v-host/) beschrieben muss das Commited Memory analysiert werden um den Wert genau festlegen zu können. 2 GB waren in den meisten Fällen mehr als genug.
Cheers
Michel
Ralf Schröter says:
Februar 25, 2011 at 3:20 pmVielen Dank für den informativen Beitrag, besonders bezüglich des benötigten Registry Keys auf den Hostsystemen.
Ein schönes Wochenende,
Ralf