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

Concetti sulla memoria virtuale nell'ambiente vSphere

Nell’architettura vSphere, ci sono 3 livelli di memoria.

  1. Il VMkernel crea uno spazio di indirizzamento contiguo all’interno della memoria fisica dell’host ESXi, ripartito fra le varie VM in esecuzione nel nodo.
  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 porzioni di memoria fisica e memoria utilizzata dalle VM, facendo in modo che le porzioni utilizzate da una VM non possano essere utilizzate da altre VM.
  3. Il sistema operativo a bordo di una VM utilizza la memoria assegnata alla VM per metterla a disposizione delle applicazioni, come accade nelle installazoni fisiche.

La memoria fisica utilizzata da una VM segue la regola seguente:

VM’s host memory usage = VM’s guest memory size + VM’s overhead memory

In pratica la memoria fisica utilizzata corrisponde alla memoria assegnata alla VM più un certo carico di memoria richiesto dall’host 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.

 

RAM overcommitment e gestione delle contese di memoria

Si ha una situazione di RAM overcommitment (sfruttamento della RAM) quando la memoria RAM totale presente nell’host ESXi è inferiore a quella complessivamente allocata per tutte le macchine virtuali.

Una situazione di RAM overcommitment si verifica sia quando le risorse totali non sono sufficienti, sia quando una macchina virtuale richiede ulteriore RAM rispetto a quella già allocata. Sia chiaro però che per una VM non viene mai allocata più memoria di quella specificata per essa, ovvero se ad una VM abbiamo assegnato 1Gb di memoria RAM, questo sarà il limite massimo di memoria allocabile. Il VMkernel cerca di ottimizzare la distribuzione della memoria fisica, prendendo in prestito parte della RAM assegnata alle VM quando queste non sono sotto carico, e riassegnandola ad altre VM quando queste richiedono più risorse. Con questa tecnica è possibile, ad esempio, utilizzare un host con 2Gb di memoria fisica ed eseguire su di esso quattro VM con 1Gb di RAM ognuna.

Quando la memoria fisica è “overcommited”, per ogni macchina virtuale viene allocato un quantitativo di memoria fisica compreso tra il valore di Reservation e il valore di Limit. La RAM allocata oltre il valore di Reservation è determinata dall’host ESXi in base alla priorità di Shares e in base ad una stima del recente carico di lavoro per quella VM.

Per consentire i meccanismi di RAM overcommitment, il VMkernel utilizza un file di swap (.vswp), creato per ogni VM alla sua accensione ed eliminato allo spegnimento. Il file .vswp ha una dimensione pari alla quantità di memoria assegnata alla VM meno la memoria riservata. Per impostazione predefinita, quando si crea una macchina virtuale, la sua memoria riservata è impostata a zero, ossia il 100% di RAM della VM può essere sfruttata dal VMkernel per ridistribuire le risorse. Secondo queste specifiche, una VM configurata con 2Gb di RAM, in maniera predefinita avrà un file di swap di 2Gb. Se però si imposta per essa 1Gb di memoria riservata, allora il file di swap sarà di 1Gb. Se la memoria riservata fosse di 2Gb, il file di swap sarebbe pari a zero. Quando per una VM si specifica una certa quantità di memoria riservata, tale quantità sarà disponibile esclusivamente per quella VM e non per le altre. Una VM non userà il file di swap finché ci sarà RAM fisica a sua disposizione. Nel momento in cui tutta la RAM fisica dell’host ESXi è utilizzata, ha inizio il meccanismo di RAM overcommitment e le macchine virtuali inizieranno a utilizzare il file di swap. Poiché il file di swap si trova sullo storage, le operazioni su di esso saranno più lente rispetto alle operazioni effettuate in RAM. Se per una VM si specifica un certo valore di memoria riservata, ma l’host ESXi non ha abbastanza memoria fisica a disposizione, la VM non potrà essere accesa.

 

Ottimizzazione della memoria

Può essere implementata con diverse tecniche, descritte di seguito.

      Transparent Page Sharing (TTS) – consente di evitare la replica di pagine di memoria identiche, allocandole una sola volta. Alle macchine virtuali che richiedono uno stesso contenuto informativo viene fornita la stessa ed unica pagina di memoria, con il risultato che più VM consumano meno memoria di quella che occorrerebbe nelle installazioni fisiche.

      Memory ballon driver – è un driver che consente il trasferimento di memoria dalle VM poco impegnate ad altre VM. È installato insieme ai VMware Tools ed è tecnicamente chiamato detto vmmemctl.

      Memory compression – tecnica impiegata nei periodi di contesa di memoria. Prevede la compressione delle pagine di memoria meno utilizzate, quelle che un sistema operativo guest posiziona nel file di swap, con scrittura su disco. Quelle pagine di memoria saranno compresse in RAM, pertanto la loro compressione e decompressione sarà più veloce rispetto alla lettura/scrittura su disco. La tecnica è trasparente ai sistemi operativi ospitati nelle macchine virtuali. Il risultato è un’occupazione di RAM fisica inferiore rispetto a quella necessaria in condizioni standard. ESXi tenta sempre di comprimere quelle pagine di memoria che possono essere ridotte a una dimensione di 2Kb. Di default, la cache di compressione ha una dimensione pari al 10% della memoria allocata alle VM, ma questi valori possono essere modificati tramite le impostazioni avanzate di ESXi. I parametri modificabili (nei menu Configuration > Advanced Settings su vSphere Client, Manage > Settings > Advanced System Settings su vSphere Web Client) sono i seguenti:

o    Mem.MemZipEnable = “1” abilita la memory compression; “0” disabilita la memory compression;

o    Mem.MemZipMaxPct = dimensione della cache di compressione, valore impostabile tra 5 e 100.

compressione-memoria-virtuale

(0 Votes)