Gestione delle risorse dinamiche di nuova generazione


Le VM N4, basate su processori Intel Xeon di 5a generazione e Titanium, utilizzano la gestione dinamica delle risorse di nuova generazione per aumentare l'efficienza dei costi sfruttando meglio le risorse fisiche disponibili sulle macchine host e utilizzano anche uno scheduler CPU personalizzato e migrazione live in base alle prestazioni per bilanciare le esigenze di prestazioni del carico di lavoro con le risorse disponibili. Si tratta delle stesse tecnologie utilizzate dai servizi Google Search, Google Ads, Google Maps e YouTube per eseguire in modo efficiente i loro carichi di lavoro sensibili alla latenza.

La gestione delle risorse dinamiche di nuova generazione offre anche una migliore affinità NUMA, una previsione più accurata dei requisiti delle risorse e un riequilibrio più rapido mediante migrazione live in base alle prestazioni.

Come funziona la gestione dinamica delle risorse

Le CPU virtuali (vCPU) sono implementate come thread pianificati per essere eseguiti on demand come qualsiasi altro thread su un host. Quando la vCPU ha del lavoro da svolgere, il lavoro viene assegnato a una CPU fisica disponibile su cui eseguirlo finché non si mette di nuovo in sospensione. Analogamente, la RAM virtuale viene mappata alle pagine fisiche dell'host utilizzando tabelle di pagine che vengono compilate al primo accesso a una pagina fisica guest. Questa mappatura rimane fissa finché la VM non indica che non è più necessaria una pagina fisica ospite.

La gestione dinamica delle risorse consente a Compute Engine di utilizzare meglio le CPU fisiche disponibili pianificando le VM sui server in base alla domanda di risorse e pianificando i thread vCPU sulle CPU fisiche in modo da ridurre al minimo i tempi di attesa. Nella maggior parte dei casi, possiamo farlo senza problemi, in modo che Google Cloud possa eseguire le VM in modo più efficiente su un numero inferiore di server.

Componenti della gestione delle risorse dinamiche

Compute Engine utilizza le seguenti tecnologie per la gestione dinamica delle risorse:

Server fisici più grandi ed efficienti

Il numero di core e la densità della RAM sono aumentati costantemente, pertanto ora i server host dispongono di molte più risorse di qualsiasi singola VM. Google esegue continuamente benchmark su nuovo hardware e cerca piattaforme convenienti e con un buon rendimento per la più ampia varietà di servizi e carichi di lavoro cloud, in modo da consentirti di sfruttare le tecnologie più recenti quando sono disponibili.

Posizionamento intelligente delle VM

Il sistema di gestione dei cluster di Google osserva la CPU, la RAM, la larghezza di banda della memoria e altre richieste di risorse delle VM in esecuzione su un server fisico. Utilizza queste informazioni per prevedere il rendimento di una VM appena aggiunta su quel server. Quindi, analizza migliaia di server per trovare la posizione migliore per aggiungere una VM. Queste osservazioni assicurano che, quando viene posizionata una nuova VM, sia compatibile con le VM vicine e che sia improbabile che si verifichino interferenze da parte di queste istanze.

Migrazione live in base alle prestazioni

Dopo aver posizionato le VM su un host, Compute Engine monitora continuamente le prestazioni e i tempi di attesa delle VM. Se le richieste di risorse delle VM aumentano, Compute Engine può utilizzare la migrazione live per spostare in modo trasparente i carichi di lavoro su altri host nel data center. Il criterio di migrazione live è basato su un approccio predittivo che dà a Compute Engine il tempo di spostare il carico, spesso prima che le VM debbano attendere.

Pianificatore della CPU dell'hypervisor

Lo scheduler della CPU dell'hypervisor mappa dinamicamente la CPU e la memoria virtuali alla CPU e alla memoria fisiche del server host su richiesta. Questa gestione dinamica consente di ottimizzare i costi nelle VM sfruttando meglio le risorse fisiche. L'utilizzo efficiente delle risorse significa che Compute Engine può eseguire VM in modo più efficiente su un numero inferiore di server, consentendo a Google Cloud di trasferire gli utili agli utenti.

Gestione delle risorse dinamiche di prima generazione

E2 è stata la prima serie di VM a offrire la gestione dinamica delle risorse utilizzando un dispositivo virtio balloon memory.

Dispositivo Virtio balloon memory con VM E2

L'aumento della memoria è un meccanismo di interfaccia tra host e guest per regolare dinamicamente le dimensioni della memoria riservata per il guest. E2 utilizza un dispositivo di ballooning della memoria virtio per implementare il ballooning della memoria. Tramite il dispositivo virtio memory balloon, un host può chiedere esplicitamente a un guest di cedere una certa quantità di pagine di memoria libera (chiamata anche inflazione del balloon di memoria) e recuperare la memoria in modo che l'host possa utilizzarla per altre VM. Analogamente, il dispositivo virtio memory balloon può restituire le pagine di memoria all'ospite sgonfiando il balloon della memoria. Le VM E2 sono l'unica famiglia di macchine che utilizza il dispositivo di gestione della memoria.

Le istanze VM E2 di Compute Engine basate su un'immagine pubblica dispongono di un dispositivo balloon della memoria virtio che monitora l'utilizzo della memoria del sistema operativo guest. Il sistema operativo guest comunica la memoria disponibile al sistema host. L'host rialloca la memoria inutilizzata ad altri processi su richiesta, utilizzando così la memoria in modo più efficace. Compute Engine raccoglie e utilizza questi dati per fornire consigli di dimensionamento adeguato più accurati.

Verifica dell'installazione del driver

Per verificare se nell'immagine è installato e caricato il driver del dispositivo virtio memory balloon, esegui il seguente comando.

Linux

La maggior parte delle distribuzioni Linux include il driver del dispositivo virtio memory balloon. Per verificare che il driver sia installato e caricato nell'immagine, esegui:

sudo modinfo virtio_balloon > /dev/null && echo Balloon driver is \
installed || echo Balloon driver is not installed; sudo lsmod | grep \
virtio_balloon > /dev/null && echo Balloon driver is loaded || echo \
Balloon driver is not loaded

Nei kernel Linux precedenti alla versione 5.2, a volte il sistema di memoria Linux impedisce erroneamente allocazioni di grandi dimensioni quando è presente il dispositivo balloon. In pratica, raramente si tratta di un problema, ma ti consigliamo di modificare l'impostazione della memoria virtuale overcommit_memory in 1 per evitare che si verifichi. Questa modifica è già apportata per impostazione predefinita a tutte le immagini fornite da Google pubblicate dal 9 febbraio 2021.

Per correggere l'impostazione, utilizza il seguente comando per modificare il valore da 0 a 1:

sudo /sbin/sysctl -w vm.overcommit_memory=1

Per mantenere questa modifica dopo i riavvii, aggiungi quanto segue al file/etc/sysctl.conf:

vm.overcommit_memory=1

Windows

Le immagini Windows di Compute Engine includono il dispositivo virtio balloon. Le immagini di Windows personalizzate, invece, non lo fanno. Per verificare se il driver è installato nell'immagine di Windows, esegui:

googet verify google-compute-engine-driver-balloon

Disattivazione del dispositivo virtio balloon memory

L'utilizzo del dispositivo balloon della memoria virtio consente a Compute Engine di utilizzare le risorse di memoria in modo più efficace, in modo che Google Cloud possa offrire VM E2 a prezzi inferiori. Puoi disattivare il dispositivo virtio balloon memory disattivando il driver del dispositivo. Dopo aver disattivato il dispositivo balloon della memoria virtio, continuerai a ricevere suggerimenti per il dimensionamento ottimale, ma potrebbero non essere altrettanto precisi.

Linux

Per disattivare il dispositivo in Linux, esegui il seguente comando:

sudo rmmod virtio_balloon

Puoi aggiungere questo comando allo script di avvio della VM per disattivare automaticamente il dispositivo all'avvio della VM.

Windows

Per disattivare il dispositivo su Windows, esegui il seguente comando:

googet -noconfirm remove google-compute-engine-driver-balloon

Puoi inserire questo comando nello script di avvio della VM per disattivare automaticamente il dispositivo all'avvio della VM.

Passaggi successivi