CPU pronta: o assassino do hipervisor silencioso



Experimente Nosso Instrumento Para Eliminar Problemas

CPU Ready é algo com o qual você pode não estar familiarizado. À primeira vista, pode parecer uma coisa boa, mas infelizmente não é. CPU Ready tem atormentado ambientes virtuais por mais tempo do que sabíamos o que era. A VMware define isso como a “porcentagem de tempo que a máquina virtual ficou pronta, mas não pôde ser agendada para ser executada na CPU física. O tempo de CPU Ready depende do número de máquinas virtuais no host e de suas cargas de CPU. ” O Hyper-V só recentemente começou a fornecer este contador (Processador virtual do Hypervisor Hyper-V Tempo de espera da CPU por despacho) e outros hipervisores podem ainda não fornecer essa métrica.



Para entender o que é CPU Ready, precisamos entender como os hipervisores agendam CPUs virtuais (vCPU) para CPUs físicas (pCPU). Quando o tempo de vCPU é necessário em uma VM, suas vCPU (s) precisam ser agendadas em relação às pCPU (s) para que os comandos / processos / threads possam ser executados na pCPU. Em um mundo ideal, não há conflitos de recursos ou gargalos quando isso precisa acontecer. Quando uma única VM de vCPU precisa agendar tempo em relação a uma pCPU, um núcleo de pCPU está disponível e a CPU pronta é mínima neste mundo ideal. É importante notar que CPU Ready sempre existe, mas em um mundo ideal é mínimo e não é notado.



No mundo real, um dos benefícios da virtualização é que você pode apostar que muitas de suas VMs não irão aumentar todas as suas vCPUs ao mesmo tempo e, se forem VMs de muito baixo uso, você pode até fazer suposições sobre o quanto você pode carregue seu host físico com base no uso de CPU e de RAM. No passado, eram feitas recomendações para ter uma proporção de 4 vCPU para 1 pCPU ou até mesmo 10: 1 dependendo da carga de trabalho. Por exemplo, você pode ter um único processador quad core, mas ter 4 VMs com vCPUs cada para fornecer 16 vCPUs a 4 pCPUs ou 4: 1. O que os engenheiros estavam começando a ver é que os ambientes eram terrivelmente lentos e eles não conseguiam descobrir o porquê. O uso de RAM parecia bom, o uso de CPU nos hosts físicos pode até ser muito baixo, abaixo de 20%. A latência de armazenamento era extremamente baixa, mas as VMs eram extremamente lentas.



O que estava acontecendo neste cenário era CPU Ready. Houve um acúmulo de fila da vCPU pronta para ser agendada, mas nenhuma pCPU disponível para agendar. O hipervisor paralisa o agendamento e causa latência para a VM convidada. É um assassino silencioso que, até anos recentes, não havia muitas ferramentas para detectar. Em uma VM do Windows, demoraria uma eternidade para inicializar e, quando finalmente o fizesse, quando você clicar no menu Iniciar, demoraria uma eternidade para aparecer. Você pode até clicar nele novamente, pensando que ele não aceitou seu primeiro clique e, quando finalmente o alcançar, você receberá um clique duplo. No Linux, sua VM pode inicializar no modo somente leitura ou até mesmo alternar os sistemas de arquivos para o modo somente leitura em algum momento mais tarde.

Então, como podemos combater o CPU Ready? Existem algumas maneiras que podem ajudar. O primeiro é monitorar as métricas de CPU Ready. No VMware, não é recomendado ir acima de 10%, mas na experiência pessoal, os usuários começam a notar acima de 5 a 7%, dependendo do tipo de VM e do que está sendo executado.

Abaixo, usarei alguns exemplos do VMware ESXi 5.5 para mostrar a CPU pronta. Usando a linha de comando, execute “esxtop”. Pressione “c” para visualizar a CPU e você deverá ver uma coluna “ % RDY ”Para CPU Ready. Você pode pressionar maiúsculo “ V ”Para visualização apenas da VM.



cpu-ready-1

Aqui você pode ver que% RDY é um pouco alto para um ambiente razoavelmente não utilizado. Neste caso, meu ESXi 5.5 está executando uma VM de teste em cima do VMware Fusion (hipervisor Mac), portanto, espera-se que esteja um pouco no topo, já que estamos executando uma VM em um hipervisor em cima de outro hipervisor.

No cliente vSphere, você pode acessar a VM específica e clicar na guia Desempenho. A partir daí, clique em “Opções de gráfico”

