Dynamic Memory e Parent Partition Memory reserve

Nel post Hyper-V: Dimensione del Page File nella Root/Parent Partition avevo analizzato il corretto dimensionamento del Pagefile nella Parent Partition partendo delle indicazioni fornite nella Performance Tuning Guidelines for Windows Server 2008 R2 riguardo riguarda i requisiti di memoria nella parent/root patition:

“The root partition must have sufficient memory to provide services such as I/O virtualization, snapshot, and management to support the child partitions. The root partition should have at least 512 MB available.

A good standard for the memory overhead of each VM is 32 MB for the first 1 GB of virtual RAM plus another 8 MB for each additional GB of virtual RAM. This should be factored in the calculations of how many VMs to host on a physical server. The memory overhead varies depending on the actual load and amount of memory that is assigned to each VM.”

Di seguito uno tabella dei valori della memoria suggerita per la Parent Partition e del Pagefile nell’ipotesi di avere VM con 2 GB di RAM e considerando che Kernel memory dump (sufficiente nel 95% dei casi) richiede un Pagefile sul volume d boot di dimensione pari a 1.5 volte la dimensione della RAM fisica per sistemi con meno di 1373 MB, mentre con sistemi con più di 1373 MB di RAM occorre un Pagefile di 2 GB più 16 MB per sistemi a 32 bit e pari alla RAM più 128 MB su sistemi a 64 bit.

RAM Host

RAM
Parent Partion

min size
Pagefile

n° VM
a 2 GB

4 GB

512+(32+8)=552 MB

828 MB

8 GB

512+3*(32+8)=632 MB

948 MB

3

16 GB

512+7*(32+8)=792 MB

1188 MB

7

32 GB

512+15*(32+8)=1112 MB

1668 MB

15

64 GB

512+30*(32+8)=1752 MB

1880 MB

31

Col rilascio del Service Pack 1 di Windows Server 2008 R2 è stata introdotta una novità nella gestione della memoria di Hyper-V ovvero la Dynamic Memory. l’introduzione di questa tecnologia che permette di utilizzare meglio la RAM dell’Host comporta anche alcune novità per quanto concerne la gestione della RAM della Parent partition, come spiega Ben Armstrong (Virtualization Program Manager) nel suo post Parent memory reserve with dynamic memory.

In sostanza si è voluto cercare di risolvere il problema legato al fatto che l’esecuzione di molte macchine virtuali può sottrarre memoria alla Parent partition con la conseguenza che le performance di quest’ultima risultano ridotte.

Per risolvere questo problema si può pensare di arrestare ad esempio l’ultima VM avviata, ma se la Dynamic Memory è configurata sulle VM in esecuzione questa soluzione non è percorribile. Infatti arrestando una VM in uno scenario con Dynamic Memory attivata di fatto si rende disponibile la memoria alle altre VM in esecuzione e quindi il problema potrebbe nuovamente ripresentarsi.

Per questo motivo nell’SP1 è stata implementata la feature di “Parent memory reserve” che consente di impostare una quantità di memoria riservata alla Parent partition e che non potrà essere utilizzata dalle VM con la Dynamic memory abilitata.

Per impostare la Parent memory reserve occorre creare un valore DWORD con nome MemoryReserve nella chiave di registro HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization specificando il valore in MB e riavviare il sistema perché l’impostazione abbia effetto.

Infatti come indicato nella Hyper-V Dynamic Memory Configuration Guide Hyper-V calcola automaticamente la quantità di memoria da riservare alla Parent partition per l’esecuzione dei servizi di virtualizzazione e per i servizi di failover cluster nel caso Hyper-V faccia parte di un failover cluster.

“Hyper-V automatically calculates an amount of memory to reserve for exclusive use by the management operating system. This memory is used to run virtualization services. If the computer is part of a failover cluster, Hyper-V also reserves enough memory to run the failover cluster services. However, if the management operating system rums other roles or features, the amount of reserved memory might be too low. You can specify a larger amount of memory by modifying the registry.”

