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?

Anthony
fonte

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

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

Albert Gazendam
fonte
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.

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

ClaireW
fonte