it-swarm-pt.com

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

O VirtualBox e, possivelmente, outro software VM, permite ao usuário especificar o número de CPUs expostas à VM. No meu caso específico, 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?

23
sblair

Depende inteiramente do que o sistema operacional convidado está fazendo. Na minha experiência pessoal, um 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, por exemplo, uma universidade que está usando o sistema operacional convidado como um descartável (ou seja, TAs), então talvez o configure para mais de um.

6
Nate

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ê deve nunca atribuir todos os seus núcleos como vCPUs em uma máquina virtual.

Se um VM solicitar qualquer tempo de CPU, o VMWare terá para alocar todas as vCPUs ou nenhuma das 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ão receber o tempo do processador, não os dois ao mesmo tempo.

Isso arruinará absolutamente o desempenho nos dois ambientes.

Sinta-se livre 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.

18
Mark Henderson

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 SO/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.

3
Breakthrough

Como Nate mencionou, desde que seu VM sirva principalmente para a 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 da sua CPU para o seu VM foi 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 (usando 4 lá alegremente).

Minha dica: compare primeiro um novo hardware.

3
Arnout

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 o VM para que o Host tenha dois remanescentes se o VM está sob 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 de uma vez, 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 VM enquanto estiver em execução no sistema operacional Host, e o sistema equilibrará as cargas de acordo.

1
bwDraco

Confio no agendador do sistema operacional e apenas defino o VM como 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 no VM.

1
Andrew Coleson

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 possui recursos de CPU iguais.

0
Joel Martinez