Prima di gestire le risorse di memoria, è necessario comprendere in che modo vengono virtualizzate e utilizzate da ESXi.
VMkernel gestisce tutta la RAM fisica sull'host. VMkernel dedica parte di questa RAM fisica gestita per il proprio uso. Il resto è disponibile per l'uso da parte delle macchine virtuali.
Lo spazio della memoria virtuale e fisica è suddiviso in blocchi denominati pagine. Quando la memoria fisica è piena, i dati delle pagine virtuali che non sono presenti nella memoria fisica vengono archiviati sul disco. A seconda dell'architettura del processore, le pagine sono generalmente di 4 KB o 2 MB. Vedere Attributi di memoria avanzati.
Memoria macchina virtuale
Ogni macchina virtuale consuma memoria in base alle sue dimensioni configurate, oltre a una maggiore memoria dell'overhead per la virtualizzazione.
Le dimensioni configurate sono la quantità di memoria presentata al sistema operativo guest. Questo è diverso dalla quantità di RAM fisica allocata alla macchina virtuale. Quest'ultimo dipende dalle impostazioni delle risorse (condivisioni, prenotazione, limite) e dal livello di pressione della memoria sull'host.
Si consideri ad esempio una macchina virtuale con dimensioni configurate pari a 1 GB. Quando il sistema operativo guest si avvia, rileva che è in esecuzione su una macchina dedicata con 1 GB di memoria fisica. In alcuni casi, è possibile che alla macchina virtuale vengano allocati 1 GB completi. In altri casi, potrebbe ricevere un'allocazione di dimensioni inferiori. Indipendentemente dall'allocazione effettiva, il sistema operativo guest continua a comportarsi come se fosse in esecuzione su una macchina dedicata con 1 GB di memoria fisica.
- Condivisioni
- Specificare la priorità relativa di una macchina virtuale se è disponibile più di una prenotazione.
- Prenotazione
-
È un limite inferiore garantito per la quantità di RAM fisica che l'host prenota per la macchina virtuale, anche quando la memoria è overcommitted. Impostare la prenotazione a un livello che garantisca che la macchina virtuale disponga di memoria sufficiente per funzionare in modo efficiente, senza un numero eccessivo di paging.
Dopo che una macchina virtuale consuma tutta la memoria all'interno della sua prenotazione, è autorizzata a conservare tale quantità di memoria e questa memoria non viene recuperata, anche se la macchina virtuale diventa inattiva. Alcuni sistemi operativi guest (ad esempio, Linux) potrebbero non accedere a tutta la memoria configurata immediatamente dopo l'avvio. Finché le macchine virtuali non consumano tutta la memoria all'interno della sua prenotazione, VMkernel può allocare qualsiasi parte inutilizzata della sua prenotazione ad altre macchine virtuali. Tuttavia, dopo che il carico di lavoro del guest aumenta e la macchina virtuale consuma la sua prenotazione completa, è consentito conservare questa memoria.
Overcommit della memoria
Per ogni macchina virtuale in esecuzione, il sistema riserva la RAM fisica per la prenotazione della macchina virtuale (se esiste) e per la sua spesa generale di virtualizzazione.
Le dimensioni totali della memoria configurata di tutte le macchine virtuali potrebbero superare la quantità di memoria fisica disponibile nell'host. Tuttavia, ciò non significa necessariamente che la memoria sia in overcommit. Viene effettuato l'overcommit della memoria quando l'occupazione di memoria funzionante combinata di tutte le macchine virtuali supera quella delle dimensioni della memoria dell'host.
A causa delle tecniche di gestione della memoria utilizzate dall'host ESXi, le macchine virtuali possono utilizzare più RAM virtuale rispetto a quella fisica disponibile nell'host. Ad esempio, è possibile disporre di un host con 2 GB di memoria ed eseguire quattro macchine virtuali con 1 GB di memoria ciascuna. In questo caso, la memoria è in overcommit. Ad esempio, se tutte e quattro le macchine virtuali sono inattive, la memoria utilizzata combinata potrebbe essere ben al di sotto di 2 GB. Tuttavia, se tutte le macchine virtuali da 4 GB utilizzano attivamente la memoria, la relativa occupazione potrebbe superare 2 GB e l'host ESXi sarà in overcommit.
L'overcommit è utile perché, in genere, alcune macchine virtuali sono caricate leggermente mentre altre sono più sovraccaricate e i rispettivi livelli di attività variano nel tempo.
Per migliorare l'utilizzo della memoria, l'host ESXi trasferisce la memoria dalle macchine virtuali inattive a quelle che richiedono più memoria. Utilizzare il parametro Prenotazione o Quote per allocare in via preferenziale memoria a macchine virtuali importanti. Se non è in uso, questa memoria rimane disponibile per le altre macchine virtuali. ESXi implementa vari meccanismi come il balloning, la condivisione della memoria, la compressione della memoria e lo scambio per fornire prestazioni adeguate, anche se l'host non è sottoposto a un overcommit eccessivo da parte della memoria.
Inoltre, la compressione della memoria è abilitata per impostazione predefinita negli host ESXi per migliorare le prestazioni delle macchine virtuali quando la memoria è in overcommit come descritto in Compressione della memoria.
Condivisione memoria
La condivisione della memoria è una tecnica proprietaria di ESXi che può agevolare l'ottenimento di una maggiore densità di memoria in un host.
La condivisione della memoria si basa sull'osservazione che diverse macchine virtuali potrebbero eseguire istanze dello stesso sistema operativo guest. Queste macchine virtuali potrebbero avere le stesse applicazioni o componenti caricati o contenere dati comuni. In questi casi, un host utilizza una tecnica proprietaria di Transparent Page Sharing (TPS) per eliminare le copie ridondanti delle pagine di memoria. Con la condivisione della memoria, spesso il carico di lavoro in esecuzione su una macchina virtuale consuma meno memoria rispetto all'esecuzione su macchine fisiche. Di conseguenza, è possibile supportare in modo efficiente livelli di overcommit più elevati. La quantità di memoria salvata tramite la condivisione della memoria dipende dal fatto che il carico di lavoro sia composto da macchine quasi identiche, che potrebbero liberare più memoria. Un carico di lavoro più diversificato potrebbe comportare una percentuale più bassa di risparmio sulla memoria.
Per motivi di sicurezza, il Transparent Page Sharing tra macchine virtuali è disattivato per impostazione predefinita e la condivisione delle pagine è limitata alla condivisione della memoria all'interno della macchina virtuale. La condivisione delle pagine non avviene tra le macchine virtuali e si verifica solo all'interno di una macchina virtuale. Vedere Condivisione della memoria tra macchine virtuali per ulteriori informazioni.
Virtualizzazione della memoria
A causa dell'ulteriore livello di mappatura della memoria introdotto dalla virtualizzazione, ESXi è in grado di gestire in modo efficace la memoria su tutte le macchine virtuali.
Parte della memoria fisica di una macchina virtuale potrebbe essere mappata su pagine condivise su pagine non mappate o in swapping-out.
Un host esegue la gestione della memoria virtuale senza conoscere il sistema operativo guest e senza interferire con il sottosistema di gestione della memoria del sistema operativo guest.
La VMM per ogni macchina virtuale gestisce una mappatura dalle pagine della memoria fisica del sistema operativo guest alle pagine di memoria fisica sulla macchina sottostante; VMware fa riferimento alle pagine fisiche dell'host sottostante come pagine "della macchina" e alle pagine fisiche del sistema operativo guest come pagine "fisiche".
Ogni macchina virtuale vede uno spazio di memoria fisico contiguo, basato su zero e indirizzabile. La memoria della macchina sottostante sul server utilizzato da ciascuna macchina virtuale non è necessariamente contigua.
Gli indirizzi fisici da virtuali a guest vengono gestiti dal sistema operativo guest. L'hypervisor è responsabile solo della conversione degli indirizzi fisici guest in indirizzi delle macchine. La virtualizzazione della memoria assistita mediante hardware utilizza la funzionalità hardware per generare le mappature combinate con le tabelle della pagina guest e le tabelle delle pagine nidificate gestite dall'hypervisor.
Il diagramma illustra l'implementazione di ESXi della virtualizzazione della memoria.
- Le caselle rappresentano le pagine e le frecce mostrano le diverse mappature della memoria.
- Le frecce che partono dalla memoria virtuale guest e arrivano alla memoria fisica guest mostrano la mappatura gestita dalle tabelle delle pagine nel sistema operativo guest; la mappatura dalla memoria virtuale alla memoria lineare per i processori con architettura x86 non viene visualizzata.
- Le frecce che partono dalla memoria fisica guest e arrivano alla memoria della macchina mostrano la mappatura gestita dalla VMM.
- Le frecce tratteggiate mostrano la mappatura dalla memoria virtuale guest alla memoria della macchina nelle tabelle della pagina shadow gestite anche da dalla VMM. Il processore sottostante che esegue la macchina virtuale utilizza le mappature delle tabelle della pagina shadow.
Virtualizzazione della memoria assistita da hardware
Alcune CPU, come AMD SVM-V e la serie Intel Xeon 5500, forniscono supporto hardware per la virtualizzazione della memoria utilizzando due livelli di tabelle di pagina.
Il primo livello delle tabelle di pagina archivia le conversioni guest da virtuali a fisiche, mentre il secondo livello delle tabelle di pagina archivia la conversione guest da fisica a macchina. Il TLB (translation look-aside buffer) è una cache di conversioni gestita dall'hardware unità di gestione della memoria (MMU) del processore. Un TLB mancato è tale in questa cache e l'hardware deve passare alla memoria (probabilmente molte volte) per trovare la conversione richiesta. Per un TLB mancato in un determinato indirizzo virtuale guest, l'hardware esamina entrambe le tabelle di pagina per convertire l'indirizzo virtuale guest nell'indirizzo della macchina. Il primo livello delle tabelle di pagina viene gestito dal sistema operativo guest. La VMM gestisce solo il secondo livello delle tabelle di pagina.
Considerazioni relative alle prestazioni
Quando si utilizza l'assistenza hardware, si elimina la spesa generale per la virtualizzazione della memoria software. In particolare, l'assistenza hardware elimina la spesa generale richiesta per mantenere sincronizzate le tabelle delle pagine shadow con le tabelle delle pagine guest. Tuttavia, quando si utilizza l'assistenza hardware, la latenza di TLB mancante è significativamente più alta. Per impostazione predefinita, l'hypervisor utilizza pagine di grandi dimensioni in modalità assistite da hardware per ridurre il costo delle mancanze di TLB. Di conseguenza, i vantaggi per il carico di lavoro grazie all'utilizzo dell'assistenza hardware dipendono principalmente dalla spesa generale causata dalla virtualizzazione della memoria quando si utilizza la virtualizzazione della memoria software. Se un carico di lavoro implica una piccola quantità di attività di tabelle di pagine (ad esempio la creazione di processi, la mappatura della memoria o commutatori di contesto), la virtualizzazione del software non causa una spesa generale significativa. Al contrario, i carichi di lavoro con una grande quantità di attività di tabelle di pagine possono trarre vantaggio dall'assistenza hardware.
Per impostazione predefinita, l'hypervisor utilizza pagine di grandi dimensioni in modalità assistite da hardware per ridurre il costo delle mancanze di TLB. Le prestazioni migliori si ottiengono utilizzando pagine di grandi dimensioni sia in conversioni di indirizzi guest da virtuali a fisiche sia da fisiche a macchina.
L'opzione LPage.LPageAlwaysTryForNPT può modificare il criterio per l'utilizzo di pagine di grandi dimensioni in conversioni di indirizzi guest da fisiche a virtuali. Per ulteriori informazioni, vedere Attributi di memoria avanzati.
Supporto per pagine di grandi dimensioni
ESXi offre supporto limitato per pagine di grandi dimensioni.
L'architettura x86 consente al software di sistema di utilizzare pagine da 4 KB, 2 MB e 1 GB. Vengono indicate le pagine 4 KB come pagine di piccole dimensioni, mentre le pagine da 2 MB e 1 GB vengono definite pagine di grandi dimensioni. Le pagine di grandi dimensioni alleviano la pressione del buffer lookaside della traduzione (TLB) e riducono il costo delle configurazioni della tabella delle pagine, migliorando le prestazioni del carico di lavoro.
Negli ambienti virtualizzati, le pagine di grandi dimensioni possono essere utilizzate dall'hypervisor e dal sistema operativo guest in modo indipendente. Mentre si ottiene il maggiore impatto sulle prestazioni se il guest e l'hypervisor utilizzano pagine di grandi dimensioni, nella maggior parte dei casi è possibile riscontrare un impatto negativo sulle prestazioni anche se vengono utilizzate pagine di grandi dimensioni solo a livello di hypervisor.
Per impostazione predefinita, ESXi hypervisor utilizza pagine da 2 MB per il supporto della vRAM guest. vSphere ESXi fornisce un supporto limitato per il backup della vRAM guest con pagine da 1 GB. Per ulteriori informazioni, vedere Supporto della vRAM guest con pagine da 1 GB.