Utilizzando vSphere Client è possibile visualizzare informazioni sulle impostazioni di allocazione della memoria, nonché modificarle. Per amministrare le risorse di memoria in modo efficace, è inoltre necessario avere familiarità con il sovraccarico di memoria, la tassa sulla memoria inattiva e il modo in cui gli host ESXi recuperano memoria.

Quando si amministrano le risorse di memoria, è possibile specificare l'allocazione di memoria. Se non si personalizza l'allocazione della memoria, l'host ESXi utilizza valori predefiniti che funzionano correttamente nella maggior parte delle situazioni.

È possibile specificare l'allocazione della memoria in diversi modi.

  • Utilizzare gli attributi e le funzionalità speciali disponibili tramite vSphere Client. vSphere Client consente di connettersi all'host ESXi o al sistema vCenter Server.
  • Utilizzare le impostazioni avanzate.
  • Utilizzare vSphere SDK per l'allocazione della memoria con script.
Nota: In questo capitolo, "Memoria" può riferirsi alla RAM fisica o alla Memoria persistente.

Informazioni sull'overhead della memoria

La virtualizzazione delle risorse di memoria ha un overhead associato.

ESXi Le macchine virtuali possono causare due tipi di overhead della memoria.

  • Tempo aggiuntivo per l'accesso alla memoria all'interno di una macchina virtuale.
  • Lo spazio aggiuntivo necessario all'host ESXi per le proprie strutture di codice e dati, oltre alla memoria allocata a ciascuna macchina virtuale.

ESXi La virtualizzazione della memoria aumenta di poco l'overhead degli accessi alla memoria. Poiché l'hardware di paging del processore utilizza direttamente tabelle di pagine (tabelle di pagine shadow per l'approccio basato su software o due tabelle di pagine a livello per l'approccio assistito da hardware), la maggior parte degli accessi alla memoria nella macchina virtuale può essere eseguita senza l'overhead della conversione degli indirizzi.

L'overhead dello spazio della memoria ha due componenti.

  • Un overhead fisso a livello di sistema per il VMkernel.
  • Overhead aggiuntivo per ogni macchina virtuale.

La memoria dell'overhead include spazio prenotato per il buffer del frame della macchina virtuale e varie strutture di dati di virtualizzazione, come ad esempio tabelle di pagine shadow. La memoria dell'overhead dipende dal numero di CPU virtuali e dalla memoria configurata per il sistema operativo guest.

Memoria di overhead sulle macchine virtuali

Le macchine virtuali richiedono una determinata quantità di memoria di overhead disponibile per l'accensione. È opportuno conoscere la quantità di questo overhead.

La quantità di memoria di overhead necessaria per una macchina virtuale dipende da un numero elevato di fattori, tra cui il numero di vCPU e le dimensioni della memoria, il numero e i tipi di dispositivi, la modalità di esecuzione utilizzata dal monitor e la versione hardware della macchina virtuale. Anche la versione di vSphere in uso può influire sulla quantità di memoria necessaria. VMX calcola automaticamente la quantità di memoria di overhead necessaria per una macchina virtuale.

Per conoscere la quantità di memoria di overhead necessaria per la configurazione specifica, accendere innanzitutto la macchina virtuale in questione. Cercare nel file vmware.log. All'accensione della macchina virtuale, la quantità di memoria di overhead di cui ha bisogno viene stampata nel registro. Cercare VMMEM nel registro per visualizzare la quantità iniziale e precisa di memoria di overhead riservata per la macchina virtuale.

Metodo di allocazione della memoria degli host ESXi

Un host alloca la memoria specificata dal parametro di Limit a ogni macchina virtuale, a meno che la memoria non sia soggetta a overcommit. ESXi non alloca mai più memoria a una macchina virtuale rispetto alle dimensioni specificate della memoria fisica.

