Por que minha VM do Windows 7 em execução no Linux 'KVM não usa todos os processadores virtuais?

11

Tudo

Eu tive um problema no meu servidor desde que migrei uma das minhas VMs do Windows 2008 Server para o Windows 7 (ultimate): embora eu tenha atribuído quatro núcleos à VM e até pareça vê-los, parece pensar que tem dois núcleos!

Alguémpodemedizeroqueestáacontecendoaqui?EupenseiquepoderiatersidoalgumaincompatibilidadeentreKVMeWindows7,masumavezqueelevêosprocessadoresvirtuais,euestoucomeçandoapensarnão...algumapista?

Aquiestáumacapturadeteladogerenciadordeprocessosmostrandoapenasdoisnúcleosnamesmacaixa:

    
por jkp 11.01.2010 / 08:59

5 respostas

16

Eu suspeito que os processadores estão sendo apresentados como processadores de núcleo único em soquetes separados. O Windows 7 ultimate suporta até 2 sistemas de soquete, portanto, ele usará 2 processadores.

Não sei se você pode configurar o KVM para apresentar os processadores como um único processador quad core ou 2 CPUs dual core, o que deve resolver o problema.

    
por 11.01.2010 / 13:37
19

Na libvirt 0.8.3, se você digitar:

virsh capabilities | grep topology

listará a topologia do host:

<topology sockets='1' cores='4' threads='1'/>

Os números referem-se a soquetes, núcleos por soquete e threads por núcleo. Adicione esta linha à entrada da cpu no arquivo xml para permitir que as janelas usem todos os 4 núcleos, por exemplo:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>
    
por 03.04.2011 / 19:30
4

As configurações de topologia são totalmente suportadas no virt-manager desde o Ubuntu 15.04.

Do virt-manager > CPUs > Topologia:

  • Verificar: Definir manualmente a topologia da CPU
  • Soquetes: 2
  • Cores: 2
  • Tópicos: 2

O seguinte é criado a partir das configurações acima no virt-manager. Você não precisa entrar com a edição do virsh.

<vcpu placement='static'>8</vcpu>
<cpu mode='host-model'>
  <model fallback='allow'/>
  <topology sockets='2' cores='2' threads='2'/>
</cpu>

A topologia parou de ser reconhecida pelo Windows após uma atualização e novamente limita a CPU virtual para 2 soquetes.

Para corrigir isso, use 'virsh edit' para ocultar o recurso kvm e adicionar recursos de hyperv. Após um desligamento completo e reinicialização, a VM do Windows reconhecerá novamente várias CPUs.

Por que meu VM do Windows 7 em execução no Linux 'KVM não usa todos os processadores virtuais?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>
    
por 02.07.2015 / 23:24
2

No RHEL / CentOS 5.5 (kvm > = 83-164.el5) o binário kvm também suporta a opção "-smp N, cores = N" (existem patches backport no pacote); no entanto, a versão libvirt não suporta a tag < topology > elemento no domínio XML. Uma solução alternativa é criar um script de wrapper para / usr / libexec / kvm, que adiciona a opção apropriada e especifica esse script na tag < emulator > elemento em vez do caminho padrão.

    
por 09.12.2010 / 22:28
1

Vale a pena notar que o Ubuntu 10.4 (Lucid) tem a versão 0.7.5 do libvirt enquanto o suporte para topologia foi adicionado ao libvirt na versão 0.7.6. O Ubuntu 10.10 (Maverick) possui 0.8.3 libvirt e, portanto, deve ser capaz de suportar diretamente a especificação de topologia no XML sem um wrapper.

    
por 18.01.2011 / 23:34