Può capitare che un sistema virtualizzato non risca a raggiungere il 100% di carico processore, e analizzandone il comportamento si scopre che l’idle time del processore è elevato.
Ho visto spesso nelle aziende due modi di affrontare il problema:
– assegnare una sola cpu alla VM per evitare lo switching tra le vCPU
– impostare la cpu affinity per forzare l’uso di uno specifico core fisico
Queste soluzioni sono corrette? NO. La prima ovviamente limita la potenza che si può assegnare a una VM, e prima o poi capiterà di dover avere macchine smp. La seconda crea notevoli problemi sia alle altre VM ospitate in quell’host (potrebbero performare meglio o peggio a seconda che usino i core liberi o quelli con l’affinity) sia a sistemi come vmotion e drs.
La soluzione corretta è modificare il file vmx della VM (quindi dovremo prevedere un fermo macchina) e impostiamo questi due parametri:
monitor.idleLoopSpinBeforeHalt = true
monitor.idleLoopMinSpinUS = N
dove N sarà un valore inferiore a 2000 (ad esempio 100 o 250…). Non mettete parametri elevati, altrimenti la macchina genererà un idle time ancora maggiore!