Hyper-V Series: Configurare Dynamic Memory

Hyper-V Server

Nuovo appuntamento con Hyper-V Series, gli articoli che spiegano come funziona Hyper-V e come configurarlo in modo corretto. Il terzo capitolo è dedicato alla memoria e nello specifico a Dynamic Memory.

Dynamic Memory

Da Windows Server 2008 R2 SP1 è stato introdotta un’interessante funzionalità relativa alla gestione della memoria delle macchine virtuali, chiamata appunto Dynamic Memory, che consente di impostare l’utilizzo della vRAM con un valore minimo ed uno massimo dentro il quale la macchina virtuale spazia.

Il pensiero dietro a tutto questo è molto semplice: perché sprecare risorse quando non vengono utilizzate? Perché allocare 3GB di vRAM ad un File Server anche alle 2 di notte, quando magari nessuno lo utilizza?

Un sistema operativo, e con esso il software al suo interno, capace di gestire in modo dinamico la memoria, consente di ottimizzare le risorse ed evitare un over-provisioning. Questo, in coppia con soluzioni di Dynamic Optimization, consentono di spostare le macchine virtuali all’interno di un unico host di virtualizzazione, andando a spegnere gli host non utilizzati.

Un altro degli scopi dietro a DM, è la possibilità di fare densità delle macchine virtuali in ambito Virtual Desktop Infrastructure (VDI) grazie anche ad un ratio CPU di 12:1, facendo in modo che la memoria per ogni VM spazi tra il minimo supportato da Windows ed un valore massimo impostato dall’amministratore (utilizzato solo in casi di apertura di applicazioni complesse).

Gestione Dynamic Memory in Hyper-V

Per configurare la memoria dinamica è necessario aprire le impostazioni delle singole macchine virtuali, come mostra la figura 1.

Figura 1 – Impostazione Dynamic Memory

I valori modificabili sono 5:

  • Startup RAM: quantità di memoria da allocare al momento in cui la macchina virtuale verrà accesa o riavviata. Questo valore non può essere inferiore al quantitativo minimo di RAM.
  • Minimum RAM: quantità di memoria minima da allocare quando la macchina è scarica. Questo valore non andrà mai al di sotto della soglia operativa, che è data dalla memoria necessaria al sistema operativo per funzionare.
  • Maximum RAM: quantità di memoria massima da allocare, che il sistema operativo arriverà ad utilizzare in caso di necessità.
  • Memory Buffer: quantità di memoria da riservare come buffer, in caso la macchina virtuale ne avesse bisogno. Questo valore varia dal 5 al 200% (20% è il default). Bisogna stare attenti con questo parametro perché aumentare il buffer, quando la VM fa utilizzo di molta vRAM, può portare ad una pre-allocazione della memoria da parte dell’host di virtualizzazione.
  • Memory Weight: la priorità che viene impostata alla VM, rispetto alle altre, nell’assegnazione di memoria dinamica in caso di necessità.

Memory Buffer

Come viene calcolato il buffer? Semplice: memoria attualmente richiesta dalla VM + la percentuale impostata (es. 3.3GB (memory demand) + 700MB (memory buffer al 20%) = 4GB). In questo esempio saranno allocati quasi 4GB di RAM all’interno dell’host.

La figura 2 mostra il Task Manager di una macchina virtuale, in cui si può notare l’utilizzo attuale della memoria e la parte di cache.

Figura 2 – Task Manager

Il riscontro su questi valori possiamo trovarli all’interno della console Hyper-V, nei dettagli della macchina virtuale – figura 3.

Figura 3 – Parametri VM

Quanto appena analizzato ci fa capire che impostare il buffer in modo corretto previene l’allocazione di memoria in modo errato. In caso di macchine virtuali con un alto valore di vRAM, potrebbe essere utile portare il valore del buffer al 10%; in caso di macchine virtuali che fanno uso di una quantità normale di vRAM, ma che ogni tanto hanno dei picchi, potrebbe essere il caso aumentare il valore del buffer per fare in modo che la richiesta improvvisa della memoria non subisca rallentamenti.

Maximum Memory

Quando viene configurato questo valore è molto importante che non si lasci la quota di default perché in caso di problemi con il software, ci potrebbe essere un aumento della RAM allocata, che porterebbe ad una saturazione completa e quindi ad una perdita di performance.

Add Hot Memory

Posso modificare i valori impostati a caldo? Sì e no. No per quanto riguarda la Startup Memory e la Minimum Memory, sì per la Maximum Memory ma solamente se dovete aumentare il valore. Non è possibile ridurre la quantità di memoria massima a caldo.

Workload e Scenari

Se state pensando di utilizzare Dynamic Memory per ogni scenario, farete bene a frenare i vostri bollenti spiriti perché l’utilizzo di questa soluzione va valutata molto attentamente e leggere la documentazione del vendor è fondamentale.

Alcuni prodotti Microsoft non supportano DM, come Exchange Server e SharePoint Server che avrebbero un crollo di performance per il continuo rilascio e richiesta della memoria; al contrario SQL Server supporta a pieno DM sin dalla versione 2008 R2, anche se è sempre necessario leggere la documentazione per capire se il vostro ambiente può ottenere un guadagnare un vantaggio attivando la modalità.

PowerShell

Per visualizzare in un colpo solo la configurazione delle macchine virtuali, in termini di memoria, potete utilizzare il seguente comando PowerShell: Get-VM | where DynamicMemoryEnabled -eq $true | ft Name, MemoryAssigned, MemoryMinimum, MemoryMaximum, MemoryDemand

Conclusione

Impostare correttamente la Dynamic Memory consente di ottimizzare l’utilizzo delle risorse e di fare densità, ma un’errata configurazione potrebbe portare a problemi di performance sia all’interno della macchina virtuale che nell’host di virtualizzazione. Come sempre, leggete la documentazione a corredo del vostro software e testate lo scenario in un ambiente di lab.