Ad esempio, una macchina virtuale da 1 GB potrebbe avere il limite predefinito (illimitato) o un limite specificato dall'utente (ad esempio 2 GB). In entrambi i casi, l'host ESXi non alloca mai più di 1 GB, le dimensioni della memoria fisica specificate per esso.

Quando la memoria è overcommited, a ogni macchina virtuale viene allocata una quantità di memoria compresa tra ciò che viene specificato da Prenotazione e da Limite. La quantità di memoria concessa a una macchina virtuale oltre la sua prenotazione varia in genere in base al carico di memoria corrente.

Un host determina le allocazioni per ogni macchina virtuale in base al numero di quote a essa allocate e a una stima della dimensione del suo set di lavoro recente.

  • Quote: gli host ESXi utilizzano un criterio di allocazione della memoria proporzionale alle quote modificato. Le quote di memoria autorizzano una macchina virtuale a una parte di memoria fisica disponibile.
  • Dimensione del set di lavoro: gli host ESXi effettuano una stima del set di lavoro per una macchina virtuale monitorando l'attività di memoria in periodi successivi al tempo di esecuzione della macchina virtuale. Le stime vengono uniformate in diversi periodi di tempo utilizzando tecniche che rispondono rapidamente a un aumento delle dimensioni del set di lavoro e più lentamente per diminuire le dimensioni del set di lavoro.

    Questo approccio garantisce che una macchina virtuale da cui viene recuperata memoria inattiva possa aumentare rapidamente fino all'allocazione completa basata sulle quote quando inizia a utilizzare la memoria in maniera più attiva.

    L'attività della memoria viene monitorata per stimare le dimensioni del set di lavoro per un periodo predefinito di 60 secondi. Per modificare questa impostazione predefinita, regolare l'impostazione avanzata Mem.SamplePeriod. Vedere Impostare attributi host avanzati.

Tassa sulla memoria per le macchine virtuali inattive

Se una macchina virtuale non utilizza attivamente tutta la memoria attualmente allocata, ESXi tassa maggiormente la memoria inattiva anziché quella in uso. Questa operazione consente di impedire che le macchine virtuali si accaparrino la memoria inattiva.

La tassa sulla memoria inattiva viene applicata gradualmente. Il livello effettivo della tassa aumenta con l'incremento del rapporto tra memoria inattiva e memoria attiva per la macchina virtuale; nelle versioni precedenti di ESXi che non supportavano pool di risorse gerarchici, tutta la memoria inattiva per una macchina virtuale veniva tassata nello stesso modo.

È possibile modificare il livello della tassa sulla memoria inattiva con l'opzione Mem.IdleTax. L'utilizzo di questa opzione insieme all'attributo avanzato Mem.SamplePeriod consente di controllare il modo in cui il sistema determina le allocazioni della memoria di destinazione per le macchine virtuali. Vedere Impostare attributi host avanzati.

Nota: Nella maggior parte dei casi le modifiche apportate a Mem.IdleTax non sono necessarie, né appropriate.

File di swap VMX

I file di swap degli eseguibili della macchina virtuale (VMX) consentono all'host di ridurre notevolmente la quantità di memoria dell'overhead riservata al processo VMX.

Nota: I file di swap VMX non sono correlati alla funzione di scambio con la cache di scambio dell'host o ai normali file di swap a livello di host.

ESXi prenota memoria per macchina virtuale per diversi scopi. Quando si attiva una macchina virtuale, la memoria per le esigenze di determinati componenti, come il monitor della macchina virtuale (VMM) e i dispositivi virtuali, è completamente prenotata. Tuttavia, parte della memoria dell'overhead riservata al processo VMX può essere scambiata. La funzione di scambio VMX riduce significativamente la prenotazione di memoria VMX (ad esempio, da circa 50 MB o più per macchina virtuale a circa 10 MB per macchina virtuale). Ciò consente di effettuare lo scambio della memoria rimanente quando la memoria dell'host viene sovraccaricata, riducendo la prenotazione di memoria dell'overhead per ogni macchina virtuale.

