Dynamic Memory: alcune note

Con il Service Pack 1 di Windows Server 2008 R2 è stata rilasciata una nuova funzionalità di gestione della memoria in Hyper-V la Dynamic Memory.

Questa funzionalità permette di impostare per una macchina virtuale un valore minimo di RAM (Startup RAM) utilizzato all’avvio della VM e che deve essere sufficiente in base all’OS installato (per esempio per W7 occorre specificare almeno 512 MB) e un valore massimo di RAM (Maximum RAM) che potrà essere attribuito alla VM, ovviamente è inutile specificare un valore superiore a quello realmente gestibile dall’OS (per esempio nel caso di W7 a 32 bit il massimo valore gestibile è 4 GB).

I parametri Startup RAM e Maximum RAM posso essere modificati solo se la VM è spenta.

image

Vi sono poi altri due parametri in base ai quali è possibile configurare il comportamento della Dynamic Memory ovvero il Buffer di memoria (Memory buffer) e il Peso della memoria (Memory weight o Memory priority).

Il Memory buffer è una percentuale che rappresenta quanta memoria verrà assegnata in base alle necessità di RAM della VM. In particolare Hyper-V tramite i performance counters della VM determinerà la committed memory per calcolare la richiesta di memoria corrente e fornirà alla VM tale memoria incrementa del buffer (xes. se una VM ha una  memory committed di 1000 MB e il buffer è del 20% Hyper-V allocherà per la VM 1000 MB + il 20% = 1000MB +200MB =1200MB). Ovviamente la memoria verrà allocata a patto che ci sia RAM disponibile sul host.

Potrebbe essere utile abbassare il Memory buffer se la VM esegue un’applicazione che tende ad utilizzare quanta più RAM ha a disposizione.

Potrebbe essere utile alzare il Memory buffer se la VM esegue un’applicazione ha picchi di utilizzo di memoria.

Per ulteriori informazioni si veda What is the memory buffer when dynamic memory is enabled?.

Il Memory weight rappresenta invece il modo in cui verrà distribuita la RAM tra le vari VM nel caso non vi sia RAM a sufficienza sull’host per soddisfare i requisiti di memoria di ogni VM. In altre parole per ogni VM è possibile impostare una priorità con cui verrà soddisfatta la richiesta di memoria in caso di contenzioso con altre VM. Inoltre in caso di necessità di RAM alle VM con priorità inferiore verrà ridotta la memoria prima delle VM con priorità maggiore.  Quando una VM deve essere avviata la quantità di memoria che occorre eventualmente rimuovere dalle VM attive dipende dal Memory weight della VM da avviare, questo significa che in caso non vi sia memoria sufficiente e le VM attive hanno priorità superiore la VM non verrà avviata.

Un considerazione da tenere presente è che nel caso vi siano VM con memoria statica, queste non concorrono in questi processi, ovvero la memoria disponibile per la Dynamic Memory è quella dell’host – quella delle VM con memoria statica.

Per ulteriori informazioni si veda What is “memory priority” when service pack 1 is installed?.

La funzionalità di Dynamic Memory non prede il Memory Overcommit, ovvero questo significa che se si anno VM tutte con la stessa Memory weight per poterle avviare tutte la somma della Startup RAM di ogni VM non deve superare la memoria a disposizione.

A proposito di quanto sia la memoria a disposizione si tenga presente che Hyper-V si riserva automanticamente della memoria per il suo funzionamento (a cui va aggiunta quella riservata nel caso il computer appartenenza ad un failover cluster). Il valore della memoria riservata è modificabile aggiungendo il valore DWORD MemoryReserve nella  chiave di registro HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization e impostandolo alla quantità di memoria  desiderata espresso in MB. L’impostazione manuale può essere utile nel caso in cui l’host svolga altri ruoli oltre a Hyper-V e all’eventuale appartenenza ad un failover cluster. Per il dimensionamento del Pagefile nella parent partition si veda Hyper-V: Dimensione del Page File nella Root/Parent Partition.

Si noti che il PageFile nelle VM verrà impostato sulla base del valore della Startup RAM, dal momento che per la gestione dei dumps in relazione al page file valgono le seguenti:

  • Un Complete memory dump richiede un page file sul volume di boot di dimensioni pari alla RAM più 1 MB.
  • Un Kernel memory dump richiede un page file sul volume d boot di dimensione pari a 1.5 volte la dimensione della RAM fisica per sistemi con meno di 1373 MB. Con sistemi con più di 1373 MB di RAM occorre un page file di 2 GB più 16 MB per sistemi a 32 bit e pari alla RAM più 128 MB su sistemi a 64 bit.
    (Si tenga conto che in circa il 95% dei casi il Kernel dump risulta sufficiente)

In base alle necessità sulla gestione del dump occorrerà dimensionare opportunamente il Pagefile tenendo sulla base del valore della Maximun RAM assegnata alla VM (ovvero del caso peggiore). Per il dimensionamento del Pagefile di una child partirion si veda Hyper-V: Dimensione del Page File nella Root/Parent Partition.

Per ulteriori approfondimenti si vedano: