17.4. Processo di overcommit con KVM
L'hypervisor KVM supporta l'overcommit delle CPU e della memoria. Il processo di overcommit è quel processo attraverso il quale si assegna un numero maggiore di CPU virtualizzate o memoria rispetto alle risorse fisiche presenti sul sistema. Con un overcommit dellle CPU i desktop o i server non utilizzati al meglio possono essere eseguiti su un numero minore di server risparmiando così soldi e alimentazione.
Supporto Xen
Il processo di overcommit delle CPU non è supportato con l'hypervisor Xen. Tale processo con l'hypervisor Xen potrebbe causare l'instabilità del sistema con conseguenti arresti inaspettati dell'host e dei guest virtualizzati.
Numerosi sistemi operativi e applicazioni non sempre utilizzano al 100% la RAM disponibile. Questo comportamento può essere corretto con KVM in modo da utilizzare più memoria per i guest virtualizzati rispetto a quella fisicamente disponibile.
Con KVM le macchine virtuali sono processi Linux. Ai guest presenti sull'hypervisor KVM non vengono assegnati blocchi di RAM fisica, al contrario essi funzionano come processi. Ad ogni processo viene assegnata memoria quando lo stesso la richiede. KVM utilizza ciò per assegnare memoria per i guest quando il sistema operativo guest richiede una quantità maggiore o minore di memoria. Il guest utilizza solo una quantità leggermente superiore di memoria fisica rispetto a quella usata dal sistema operativo virtualizzato.
Quando la memoria fisica è quasi del tutto utilizzata, o un processo risulta essere inattivo per un periodo di tempo, Linux sposta la memoria del processo su swap. Swap è generalmente una partizione su di una unità del disco fisso o su un disco allo stato solido usata da Linux per estendere la memoria virtuale. Swap è molto più lento della RAM.
Poichè le macchine virtuali sono processi Linux la memoria usata dai guest virtualizzati può essere posizionata nello swap se il guest è in uno stato di idle o se non pesantemente utilizzato. È possibile eseguire il commit della memoria usando la dimensione totale dello swap e della RAM fisica. Tale operazione potrebbe causare alcuni problemi se i guest virtualizzati utilizzano la loro RAM totale. Senza uno spazio di swap sufficiente per i processi della macchina virtuale per uno swap con il processo pdflush
, verrà avviato il processo di eliminazione. pdflush
eliminerà i processi per liberare la memoria necessaria in modo da evitare un arresto inaspettato del sistema. pdflush
in questo caso potrebbe eliminare i guest virtualizzati o altri processi del sistema, causando la generazione di errori del file system e lasciando i guest virtualizzati non avviabili.
Warning
Se non è disponibile uno spazio di swap sufficiente i sistemi operativi guest verranno arrestati. Tale operazione potrebbe causare l'inoperatività dei guest. Per evitare tale situazione non eseguire il commit di una quantità di memoria maggiore rispetto allo spazio di swap disponibile.
La partizione di swap viene usata per scambiare la memoria non completamente utilizzata per l'hard drive ed aumentare le prestazioni della memoria. La dimensione predefinita della partizione di swap viene calcolata considerando la quantità di RAM ed il rapporto del processo di overcommit. È consigliato creare una partizione di swap più grande se si desidera eseguire l'overcommit della memoria con KVM. Un rapporto consigliato è 50% (0.5). La formula usata è la seguente:
(0.5 * RAM) + (overcommit ratio * RAM) = Dimensione partizione swap consigliata
Il Red Hat Knowledgebase presenta un paragrafo su come determinare con efficienza e sicurezza la misura della partizione di swap — a tal proposito consultare il
Knowledgebase.
È possibile l'esecuzione con un rapporto di overcommit pari a dieci volte il numero di guest virtualizzati attraverso la RAM fisica. Questo funzionerà solo con determinati carichi di lavoro (per esempio una virtualizzazione desktop con un utilizzo inferiore al 100%). L'impostazione di un rapporto per l'overcommit non è difficile, è necessario provare e personalizzare il repporto più adatto per l'ambiente in uso.
L'hypervisor KVM supporta l'overcommit delle CPU virtualizzate. È possibile eseguire l'overcommit delle suddette CPU fino a quando consentito dai limiti di carico dei guest virtualizzati. Fate attenzione durante l'overcommit delle VCPU poichè i carichi prossimi al 100% potrebbero causare una interruzione delle richieste o tempi di risposta non utilizzabili.
Il momento più opportuno per l'esecuzione di un overcommit delle CPU virtualizzate è quando ogni guest virtualizzato ha una singola VCPU. Il Linux scheduler è molto efficiente con questo tipo di carico. KVM dovrebbe supportare in modo sicuro i guest con carichi inferiori al 100% con un rapporto di 5 VCPU. L'overcommit di guest virtualizzati VCPU singoli non rappresenta alcun problema.
Non è possibile eseguire l'overcommit dei symmetric multiprocessing guest su di un numero maggiore di core processor rispetto al numero fisico effettivo. Per esempio, un guest con quattro VCPU non dovrebbe essere eseguito su di un host con un processore dual core. L'operazione di overcommit dei symmetric multiprocessing guest su di un numero superiore di core di processazione causerà un abbassamento delle prestazioni.
L'assegnazione delle VCPU dei guest pari al numero di core fisici è appropriato e funziona come previsto. Per esempio, l'esecuzione di guest virtualizzati con quattro VCPU su di un quad core host. Con questa impostazione i guest con carichi inferiori al 100% dovrebbero funzionare in modo corretto.
Eseguire sempre prima un test
Non eseguire l'overcommit della memoria o CPU in un ambiente di produzione senza aver eseguito test approfonditi. Le applicazioni che utilizzano il 100% di memoria o delle risorse di processazione, potrebbero non essere stabili in ambienti nei quali è stato eseguito un processo di overcommit. Eseguire sempre prima un test.