Quindi la Parent memory reserve è utile solo in quegli scenari in cui nella parent partition vengono eseguiti altri workloads. Questa è di fatto una scenario che va contro le best practies, ma che può accadere ad esempio se si utilizza Hyper-V sul proprio computer desktop o laptop per eseguire VM con finalità di testing e/o sviluppo.

Ovviamente occorre dimensionare correttamente la Parent memory reserve per evitare che la Parent partition utilizzi troppa memora a scapito delle VM eseguite o che la memoria ad essa assegnata non sia sufficiente.

Per dimensionare correttamente la memoria dedicata alla Parente partition possiamo utilizzare i suggerimenti che Nick Eales (Premier Field Engineer specializzato in Hyper-V e Failover Clustering) ha raccolto nel post Hyper-V Dynamic Memory and Host Memory Reserve setting sul PFE Virtualization Blog.

La RAM necessaria per Parent partion in cui non vi siano workloads in esecuzione è 384 MB + 30 MB per ogni 1GB di RAM sull’Host (se il computer utilizza CPU senza il supporto alla SLAT(Second Level Address Translation) il valore è leggermente superiore). La stessa indicazione viene anche fornita nel documento Running SQL Server with Hyper-V Dynamic.

“In order to ensure that the host operating system has enough resources to execute virtualization operations, Hyper-V reserves memory to be used exclusively by the host operating system. The amount of memory needed by the host operating system depends on the physical memory size and the hardware capabilities of host.

For systems with Second Level Address Translation (SLAT) functionality, you can estimate the host reserve by using the following formula:
Host Reserve = 384 MB + 30 MB per GB memory of the host

Di seguito la dei valori della memoria riservata per default per la Parent Partition e del Pagefile nell’ipotesi di avere VM impostate per l’utilizzo della Dynamic Memory con Startup RAM di 512 MB, Maximun RAM di 2 GB e un utilizzo medio di 1 GB di RAM e considerando di voler gestire un Kernel memory dump.

RAM Host

RAM
Parent Partion

min size
Pagefile

n° VM

4 GB

384+4*30=504 MB

756 MB

3

8 GB

384+8*30=624 MB

936 MB

7

16 GB

384+16*30=864 MB

1296 MB

15

32 GB

384+32*30=1344 MB

2016 MB

30

64 GB

384+64*30=2304 MB

2432 MB

61

Confrontando i dati della memoria suggerita della RAM della parent partition rispetto a quella riservata per default otteniamo dei valori abbastanza simili.

image

Di seguito riporto i valori indicativi per la memeria da riservare alla Parent partition e le relative di dimensioni del Pagefile per gestire un Kernel memory dump, ovviamente a tali valori dovranno  poi essere aggiunti i requisiti di memoria dei workloads ricalcolando quindi la dimensione del Pagefile. Nei casi in cui nella Parent partition non vengono eseguiti altri workloads (best practies) è possibile utilizzare tale schema per dimensionare il Pagefile della parent partition che per default viene dimensionato automaticamente sulla base della dimensione della RAM sull’host e quindi risulta eccessivo.

RAM
Host

RAM
Parent partition

Size
Pagefile

Fino a 4 GB

512 MB

768 MB

Tra 8 GB e 16 GB

1 GB

1536 MB

Tra 16 GB e 32 GB

1.5 GB

1664 MB

Tra 32 GB e 54 GB

2 GB

2176 MB

Tra 54 GB e 64 GB

2.5 GB

2688 MB

Confrontando invece il numero delle VM che è possibile eseguire in relazione alla quantità di RAM presente sull’Host si nota come la Dynamic memory permetta di eseguire in media doppio delle VM confrontando i seguenti scenari molto verosimili soprattutto in ambito VDI:

 “VM con memoria statica imposta a 2 GB rispetto a VM impostate per l’utilizzo della Dynamic Memory con Startup RAM di 512 MB, Maximun RAM di 2 GB e un utilizzo medio di 1 GB di RAM”

image

Per quanti volessero provare Hyper-V ricordo che è disponibile la versione di valutazione a 180 giorni per Windows Server 2008 R2 con Service Pack 1 oppure la versione gratuita di Hyper-V Server 2008 R2 SP1.