Blog
VM Guest lenta e com elevado percentual de CPU roubada (steal)
Acompanhando a performance de algumas máquinas virtualizadas em um ODA X7-2 HA foi observado durante o período alto percentual de CPU steal (%st) que mostra a porcentagem de tempo gasto (roubado) em esperas involuntárias da CPU enquanto o hypervisor está atendendo outro processador virtual.
[root@vm04 ~]# cat /proc/cpuinfo | egrep 'processor' | wc -l 8 [root@vm04 ~]# [root@vm04 ~]# yes > /dev/null & [1] 26080 [root@vm04 ~]# yes > /dev/null & [2] 26135 [root@vm04 ~]# yes > /dev/null & [3] 26137 [root@vm04 ~]# yes > /dev/null & [4] 26138 [root@vm04 ~]#
Tratando-se de um Oracle engineered systems, busquei como referência o MOS (My Oracle Support) onde encontrei a Doc ID 1928868.1 falando exatamente sobre este comportamento destacando em seu título "Guest VM Running Slow and is not Able to Use All the CPUs Assigned to it on ODA"
[root@vm04 ~]# pkill yes [1] Terminated yes > /dev/null [2]- Terminated yes > /dev/null [3]- Terminated yes > /dev/null [4]+ Terminated yes > /dev/null
No dom0 confirme o valor do CPU CAP e ajuste dinamicamente seu valor para 0.
[root@dom0 ~]# xm sched-credit Name ID Weight Cap Domain-0 0 65535 0 oakDom1 1 256 0 vm03 3 256 100 vm04 4 256 100 [root@dom0 ~]# xm sched-credit -d vm04 -c 0 [root@dom0 ~]# xm sched-credit Name ID Weight Cap Domain-0 0 65535 0 oakDom1 1 256 0 vm03 3 256 100 vm04 4 256 0 [root@dom0 ~]#
Ao ser criado uma VM, o valor padrão para o parâmetro é 100%. Esse valor é então convertido em um limite de utilização da CPU no arquivo vm.cfg para a máquina virtual.
O valor definido no arquivo vm.cfg limita a quantidade de CPU que um convidado (VM Guest) pode consumir. Se o Processor Cap for definido como 100% no Oracle VM, o valor definido em vm.cfg será 0, o que significa que não há limite para a utilização da CPU.
Retornando a VM vou proceder com um novo teste forçando a utilização das CPUs da mesma forma que a anterior
[root@vm04 ~]# yes > /dev/null & [1] 31926 [root@vm04 ~]# yes > /dev/null & [2] 31928 [root@vm04 ~]# yes > /dev/null & [3] 31929 [root@vm04 ~]# yes > /dev/null & [4] 31976
Com alguns segundos já foi perceptível que o percentual de CPU roubada não sofria oscilações, estava de forma constante em 0%
Comparando o antes e depois do ajuste