Uma VM pode funcionar melhor quando apenas dois núcleos em vez de quatro núcleos são apresentados a ela?

7

Tivemos uma VM VMWare funcionando com dois núcleos alocados para ela que executaram um processo bastante hediondo no IIS. Sob carga, o processo estava maximizando o uso da CPU em ambos os núcleos, então pedimos aos nossos engenheiros de sistema para apresentar os outros dois núcleos do processador físico para a VM. O engenheiro disse imediatamente que isso não melhoraria o desempenho, mas faria a VM piorar. Ele descartou o motivo de sua declaração ter algo a ver com a capacidade do servidor ESX ou a contenção de recursos.

Essa afirmação não fazia muito sentido para mim e estou imaginando como o que o engenheiro disse poderia ser verdade. Há casos em que quatro núcleos apresentados a uma VM causariam um desempenho pior do que dois núcleos no mesmo hardware físico? Vamos supor uma situação ideal em que há apenas uma VM no servidor host, portanto, nada está sendo compartilhado com outras instâncias do sistema operacional.

Eu acredito que o servidor físico tinha um único processador quad core e provavelmente hospedava várias VMs. Eu realmente não sei qual versão do ESX estava rodando no host, nem sei com certeza qual era a configuração do processador físico, mas de dentro da VM que eu tinha acesso, vi dois processadores AMD de 3,33 GHz.

No final, eu nunca pude testar a afirmação do engenheiro porque (enquanto estávamos tentando atualizar a VM) fomos capazes de otimizar o processo e reduzir o consumo de CPU, e 2) acabamos migrando para um VM diferente em outro servidor ESX que tinha quatro núcleos apresentados a ele.

    
por arcain 05.01.2011 / 06:04

4 respostas

9

Vou entrar aqui e dizer que o que seu engenheiro provavelmente está falando é o fato de que uma VM com várias vCPUs tem uma desvantagem distinta ao programar ciclos de CPU. Uma VM de 1 vCPU pode executar instruções assim que um único núcleo estiver disponível. Se uma VM tiver 4 vCPUs, ela não poderá executar instruções até que os 4 núcleos estejam disponíveis.

Se a sua caixa tiver um número decente de VMs, isso definitivamente pode atrasá-lo, pois sua máquina virtual terá que esperar na fila para liberar 4 núcleos. Isso também poderia atrasar as outras VMs porque ela teria todos os 4 núcleos ligados de uma só vez.

Eu não quero entrar no Hyper-Threading e tudo mais, mas acima está uma explicação simples do que eu acho que o seu cara poderia estar se referindo. Embora ele possa não ter feito o melhor trabalho explicando isso.

    
por 05.01.2011 / 23:05
6

A prática recomendada para o vSphere por VMWare é usar o menor número possível de CPUs virtuais. Se os aplicativos não forem criados para aplicativos SMP, isso poderá ter um impacto negativo se você atribuir várias vCPUs ao convidado.

Even if some vCPUs are not used, configuring virtual machines with them still imposes some small resource requirements on ESX: * Unused vCPUs still consume timer interrupts. * Maintaining a consistent memory view among multiple vCPUs consumes resources. * Some older guest operating systems execute idle loops on unused vCPUs, thereby consuming resources that might otherwise be available for other uses (other virtual machines, the VMkernel, the console, etc.). * The guest scheduler might migrate a single-threaded workload amongst multiple vCPUs, thereby losing cache locality.

É possível que, se o host estivesse maximizando todos os ciclos físicos da CPU, poderia causar outros problemas de desempenho, já que o host começa a ficar inutilizado, o que, por sua vez, faz com que todos os convidados fiquem atolados.

edit: seu engenheiro deveria ter pelo menos se disposto a testar.

Ao ler seu post novamente, você disse que ele só tinha 1 CPU quad core. Se esse é o caso, eu provavelmente iria com seu engenheiro e diria que atribuir todos os 4 processadores físicos a um convidado é um mau ideia. A sobrecarga no host para gerenciar todas as 4 vCPUs quando há apenas 4 núcleos físicos reduziria o desempenho geral.

O problema é que adicionar 4 vCPUs na rajada quando o host tem apenas 4 núcleos no total é que você está atribuindo todos os recursos da CPU física a uma máquina. A sobrecarga em ter o hipervisor gerenciando todas as 4 vCPUs acabará retirando recursos e seus ganhos realizados provavelmente seriam mínimos

    
por 05.01.2011 / 07:23
3

Uma regra que eu peguei até agora, é ter sempre menos cpu virtual atribuída a uma única vm do que a fisicamente presente no host.

Uma referência para este beeing (antes do esxi) que o console vm estava sempre rodando. para programar as propriedades, você só obteria ciclos cpu para a vm quando a quantidade de cpus virtuais estivesse inativa ao mesmo tempo. caso contrário, seu "tempo de espera da CPU" aumentará

Portanto, com uma CPU quadcore no host, eu atribuiria apenas max. 2 cpus para um vm.

    
por 05.01.2011 / 11:33
0

Depende do que mais está usando esses outros núcleos. Se os núcleos estiverem inativos, sim, adicionar esses núcleos à sua VM melhoraria o desempenho (suponho que o aplicativo em execução na sua VM seja multiencadeado e capaz de usar todos os 4 núcleos). Se os núcleos estão ocupados, provavelmente não ajudará, ou pelo menos não tanto quanto se pensaria.

    
por 05.01.2011 / 07:10