Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Consumi di memoria in una VM: i valori di host memory e guest memory

All'interno di un host ESXi, la memoria fisica messa a disposizione delle macchine virtuali è gestita in base alle modalità seguenti.

 1.    Il VMkernel crea uno spazio di indirizzamento contiguo all’interno della memoria fisica dell’host ESXi.

2.    La memoria RAM assegnata alle VM è resa disponibile dal VMkernel, a partire dallo spazio di indirizzamento descritto al punto 1. Il VMkernel consente di effettuare un’associazione 1:1 tra le porzioni di memoria fisica e la memoria utilizzata dalle VM, facendo in modo che le porzioni utilizzate da una VM non possano essere utilizzate da altre VM.

3.    Ogni sistema operativo guest utilizza la memoria assegnata alla VM per metterla a disposizione delle applicazioni installate su quel sistema

Prima di continuare con le spiegazioni, è opportuno definire alcuni termini relativi alla memoria virtuale.

  • Host memory - memoria fisica vista dall'hypervisor, ossia installata sul server in cui gira ESXi.
  • Guest memory - memoria vista dal sistema operativo guest in esecuzione sulla macchina virtuale, ovvero memoria virtuale assegnata alla VM.
  • Guest virtual memory - spazio di memoria mostrato dal sistema operativo guest alle applicazioni in esecuzione sulla macchina virtuale.

I trasferimenti di pagine di memoria dalla "guest virtual memory" al file di swap avvengono a livello di sistema operativo guest e sono gestiti dallo stesso sistema operativo. I trasferimenti di pagine di memoria dalla "guest memory" allo swap dell'host fisico sono invece gestiti dall'hypervisor ESXi.

Dal punto di vista pratico, per quantificare il carico effettivo di una VM sulla memoria dell'host ESXi, si utilizzano vSphere Client o vSphere Web Client, quest'ultimo disponibile solo con versioni licenziate di VMware vSphere. In caso di collegamento diretto all'ESXi con vSphere Client (unica possibilità con la versione free), alcune informazioni sono omesse. Selezionando una qualsiasi VM, nel tab "Resource allocation" troviamo i dati sull'uso della memoria.

Vediamo un esempio pratico qui sotto. Come possiamo osservare, i dati mostrati fanno riferimento ad una VM dotata di 2GB di memoria (guest memory). La macchina sta utilizzando 1,77GB di memoria fisica (host physical memory). Il vCenter indica inoltre che 48MB sono di Overhead.

Dati mostrati dal vCenter
Gli stessi dati mostrati dall'host ESXi, con meno dettagli

host guest memory vcenter

 host guest memory esxi

Nel conteggio della memoria fisica utilizzata da una VM, bisogna considerare un certo carico di memoria richiesto dall'ESXi per le funzioni di virtualizzazione. Questo carico aggiuntivo è detto overhead memory. La memoria di overhead è legata al numero di CPU virtuali della VM e alla quantità di RAM assegnata alla VM. Vale la regola per cui la memoria fisica utilizzata dalla VM può essere minore o al massimo uguale alla memoria assegnata più un certo carico di overhead:

VM’s host consumed memory <= Guest memory + Overhead memory


Proviamo a fare un po' di chiarezza su tutte le voci.

  • Host Consumed Memory è la memoria allocata dall'ESXi per la macchina virtuale che stiamo analizzando; questo valore comprende anche la overhead memory.
  • Active Memory è la memoria che il VMkernel vede come utilizzata in quell'istante dal sistema guest sulla VM. E' un valore che può generare confusione, soprattutto se rapportato ai valori indicati dal sistema guest (ad esempio Task Manager su Windows), e infatti NON è un valore preciso, in quanto basato su dati statistici.
  • Private Memory è la memoria allocata dall'ESXi per la macchina virtuale che stiamo analizzando, ma in questo caso il valore non comprende la overhead memory.
  • Shared è quella parte di Host Consumed Memory che il VMkernel mette in condivisione con le altre VM grazie al meccanismo di TPS (Transparent Page Sharing).
  • La memoria Compressed è quella parte di memoria, relativa alla VM, che l'ESXi mantiene compressa in chache.
  • La memoria Ballooned è quella parte di memoria, relativa alla VM, gestita dall'ESXi tramite il Memory ballon driver.

 

Facendo riferimento agli esempi di sopra

  • VM's guest memory size 2GB = Private 1,70GB + Overhead 48MB + Shared 288MB
  • Consumed 1,77GB = Private 1,70GB + Overhead 48MB + Ballooned 16MB

 

(0 Votes)