Linux'un KVM'si altında çalışan Windows 7 VM'im neden tüm sanal işlemcileri kullanmıyor?


12

Herşey

Sanal makinelerimden birini Windows 2008 Server'dan Windows 7'ye (nihai) geçirdiğim için sunucumda bir sorun yaşadım: VM'ye dört çekirdek atadım ve hatta onları görüyor gibi görünüyor, sanırım iki çekirdeği var!

İşlemcilerimi tanır ancak kullanmaz!

Birisi bana neler olduğunu anlatabilir mi? KVM ve Windows 7 arasında bir miktar uyumsuzluk olabileceğini düşündüm ama sanal işlemcileri gördüğünden beri düşünmeye başladım ... herhangi bir ipucu?

Aynı kutuda yalnızca iki çekirdeği gösteren işlem yöneticisinin ekran görüntüsü:

Görev Yöneticisi


Size iki adet çift çekirdekli proc göstermediğinden emin misiniz?
phoebus

@phoebus: Bunu merak ettim, ama o zaman burada yapmadığım işlemci monitörüne bakarken dört çekirdeği görmeden önce bu kurulumu çalıştırdığım tüm pencerelerde.
jkp

İşlemci monitörü derken, görev yöneticisinin performans izleme bölümünü mi kastediyorsunuz? Çünkü sadece ekran görüntülerinize dayanarak, iki, iki çekirdekli işlemcinin kanıtlarını gösteriyorsunuz. Bu durumda, performans monitöründe 4 çekirdeğin hepsini görmelisiniz. Eğer yapmazsanız, evet, bir şey sakat.
phoebus

@phoebus: evet, görev yöneticisinin performans izleme bölümünü kastediyorum. Kesinlikle bana sakat görünüyor ...
jkp

Yanıtlar:


17

İşlemcilerin ayrı soketlerde tek çekirdekli işlemciler olarak sunulduğundan şüpheleniyorum. Windows 7 Ultimate, 2 adede kadar soket sistemini destekler, bu nedenle 2 işlemci kullanır.

KVM'yi işlemcileri tek bir dört çekirdekli CPU veya 2 çift çekirdekli CPU olarak sunacak şekilde yapılandırabileceğinizi bilmiyorum, bu da sorunu çözmelidir.


1
Bu doğru. ATM topolojisini değiştirmenin bir yolu yoktur.
Luca Tettamanti

1
Vay, bunu bilmiyordum. Parmağınızı soruna doğru şekilde koyduğunuz için teşekkür ederiz. @Luca: Böyle bir desteğin planlanıp planlanmadığını biliyor musunuz? Ben aslında fazladan iki çekirdeği mi kullanıyorum yoksa boşa mı harcayacaklar?
jkp

2
@Luca: aslında qemu 0.12'den beri topolojiyi değiştirebilirsiniz. Benim kullanıcı alanı kvm bileşenleri yükselttim ama çalışmak için yeni çekirdek moduna ihtiyacım olduğunu düşünüyorum .... neyse, yapılabilir :)
jkp

Ah, güzel ... Ben de o zaman yükseltmeliyim :)
Luca Tettamanti

Mevcut eski çekirdeğinizdeki en yeni kvm çekirdek modülünü çalıştırabileceğinizi unutmayın. Sizin için ikili olan dağıtımınız için bir depo bulamadığınız sürece muhtemelen modülü kendiniz derlemeniz gerekecektir. Ancak bir modül oluşturmak çok zor değil.
3dinfluence

21

Libvirt 0.8.3'te, şunu yazarsanız:

virsh capabilities | grep topology

ana bilgisayarın topolojisini listeler:

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

Rakamlar soketleri, soket başına damarları ve çekirdek başına dişleri ifade eder. Pencerelerin 4 çekirdeğin tümünü kullanmasına izin vermek için bu satırı xml dosyasındaki cpu girişine ekleyin, örn:

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

biliyordu, ama unuttum - o zaman yine serverfault ve tüm bu harika şeyleri yazan insanlar var. Bahşiş için teşekkürler!
fen

1
Bunu RHEL 7.2 makinemde denedim. Xml'ime eklendi <topology sockets='1' cores='4' threads='1'/>. virsh capabilities | grep topologygösterir <topology sockets='1' cores='6' threads='2'/>. ELEŞTİREL: kill -HUP nnnnnnnnnn benim libvirtd sürecimin PID olduğu bir yerde gerçekleştirdi . VM'yi başlattı. İşe yaradı. +1! Teşekkürler! ... Ama libvirtd'i bir HUP sinyali veya yeniden başlatma ile tekmelemeyi unutmayın!
Mike S

4

Topoloji ayarları Ubuntu 15.04'ten bu yana virt-manager'da tamamen desteklenmektedir.

Virt-manager> CPU'lar> Topoloji'den:

  • Kontrol: CPU topolojisini manuel olarak ayarlama
  • Prizler: 2
  • Çekirdekler: 2
  • Konular: 2

Virt-manager'da yukarıdaki ayarlardan aşağıdakiler oluşturulur. Bunları virsh düzenlemesi ile girmenize gerek yoktur.

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

Topoloji, bir güncellemeden sonra pencereler tarafından tanınmayı durdurdu ve yine Sanal CPU'ları 2 soketle sınırlandırdı.

Bunu düzeltmek için kvm özelliğini gizlemek için 'virsh edit' komutunu kullanın ve hyperv özellikleri ekleyin. Tamamen kapatıldıktan ve yeniden başlattıktan sonra, Windows VM tekrar birden fazla CPU'yu tanıyacaktır.

Linux'un KVM'si altında çalışan Windows 7 VM'im neden tüm sanal işlemcileri kullanmıyor?

<features>
  <acpi/>
  <apic/>
  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='8191'/>
  </hyperv>
  <kvm>
    <hidden state='on'/>
  </kvm>
</features>

2

RHEL / CentOS 5.5'te (kvm> = 83-164.el5) kvm ikili dosyası "-smp N, cores = N" seçeneğini de destekler (pakette backport yamaları vardır); ancak libvirt sürümü, etki alanı XML'sindeki <topoloji> öğesini desteklemez. Geçici çözüm / usr / libexec / kvm için uygun seçeneği ekleyen bir sarmalayıcı komut dosyası oluşturmak ve bu komut dosyasını <emulator> öğesinde varsayılan yol yerine belirtmektir.


1

Ubuntu 10.4'ün (Lucid) libvirt'in 0.7.5 sürümüne sahip olduğunu ve 0.7.6 sürümünde libvirt'e topoloji desteği eklendiğini belirtmek gerekir. Ubuntu 10.10 (Maverick) 0.8.3 libvirt'e sahiptir ve bu nedenle XML'deki topoloji özelliklerini bir sarıcı olmadan doğrudan destekleyebilmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.