L'host crea automaticamente file di swap VMX, a condizione che vi sia spazio libero su disco sufficiente nel momento in cui viene attivata una macchina virtuale.

Recupero memoria

Gli host ESXi possono recuperare memoria dalle macchine virtuali.

Un host alloca la quantità di memoria specificata da una prenotazione direttamente a una macchina virtuale. Qualsiasi elemento oltre la prenotazione viene allocato utilizzando le risorse fisiche dell'host o, quando queste non sono disponibili, le risorse gestite utilizzando tecniche speciali come il ballooning o lo scambio. Gli host possono utilizzare due tecniche per espandere o ridurre dinamicamente la quantità di memoria allocata alle macchine virtuali.

  • I sistemi ESXi utilizzano un balloon driver di memoria (vmmemctl), caricato nel sistema operativo guest in esecuzione in una macchina virtuale. Vedere Driver balloon della memoria.
  • Il sistema ESXi scambia una pagina da una macchina virtuale a un file di scambio server senza alcun coinvolgimento del sistema operativo guest. Ogni macchina virtuale ha il proprio file di scambio.

Driver balloon della memoria

Il driver balloon della memoria (vmmemctl) collabora con il server per recuperare le pagine considerate meno utili dal sistema operativo guest.

Il driver utilizza una tecnica di ballooning proprietaria che fornisce prestazioni prevedibili che corrispondono accuratamente al comportamento di un sistema nativo in vincoli di memoria simili. Questa tecnica aumenta o riduce la pressione della memoria sul sistema operativo guest, causando l'utilizzo di propri algoritmi nativi di gestione della memoria da parte del guest. Quando la memoria è insufficiente, il sistema operativo guest determina quali pagine recuperare e, se necessario, le scambia con il proprio disco virtuale.

Figura 1. Memory ballooning nel sistema operativo guest

Questa figura illustra il memory ballooning nel sistema operativo guest.
Nota: È necessario configurare il sistema operativo guest con spazio di swap sufficiente. Alcuni sistemi operativi guest presentano limitazioni aggiuntive.

Se necessario, è possibile limitare la quantità di recuperi di memoria richiesta da vmmemctl impostando il parametro sched.mem.maxmemctl per una macchina virtuale specifica. Questa opzione specifica la quantità massima di memoria che è possibile richiedere a una macchina virtuale in megabyte (MB). Vedere Impostazione degli attributi avanzati della macchina virtuale.

Condivisione della memoria tra macchine virtuali

