Host Quad Core com hyper-threading, quantos processadores configurar no VirtualBox?


10

Eu tenho um processador quad-core i7 com hyperthreading (8 núcleos lógicos). Quando configurei uma máquina virtual para usar 8 processadores, o VirtualBox me alertou dizendo que só tenho quatro núcleos (o que é verdade) e que isso pode causar uma problema de desempenho. Mas o hyperthreading é um recurso de hardware; portanto, o sistema operacional vê 8 núcleos e envia instruções para todos os 8. E se configurá-lo como 4 fizesse com que a VM usasse 2 núcleos (4 threads) em vez de 4 threads simultâneos (nos 4 núcleos) )? O aviso que recebi leva em consideração que minha máquina possui um hyperthreading?

Respostas:


9

Com base no benchmark feito por Kristian Wedberg, eu diria que você deve usar todos os núcleos lógicos que possui.
Também fiz meu próprio benchmark usando a mesma CPU (i7, 4 CPU com HT), que confirmou o aumento de desempenho para aplicativos multiencadeados. Se o PC convidado (Win. 8.1 x64) usou todos os 8 núcleos, o PC host (Ubuntu x64) também usou todos os 8 núcleos.

insira a descrição da imagem aqui

Também comparei o desempenho em aplicativos de thread único. Nos dois casos, medi os mesmos valores para que não haja penalidade usando mais do que o número físico (mas até lógico) de CPUs.
Aqui você pode ver que 1 carregamento total da CPU no PC convidado resultará em 1 carregamento da CPU no PC host.

insira a descrição da imagem aqui


Acordado. Eu estava usando 4 núcleos e descobri que leva apenas cerca de 50% do tempo de CPU na criação do meu projeto. Apesar do aviso, mudei para 8, que é o número de núcleos lógicos, a construção estava demorando 100% do tempo da CPU e acredito que funcionou mais rápido do que antes.
Deqing

Isso é bastante interessante, lembro-me de ler que o Linux tenta especificamente concentrar a carga em 1 núcleo lógico de cada núcleo HT físico para aumentar a eficiência. Gostaria de saber se o kernel do Linux convidado consegue ver que a CPU é hiperencadeada e otimizar sua programação para esse tipo de configuração.
Anthony

8

Descobri que, embora seja possível (e sem dúvida mais rápido) no VirtualBox (minha experiência com a versão 5.1.0) alocar vCPUs para uma VM baseada em processadores lógicos, é possível que ocorram problemas no sistema operacional convidado ao executar em alta carga . No meu caso, uma VM do Windows 2012 R2 com 12 vCPUs em um host Ubuntu 16.04 de 8 núcleos (que relata 16 processadores lógicos) seria BSOD durante alta carga de CPU com a mensagem de erro DPC_WATCHDOG_VIOLATION. Uma análise minidump usando osronline.com mostrou e1g6032e.sys (o driver de rede Intel 100/1000 nativo do Windows) como a causa da violação.

Isso me leva a acreditar que o tempo dentro do sistema operacional convidado é impactado negativamente ao alocar vCPUs com base na capacidade lógica do processador e na execução da VM em alta carga por períodos prolongados. No meu caso, 100% da carga da CPU na VM do Windows por alguns minutos resultaria no BSOD. Após reduzir a contagem de vCPU para 8 (o que corresponde à contagem de núcleos físicos do host), a VM do Windows não faz mais BSOD em situações semelhantes de alta carga. A documentação online do VirtualBox diz que é preciso fazer isso, mas não oferece nenhum motivo.

No meu ambiente, havia também duas outras VMs do Ubuntu em execução, cada uma com 8 vCPUs próprias. No entanto, a carga sobre eles era mínima no momento dos problemas de BSOD da VM do Windows.


Resposta incrível (com fontes), obrigado! Um par de anos mais tarde, mas agora eu sei :)
Anthony

2

O aviso que recebi leva em consideração que minha máquina possui um hyperthreading?

Sim. Se você definir o número de núcleos em uma VM para maior do que o número fisicamente existente, o processo de agendamento de tarefas no Virtual Box confirmará os recursos da CPU, causando grandes problemas de desempenho.

Quanto à distribuição da carga pelos núcleos, esse é o trabalho do sistema operacional host e deve se comportar da maneira correta.


4
Você tem algum dado para apoiar suas declarações? Alguém fez uma pesquisa envobi.com/post/virtualbox-hyper-threading-benchmark-surprise e eles recomendam definir a contagem de CPUs do Virtual Box para o número de CPUs lógicas .
Maxim Egorushkin

0

Este foi um original de VM para sua máquina? Às vezes, você receberá erros peculiares ao clonar uma VM e movê-la para outra máquina e / ou alterar as configurações.
Eu recomendo baixar e instalar a versão mais recente do Virtual Box com as extensões mais recentes.

Eu comprometi todos os oito núcleos e não estou recebendo esse erro com o meu i7 executando uma VM com o Ubuntu 13.10.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.