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.
fonte
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.
fonte
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.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).
fonte
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.
fonte