Existe uma configuração ideal para o número de núcleos de CPU expostos a uma VM?

23

O VirtualBox, e possivelmente outro software de VM, permite ao usuário especificar o número de CPUs expostas à VM. No meu caso particular, eu tenho uma CPU de núcleo duplo, com o Windows 7 de 64 bits em execução nativamente e o Ubuntu 9.04 de 64 bits como a VM.

O arquivo de ajuda sugere não definir isso acima do número de núcleos físicos disponíveis. Isso faz sentido. Então, é melhor alocar 1 ou 2 núcleos de CPU? Isso depende inteiramente da carga da CPU nativa?

sblair
fonte

Respostas:

6

Depende inteiramente do que o sistema operacional convidado está fazendo. Na minha experiência pessoal, uma VM está executando um único programa (servidor de compilação, servidor trac, SVN etc.), portanto não há razão para configurá-lo acima de um.

Um possível caso pode ser se um usuário final, digamos, uma universidade que estiver usando o sistema operacional convidado como um descartável (ou seja, ATs), talvez configurá-lo para mais de um.

Nate
fonte
Portanto, em outras palavras: para um sistema temporário, você também pode maximizar a cota do núcleo da CPU; mas para uso "normal" ou típico, defina-o como um núcleo (para não interferir demais no desempenho do sistema operacional host)?
sblair
18

As informações nesta resposta não estão mais corretas . Estava correto nos dias de rigoroso co-agendamento, mas não é mais o caso.

Estou mantendo a resposta abaixo para garantir a prosperidade, mas não confie nela para ser precisa para os hipervisores modernos.


Você nunca deve atribuir todos os seus núcleos como vCPUs em uma máquina virtual.

Se uma VM solicita qualquer tempo de CPU, VMWare tem de alocar quer tudo o vCPUs, ou nenhum do vCPUs.

O que isso significa é que, em um sistema de quatro núcleos, se você alocar todos os quatro núcleos, somente o host ou o convidado poderá receber o tempo do processador, não os dois ao mesmo tempo.

Isso arruinará absolutamente o desempenho nos dois ambientes.

Sinta-se à vontade para alocar um número ímpar de núcleos (digamos, 3). Parece estranho, mas é uma opção totalmente legítima.

Geralmente, nunca aloco mais do que (n / 2) vCPUs (no seu caso, 2) - mas normalmente aloco núcleos em servidores com entre 12 e 32 núcleos, nos quais é possível alocar um grande número de vCPUs sem grande impacto.

Mark Henderson
fonte
esta é a única resposta até agora escrita com algum grau de autoridade. Obrigado por compartilhar suas experiências.
G-Wiz
5
-1: Não é consistente com a minha experiência. A VM é um processo cujo tempo de CPU pode ser agendado da mesma maneira que qualquer outro processo no host. Você pode ajustar a prioridade do (s) processo (s) da VM no host e o sistema equilibrará as cargas adequadamente.
BwDraco
2
( continuação ) Digamos que você tenha um servidor de 16 núcleos. Um exemplo de configuração seria 4 VMs, cada uma configurada para 8 núcleos. Embora pareça haver muitos núcleos virtuais, ele permite que as VMs individuais sejam dimensionadas melhor em cargas de trabalho mais pesadas. Se a utilização combinada exceder o número de núcleos físicos, o host equilibrará as cargas de acordo. É assim que a virtualização pode aumentar a taxa de transferência e reduzir custos - aproveitando ao máximo o hardware do host.
BwDraco
@DragonLord - esta resposta tem mais de 2 anos em uma pergunta com quase 4 anos e pode ser baseada em informações desatualizadas. Estou me referindo ao "Strict Co-Scheduling" do ESX, mas não lembro quantos anos essas informações têm e não me atualizei sobre como o agendamento da CPU mudou nos últimos anos.
Mark Henderson
1
Só queria deixar aqui uma nota de que, tanto no Ubuntu 14.04 quanto no 16.04, há problemas de inicialização e travamentos se você definir o número de CPUs para um número ímpar. Não consegui descobrir o motivo, porque simplesmente decidi mantê-lo em números pares para evitar os problemas.
Dorian
3

O número de núcleos expostos às CPUs convidadas não afeta o desempenho tanto quanto você gostaria. Apenas ajusta a quantidade de núcleos que a CPU convidada "vê".

Dependendo de como o emulador estiver configurado, ele pode literalmente metade do desempenho da máquina virtual, não fazer nada ou afetar apenas a maneira como os SOs / aplicativos convidados dividem sua programação de encadeamentos.

É melhor deixá-lo para o padrão. Se você encontrar problemas de desempenho no PC host, poderá simplesmente ajustar a prioridade do processo com o Gerenciador de Tarefas do Windows.

Avanço
fonte
3

Como Nate mencionou, desde que sua VM atenda principalmente à execução de um processo de thread único, há poucas razões para alocar mais de um núcleo.

No entanto, se você planeja usá-lo de uma maneira que possa se beneficiar de mais núcleos (programa multiencadeado, muitos programas paralelos, etc.), a história é mais complicada. Anteriormente, eu assumi que usar metade de sua CPU para sua VM era uma boa idéia. Acontece que isso nem sempre é o ideal.

A única maneira de garantir é executar benchmarks. Não sei por que, mas no meu sistema Core2 Quad (que tem suporte a VT-x, paginação aninhada, etc.), na verdade, usar 1 dos 4 núcleos tem melhor desempenho do que usar 2 ou mais núcleos! Vejo isso simplesmente nos tempos de inicialização da VM, mas também durante os benchmarks de compilação.

Com outros resultados de hardware são diferentes. Eu também tenho um i7 com 8 núcleos, e o desempenho parece escalar muito melhor com o número de núcleos lá (usando 4 lá alegremente).

Minha dica: compare primeiro um novo hardware.

Arnout
fonte
1

Confio no agendador do sistema operacional e apenas defino a VM com o número de núcleos físicos, a menos que você saiba que sempre deseja que o host tenha um núcleo potencialmente ocioso enquanto estiver ocupado na VM.

Andrew Coleson
fonte
1

Isso depende do que você deseja fazer na máquina virtual e também na máquina física. Se você precisar usar a máquina virtual enquanto o sistema operacional host estiver sendo usado para alguma outra atividade, talvez seja melhor usar dois núcleos de processador para a VM, para que o host tenha dois restantes se a VM estiver com carga total. Por outro lado, se você estiver trabalhando principalmente na VM, poderá usar todos os núcleos do processador.

No entanto, a menos que se possa esperar que o convidado use todos os quatro núcleos ao mesmo tempo, você poderá usá-los com segurança enquanto continua trabalhando no sistema operacional host. Lembre-se de que você sempre pode ajustar a prioridade do processo da VM enquanto estiver em execução no sistema operacional host, e o sistema equilibrará as cargas de acordo.

bwDraco
fonte
Isso é baseado na minha experiência com o VirtualBox. Como não estou familiarizado com os produtos VMware, posso estar errado; Nesse caso, excluirei esta resposta.
precisa saber é o seguinte
0

sim, eu também diria que depende. Mas vou dizer o que prefiro fazer. No trabalho, tenho uma CPU quad core. Então, para a minha imagem virtual (win7), aloquei duas CPUs. Dessa forma, eu posso usar a máquina host e a máquina virtual ao mesmo tempo, e cada uma delas possui recursos iguais de CPU.

Joel Martinez
fonte