Prática recomendada: vCPUs por núcleo físico

27

Estou tentando encontrar alguma documentação ou guias de práticas recomendadas para virtualização no que diz respeito ao provisionamento de vCPUs por núcleo físico (de uma CPU). Se isso importa, estou analisando o vmWare para a implementação de virtualização. Por exemplo, uma CPU Intel Xeon pode ter 4, 8 etc. núcleos. Estou interessado em aprender mais sobre o provisionamento além de apenas uma vCPU por um núcleo físico. O fornecedor com quem estou conversando definitivamente pensa que um único núcleo pode ser provisionado em várias vCPUs.

O que normalmente vejo em minha pesquisa até agora é: "Bem, isso depende da sua aplicação". Nesse caso, meu aplicativo está editando código, compilando / vinculando, testando e gerenciando configurações. Obviamente, nem todas as VMs precisam ser configuradas com várias vCPUs por núcleo, mas no caso geral.

Dr. Watson
fonte

Respostas:

24

Uma única CPU física pode ser utilizada como muitas vCPUs. Você raramente fica sem recursos da CPU em soluções de virtualização. RAM e armazenamento são sempre os fatores limitantes ...

Lembre-se, em VMware, a utilização da CPU é representado em MHz usado, não núcleos ... A menos que você está atrelando todos os seus CPUs virtuais em 100% TODA A HORA , eu não acho que o fornecedor está correto.

Vejamos o seguinte cluster de sistemas ...

  • 9 hosts ESXi.
  • 160 máquinas virtuais
  • 104 núcleos físicos de CPU no cluster.
  • O perfil médio da máquina virtual é: 4 vCPU e 4GB a 18GB RAM.
  • A CPU pode ser superassinada com segurança ... mas lembre-se, também pode ser limitada, reservada e priorizada no nível da VM.

insira a descrição da imagem aqui insira a descrição da imagem aqui

de outro cluster ativo - 3 hospeda 42 máquinas virtuais insira a descrição da imagem aqui

ewwhite
fonte
4
Depois de ver 3936 vMotion migrações Eu não me sinto muito ruim sobre a nossa 1.200
Mark Henderson
2
Ontem, eu estava analisando as estatísticas do nosso cluster de VMs que confirmam os números fornecidos pelo @ewwhite. Temos 3 hosts, totalizando 24 processadores e 55 GHz. Temos 59 VMs com um total de 79 vCPUs alocados. De acordo com as estatísticas do vSphere, nos últimos 6 meses, tivemos uma média de 14 GHz usada (mín 9 GHz, máx 25 GHz) e, durante esse período, houve 0 Contenção de Contagem de Núcleos na CPU.
Paul Gear
7

Para expandir a redação do ewwhite, a menos que você tenha aplicativos que possam tirar proveito explícito de várias vCPUs ou múltiplos núcleos por vCPU, não há benefício absolutamente nulo em alocar vários vCPUs / núcleos a uma VM. De fato, na maioria das vezes, você realmente terá desempenho inferior, em vez de executar em uma única vCPU que possui um núcleo atribuído a ela, em parte devido à sobrecarga de agendamento necessária para executar várias vCPUs.

FWIW, em uma configuração de VDI, o número frequentemente citado é de 5 vCPUs por núcleo físico. É claro que isso leva em consideração os desktops de escritório. Se suas VMs estiverem realmente ocupadas com a compilação de código o tempo todo, talvez você não consiga ajustar 5 vCPUs por núcleo físico.

A razão pela qual tantas pessoas dizem que "depende" é porque realmente depende. Observe os valores de CPU Ready e decida se você pode colocar mais carga de CPU em um sistema específico. CPU Ready é uma medida da vCPU pronta para executar um comando, mas precisa aguardar o tempo físico da CPU disponível.

No seu caso, se você estiver compilando programas grandes, é perfeitamente possível que suas VMs realmente precisem de muito tempo de CPU. Como ewwhite observou, normalmente a virtualização tende a ser restrita a E / S de disco e RAM, e não a CPU.