cpu-ready-2

Em Opções de gráfico, selecione CPU, tempo real (se você tiver o vCenter, pode ter outras opções de tempo além do tempo real). A partir daí, nos contadores, selecione “Pronto”. Pode ser necessário desmarcar um contador diferente, pois a exibição permite apenas dois tipos de dados a qualquer momento.

cpu-ready-3

Você notará que este valor é um resumo de pronto versus uma porcentagem. Aqui está um link para um artigo VMware KB sobre como converter as métricas resumidas em uma porcentagem. - https://kb.vmware.com/kb/2002181

Ao comprar hardware, mais núcleos ajudam a diminuir o impacto de CPU Ready. Hyperthreading também ajuda. Embora o Hyperthreading não forneça um segundo núcleo completo para cada núcleo primário, geralmente é o suficiente para permitir o agendamento da vCPU para a pCPU e ajudar a mitigar o problema. Embora os hipervisores estejam começando a se afastar da recomendação de proporção de vCPU para pCPU, geralmente você pode se sair bem em um ambiente de uso moderado com 4: 1 e partir daí. Ao começar a carregar as VMs, observe a latência da CPU, CPU Ready e a sensação e desempenho gerais. Se você tiver algumas VMs de grande impacto, convém separá-las em outros clusters e usar uma proporção mais baixa e mantê-las leves. Por outro lado, para VMs em que o desempenho não é essencial e não há problema para que elas fiquem lentas, você pode fazer uma assinatura muito mais alta.

O dimensionamento adequado das VMs também é uma ferramenta enorme para combater o CPU Ready. Muitos fornecedores recomendam especificações bem acima do que a VM pode realmente precisar. Tradicionalmente, mais CPUs e mais núcleos = mais potência. O problema em um ambiente virtual é que o hipervisor precisa programar todas as vCPUs para pCPUs aproximadamente ao mesmo tempo e bloquear as pCPUs pode ser problemático. Se você tiver uma VM de 8 vCPUs, terá que bloquear 8 pCPUs para permitir que sejam agendadas ao mesmo tempo. Se sua VM de vCPU usa apenas 10% do total de vCPUs em um determinado momento, é melhor reduzir a contagem de vCPUs para 2 ou 4. É melhor executar uma VM com 50-80% da CPU com menos vCPUs do que 10% em mais vCPUs. Esse problema ocorre em parte porque o agendador de CPU do sistema operacional foi projetado para usar tantos núcleos quanto possível, ao passo que, se ele foi treinado para maximizar os núcleos antes de usar mais, pode ser menos problemático. Uma VM superdimensionada pode ter um bom desempenho, mas pode ser um “vizinho barulhento” para outras VMs, portanto, geralmente é um processo em que você precisa passar por todas as VMs no cluster até o “tamanho certo” delas a fim de ver alguns ganhos de desempenho.

Muitas vezes você encontra CPU Ready e é difícil começar a dimensionar corretamente VMs ou atualizar para processadores com mais núcleos. Se você estiver nessa situação, adicionar mais hosts ao cluster pode ajudar a distribuir a carga por mais hosts. Se você tiver hosts com mais núcleos / processadores do que outros, vincular VMs de alta vCPU a esses hosts de núcleo superior também pode ajudar. Você quer garantir que seu host físico tenha pelo menos o mesmo número de núcleos, senão mais do que a VM, caso contrário, será muito lento / difícil agendar o excesso de vCPU para pCPU, uma vez que eles precisam ser bloqueados aproximadamente ao mesmo tempo .

Finalmente, seu hipervisor pode oferecer suporte a reservas e limites na VM. Às vezes, essas teses são definidas acidentalmente. Configurações agressivas podem deixar a CPU pronta quando, na verdade, os recursos subjacentes estão disponíveis para ela. Normalmente, é melhor usar reservas e limites com moderação e apenas quando for absolutamente necessário. Para a maior parte, um cluster de tamanho adequado balanceará os recursos de maneira apropriada e eles normalmente não são necessários.

Em resumo, a melhor defesa contra CPU Ready é saber que ele existe e como verificá-lo. Você pode então determinar sistematicamente as melhores etapas de mitigação para o seu ambiente, conforme descrito acima. Na maior parte, as informações neste artigo se aplicam universalmente a qualquer hipervisor, embora as capturas de tela e os gráficos se apliquem especificamente ao VMware.

5 minutos lidos