Molti ESXi carichi di lavoro presentano opportunità di condivisione della memoria tra macchine virtuali (nonché all'interno di una singola macchina virtuale).

ESXi La condivisione della memoria viene eseguita come attività in background che analizza le opportunità di condivisione nel tempo. La quantità di memoria salvata varia nel tempo. Per un carico di lavoro abbastanza costante, la quantità in genere aumenta lentamente finché tutte le opportunità di condivisione non vengono sfruttate.

Per determinare l'efficacia della condivisione della memoria per un determinato carico di lavoro, provare a eseguire il carico di lavoro e utilizzare resxtop o esxtop per valutare i risparmi effettivi. Le informazioni sono disponibili nel campo PSHARE della modalità interattiva nella pagina Memoria.

Utilizzare i Mem.ShareScanTime e Mem.ShareScanGHz impostazioni avanzate per controllare la velocità con cui il sistema analizza la memoria per identificare le opportunità di condivisione della memoria.

È inoltre possibile configurare la condivisione per le singole macchine virtuali impostando l'opzione sched.mem.pshare.enable .

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. Questo significa che la condivisione delle pagine non avviene attraverso le macchine virtuali e si verifica solo all'interno di una macchina virtuale. Il concetto di salting è stato introdotto per contribuire a risolvere i problemi che gli amministratori di sistema possono avere sulle implicazioni di sicurezza della condivisione trasparente delle pagine. È possibile utilizzare il salting per consentire una gestione più granulare delle macchine virtuali che partecipano alla condivisione delle pagine trasparente rispetto a quanto fosse possibile in precedenza. Con le nuove impostazioni di salting, le macchine virtuali possono condividere le pagine solo se il valore salt e il contenuto delle pagine sono identici. È possibile configurare una nuova opzione di configurazione dell'host, Mem.ShareForceSalting, per attivare o disattivare il salting.

Vedere Attributi avanzati in vSphere per informazioni su come configurare le opzioni avanzate.

Compressione della memoria

ESXi fornisce una cache di compressione della memoria per migliorare le prestazioni della macchina virtuale quando si utilizza l'overcommit della memoria. La compressione della memoria è attivata per impostazione predefinita. Quando la memoria di un host è soggetta all'overcommit, ESXi comprime le pagine virtuali e le archivia in memoria.

Poiché si accede più rapidamente alla memoria compressa rispetto a quella scambiata sul disco, la compressione della memoria in ESXi consente di eseguire l'overcommit della memoria senza ostacolare le prestazioni in modo significativo. Quando è necessario eseguire lo scambio di una pagina virtuale, ESXi tenta prima di comprimere la pagina. Le pagine che possono essere compresse a dimensioni pari o inferiori a 2 KB vengono archiviate nella cache di compressione della macchina virtuale, aumentando la capacità dell'host.

È possibile impostare le dimensioni massime per la cache di compressione e disattivare la compressione della memoria utilizzando la finestra di dialogo Impostazioni avanzate in vSphere Client.

Attivazione o disattivazione della cache di compressione della memoria

La compressione della memoria è attivata per impostazione predefinita. È possibile utilizzare le impostazioni di sistema avanzate in vSphere Client per attivare o disattivare la compressione della memoria per un host.

Procedura

  1. Selezionare l'host su vSphere Client.
  2. Fare clic su Configura.
  3. In Sistema, selezionare Impostazioni di sistema avanzate.
  4. Individuare Mem.MemZipEnable e fare clic sul pulsante Modifica.
  5. Immettere 1 per attivare o 0 per disattivare la cache di compressione della memoria.
  6. Fare clic su OK.

Configurazione delle dimensioni massime della cache di compressione della memoria

È possibile impostare le dimensioni massime della cache di compressione della memoria per le macchine virtuali dell'host.

È possibile impostare le dimensioni della cache di compressione come percentuale delle dimensioni di memoria della macchina virtuale. Ad esempio, se si immette 20 e la dimensione della memoria di una macchina virtuale è 1000 MB, ESXi può utilizzare fino a 200 MB di memoria host per archiviare le pagine compresse della macchina virtuale.

Se non si impostano le dimensioni della cache di compressione, ESXi utilizza il valore predefinito del 10%.

Procedura

  1. Selezionare l'host su vSphere Client.
  2. Fare clic su Configura.
  3. In Sistema, selezionare Impostazioni di sistema avanzate.
  4. Individuare Mem.MemZipMaxPct e fare clic sul pulsante Modifica .
    Il valore di questo attributo determina la dimensione massima della cache di compressione per la macchina virtuale.
  5. Immettere le dimensioni massime per la cache di compressione.
    Il valore è una percentuale della dimensione della macchina virtuale e deve essere compresa tra 5 e 100%.
  6. Fare clic su OK.

Misurazione e differenziazione dei tipi di utilizzo della memoria

Nella scheda Prestazioni di vSphere Client sono visualizzate diverse metriche che possono essere utilizzate per analizzare l'utilizzo della memoria.

Alcune di queste metriche della memoria misurano la memoria fisica del guest, mentre altre misurano la memoria della macchina. Ad esempio, due tipi di utilizzo della memoria che è possibile esaminare utilizzando le metriche delle prestazioni sono la memoria fisica del guest e la memoria della macchina. È possibile misurare la memoria fisica del guest utilizzando la metrica Memoria concessa (per una macchina virtuale) o Memoria condivisa (per un host). Per misurare la memoria della macchina, utilizzare invece Memoria consumata (per una macchina virtuale) o Memoria comune condivisa (per un host). Comprendere la differenza concettuale tra questi tipi di utilizzo della memoria è importante per sapere che cosa misurano queste metriche e come interpretarle.

Il VMkernel mappa la memoria fisica del guest alla memoria della macchina, ma non sempre la mappatura viene eseguita uno a uno. Più regioni di memoria fisica guest potrebbero essere mappate alla stessa regione della memoria della macchina (durante la condivisione della memoria) o determinate regioni della memoria fisica del guest potrebbero non essere mappate alla memoria della macchina (quando il VMkernel effettua lo scambio o il ballooning delle memoria fisica del guest). In queste situazioni, i calcoli dell'utilizzo della memoria fisica del guest e dell'utilizzo della memoria della macchina per una singola macchina virtuale o un host sono diversi.

Si consideri l'esempio nella figura seguente, che mostra due macchine virtuali in esecuzione in un host. Ogni blocco rappresenta 4 KB di memoria e ogni colore/lettera rappresenta un set di dati diverso in un blocco.

Figura 2. Esempio di utilizzo della memoria

Questa figura illustra un esempio di utilizzo della memoria di due macchine virtuali.

Le metriche delle prestazioni per le macchine virtuali possono essere determinate come segue:

  • Per determinare la memoria concessa (ovvero la quantità di memoria fisica del guest mappata alla memoria della macchina) per la macchina virtuale 1, contare il numero di blocchi nella memoria fisica del guest della macchina virtuale 1 con le frecce verso la memoria della macchina e moltiplicare per 4 KB. Poiché sono presenti cinque blocchi con frecce, la memoria concessa è di 20 KB.
  • La memoria consumata è la quantità di memoria della macchina allocata alla macchina virtuale, che consente di risparmiare sulla memoria condivisa. Contare innanzitutto il numero di blocchi nella memoria della macchina con frecce dalla memoria fisica del guest della macchina virtuale 1. Sono presenti tre blocchi di questo tipo, ma uno è condiviso con la macchina virtuale 2. Contare quindi due blocchi completi più la metà del terzo e moltiplicare per 4 KB per un totale di 10 KB di memoria consumata.
La differenza importante tra queste due metriche è che la memoria concessa conta il numero di blocchi con frecce a livello della memoria fisica del guest e la memoria consumata conta il numero di blocchi con frecce a livello della memoria della macchina. Il numero di blocchi è diverso tra i due livelli a causa della condivisione della memoria, pertanto la memoria concessa e la memoria consumata sono diverse. La memoria viene salvata tramite la condivisione o altre tecniche di recupero.
Un risultato simile si ottiene quando si determina la memoria condivisa e la memoria condivisa comune per l'host.
  • La memoria condivisa per l'host rappresenta la somma della memoria condivisa di ogni macchina virtuale. Calcolare la memoria condivisa esaminando la memoria fisica del guest di ciascuna macchina virtuale e contando il numero di blocchi con frecce verso i blocchi di memoria della macchina che a loro volta hanno più frecce che puntano verso di essi. Nell'esempio sono presenti sei blocchi di questo tipo, pertanto la memoria condivisa per l'host è di 24 KB.
  • La memoria condivisa comune è la quantità di memoria della macchina condivisa dalle macchine virtuali. Per determinare la memoria comune, esaminare la memoria della macchina e contare il numero di blocchi con più frecce che puntano verso di essi. Sono presenti tre blocchi di questo tipo, quindi la memoria condivisa comune è di 12 KB.
La memoria condivisa riguarda la memoria fisica del guest e controlla l'origine delle frecce. La memoria condivisa comune è invece relativa alla memoria della macchina ed esamina la destinazione delle frecce.

Le metriche della memoria che misurano la memoria fisica del guest e la memoria della macchina possono sembrare contraddittorie. In effetti, misurano diversi aspetti dell'utilizzo della memoria di una macchina virtuale. Comprendendo le differenze tra queste metriche è possibile utilizzarle meglio per diagnosticare i problemi relativi alle prestazioni.

Affidabilità della memoria

L'affidabilità della memoria, nota anche come isolamento degli errori, consente a ESXi di interrompere l'utilizzo delle parti di memoria quando determina che potrebbe verificarsi o si è verificato un errore.

Quando viene segnalato un numero sufficiente di errori corretti a un indirizzo specifico, ESXi smette di utilizzare questo indirizzo per evitare che l'errore corretto diventi non corretto.

L'affidabilità della memoria offre una migliore affidabilità VMkernel nonostante gli errori corretti e non corretti nella RAM; consente inoltre al sistema di evitare di utilizzare pagine di memoria che potrebbero contenere errori.

Correzione di una notifica dell'isolamento dell'errore

Con l'affidabilità della memoria, VMkernel smette di utilizzare pagine che ricevono una notifica di isolamento dell'errore.

L'utente riceve un evento nella vSphere Client quando VMkernel viene recuperato da un errore di memoria non correggibile, quando VMkernel ritira una percentuale significativa di memoria di sistema a causa di un gran numero di errori correggibili o, se sono presenti, un gran numero di pagine che non sono in grado di ritirare.

Procedura

  1. Svuotare l'host.
  2. Eseguire la migrazione delle macchine virtuali.
  3. Eseguire test hardware correlati alla memoria.

Scambio di sistema

Lo scambio di sistema è un processo di recupero della memoria che consente di sfruttare le risorse di memoria inutilizzate nell'intero sistema.

Lo scambio di sistema consente al sistema di recuperare memoria dai consumer di memoria che non sono macchine virtuali. Quando lo scambio di sistema è abilitato, si ha un compromesso tra l'impatto del recupero della memoria da un altro processo e la possibilità di assegnare la memoria a una macchina virtuale in grado di utilizzarla. La quantità di spazio necessaria per lo scambio di sistema è 1 GB.

La memoria viene recuperata eliminando dati e scrivendoli nello storage in background. L'accesso ai dati dallo storage in background è più lento rispetto all'accesso ai dati dalla memoria quindi è importante scegliere attentamente dove archiviare i dati scambiati.

ESXi determina automaticamente dove archiviare lo scambio di sistema, ovvero la Posizione file di scambio preferita. Questa decisione può essere facilitata selezionando un determinato set di opzioni. Il sistema seleziona la migliore opzione abilitata possibile. Se nessuna delle opzioni è applicabile, lo scambio di sistema non viene attivato.

Le opzioni disponibili sono:

  • Datastore: consente l'utilizzo del datastore specificato. Si tenga presente che non è possibile specificare un datastore vSAN o un datastore VMware vSphere® Virtual VolumesTM per i file di scambio di sistema.
  • Cache di scambio host: consente l'uso di una parte della cache di scambio dell'host.
  • Posizione file di scambio preferita: consente l'uso della posizione del file di scambio preferita configurata per l'host.

Configurare lo scambio di sistema

È possibile personalizzare le opzioni che determinano la posizione di scambio del sistema.

Prerequisiti

Selezionare la casella di controllo Abilitato nella finestra di dialogo Modifica impostazioni di scambio di sistema .

Procedura

  1. Selezionare l'host su vSphere Client.
  2. Fare clic su Configura.
  3. In Sistema, selezionare Scambio di sistema.
  4. Fare clic su Modifica.
  5. Selezionare le caselle di controllo per ogni opzione che si desidera abilitare.
  6. Se si seleziona l'opzione datastore , selezionare un datastore dal menu a discesa.
  7. Fare clic su OK.