Extrator de Realidade
fonte
13
absolutely zero benefit in allocating multiple vCPUs/cores to a VM- não totalmente correto. Temos um aplicativo de thread único que costumava travar semanalmente. Quando uma única vCPU estava a 100%, era impossível acessar o sistema e tivemos que fazer uma redefinição no nível do hipervisor da VM. Adicionamos uma segunda vCPU e, quando o aplicativo travou, conseguimos entrar e eliminar facilmente o encadeamento ofensivo. Isso é verdade, mas você nunca pode lidar com absolutos.
Mark Henderson
4
O que Mark escreveu é a razão pela qual usamos dois núcleos como o limite inferior para cada VM - não importa se eles precisam ou não.
Nils
2
O valor pronto é a melhor maneira de saber se você está provisionando demais o host, seu valor pronto deve ser o mais baixo possível. É a porcentagem de tempo em que uma VM está "pronta" para usar um ciclo da CPU, mas precisa aguardar enquanto a CPU está ocupada com outra tarefa. Para explicar por que dar muitos núcleos à sua vm pode ter um impacto no desempenho, usarei um exemplo simples: se eu tiver 4 núcleos físicos e 4 vms, se você tiver 3 VMs com 2cores e uma vm com 4 núcleos, suas VMs menores serão ativadas mais ciclos, pois eles podem "encaixar" melhor em múltiplos. Vá o mais conservador possível com você vcpus!
Rqomey
@ MarkHenderson Eu posso ver como isso pode ser benéfico, e algo assim pode potencialmente acontecer com o cara que fez a pergunta, pois ele trabalha com compiladores.
Realidade Extractor
@ Nils Eu acredito que dar a todos os núcleos da VM 2 se existe ou não uma necessidade comercial é uma péssima ideia. Isso poderia afetá-lo facilmente de várias maneiras: tamanho do slot, núcleos insuficientes para reiniciar / failover, desempenho perdido devido ao que Rqomey escreveu, inúmeras outras coisas. Você pode praticamente sempre entrar na sua VM via vCenter e DCUI.
Reality Extractor
3

O problema subjacente é basicamente o mesmo que com o agendamento de processos em um sistema físico. Enquanto a carga do sistema estiver abaixo do número de núcleos (ou mesmo processadores lógicos, no caso do HyperThreading), tudo estará bem e os processadores poderão lidar com a carga.

Portanto, desde que a carga simultânea em todas as vCPUs usadas não exceda a carga que pode ser tratada por seus núcleos físicos, tudo estará bem.

Para suas demandas, apenas a compilação é um trabalho que exige CPU, necessário apenas de tempos em tempos. Para as VMs do compilador, alocamos tantas CPUs quanto disponíveis. Portanto, se houver necessidade de compilar, isso será feito o mais rápido possível (se o seu compilador suportar a compilação paralela).

Isso pode não ser verdade para uma VM de compilador que esteja sob carga constante (por exemplo, se você fornecer um serviço de Internet para fazer compilações e que estiver sendo constantemente usado).

Nils
fonte
2

Uma regra prática que eu vi (possivelmente na documentação da VMware) não é alocar mais núcleos para uma VM do que existem fisicamente no host, porque isso faria com que vários vCores fossem emulados em um único núcleo, adicionando sobrecarga desnecessária.

Paul Gear
fonte
11
E o contrário? E se eu tiver um Xeon de 6 núcleos e alocar apenas 4 núcleos na VM? Qual seria o desempenho então? O sistema da VM poderá obter energia de todos os 6 núcleos físicos ou será limitado a 4?
Overmind
Se você der apenas 4 núcleos, ele terá acesso a 4 núcleos por vez. Mas meu entendimento (não confirmado) é que esses quatro núcleos virtuais podem ser alocados em qualquer um dos quatro núcleos físicos, a menos que você tenha configurado a fixação.
Paul Gear