0

[TroubleShooting] Interpretando o CPU Steal Time

12 Flares 12 Flares ×

Recentemente queria entender melhor a métrica de cpu steal. Sabia que foi implantado por causa do crescente uso da virtualização. Eis minha dúvida. Qual a melhor métrica que poderia fornecer uma melhor visão da infraestrutura em cloud?

Este assunto é por si só extremamente complexo. Espero que alguém que saiba mais sobre ele venha aqui me corrigir. Será muito bem vindo.

Steal Time é a porcentagem de tempo que uma CPU Virtual espera (espera involuntária) por uma CPU Real, enquanto o hypervisor está atendendo outro processador virtual (como executar outra máquina virtual).

CPU Steal é relevante principalmente em ambientes virtualizados nos quais uma única máquina física executa várias máquinas virtuais. Cada máquina virtual recebe uma fração dos recursos físicos de CPU (e outros recursos físicos) ou seja, a CPU física é multiplexada entre as várias CPUs virtuais usadas pelas VMs. O kernel do sistema operacional detecta quando ele tem um job disponível, mas não tem acesso à CPU para executar esse job.

Sabe-se, por exemplo, que a AWS usa um hypervisor baseado em Xen. No entanto, não tem nada na comunidade referente a quais modificações e configurações foram feitas pela AWS. Além disso, o comportamento das VMs em cloud pública podem variar.

  • Como identificar CPU steal time?

Em todos os sabores Linux, temos ferramentas que podem nos auxiliar a identificar métricas de desempenho. O campo st está presente nos comandos iostat, vmstat, sar e top. O comando top, por exemplo, em uma das linhas está %Cpu(s). Três métricas que podem ser úteis é %id (idle, tempo de ociosidade do kernel), wa% (IOwait,  tempos de espera para a conclusão de IO) e %st é a última métrica de CPU exibida.

Para versões mais recentes do kernel são mostradas nessa sequência:

  1. us, user : time running un-niced user processes
  2. sy, system : time running kernel processes
  3. ni, nice : time running niced user processes
  4. id, idle : time spent in the kernel idle handler
  5. wa, IO-wait : time waiting for I/O completion
  6. hi : time spent servicing hardware interrupts
  7. si : time spent servicing software interrupts
  8. st : time stolen from this vm by the hypervisor
  • E se o steal time estiver bem acima de zero?

Existem duas causas possíveis:

  • Você precisará aumentar sua VM, dando para ela mais recursos de CPU.
  • Um Host subdimensionado e as máquinas virtuais competindo agressivamente por recurso físicos.

Uma regra geral

Se o steal time for superior a 10% durante 20 minutos, provavelmente a VM está em estado mais lento do que deveria. Grandes quantidades de steal time indicam contenção de CPU, o que pode reduzir o desempenho das VMs. Para aliviar a contenção de CPU, aumente a prioridade de CPU para o guest, aumente sua quota ou execute poucas máquinas virtual no host (possivelmente está com mais VMs em execução do que foi reservado de capacidade para o mesmo), identificar outra VM no mesmo hipervisor usando recursos demais.

Na maioria dos casos, desligar a instância e mover para outro hypervisor poderá resolver o seu problema.

Como​ conclusão, a melhor métrica de desempenho de uma máquina virtual que estamos procurando depende muitas vezes do hypervisor que esta sendo executado. Em um ambiente virtual onde ciclos de CPU são compartilhados entre VMs de um servidor físico se exibir um valor alto de %st, isso significa que os ciclos de CPU estão sendo retirados da VM par servir outros propósitos. Não podemos descartar também, que você pode estar utilizando mais recursos do que foi reservado ou o servidor físico pode esta subdimensionado.

Jonatas Lopes

Sempre aprendendo coisas novas e passando o conhecimento adiante !!!

Dúvidas? Deixe seu comentário ou entre em contato.