Warum verwendet meine Windows 7-VM, die unter Linux KVM ausgeführt wird, nicht alle virtuellen Prozessoren?

12

Alle

Ich hatte ein Problem auf meinem Server, seit ich eine meiner VMs von Windows 2008 Server auf Windows 7 (ultimativ) migriert habe: Obwohl ich der VM vier Kerne zugewiesen habe und sie sogar zu sehen scheint, scheint es, als ob es so wäre hat zwei Kerne!

Es erkennt meine Prozessoren, benutzt sie aber nicht!

Kann mir jemand sagen, was hier los ist? Ich dachte, es könnte eine Inkompatibilität zwischen KVM und Windows 7 gewesen sein, aber da es die virtuellen Prozessoren sieht, beginne ich nicht zu denken ... irgendwelche Hinweise?

Hier ist ein Screenshot des Prozessmanagers, der nur zwei Kerne auf derselben Box zeigt:

Taskmanager

jkp
quelle
Sind Sie sicher, dass es Ihnen nicht zwei Dual-Core-Procs zeigt?
Phoebus
@phoebus: Ich habe mich das gefragt, aber dann auf allen Windows-Versionen, auf denen ich dieses Setup ausgeführt habe, bevor ich beim Betrachten des Prozessormonitors vier Kerne sehe, was ich hier nicht sehe.
JKP
Wenn Sie Prozessorüberwachung sagen, meinen Sie damit den Abschnitt zur Leistungsüberwachung des Task-Managers? Da Sie sich ausschließlich auf Ihre Screenshots stützen, können Sie zwei Zwei-Kern-Prozessoren nachweisen. In diesem Fall sollten alle 4 Kerne im Systemmonitor angezeigt werden. Wenn nicht, dann ist ja etwas wackelig.
Phoebus
@phoebus: Ja, ich meine den Abschnitt zur Leistungsüberwachung des Task-Managers. Kommt mir auf jeden Fall wackelig vor ...
jkp

Antworten:

17

Ich vermute, dass die Prozessoren als Single-Core-Prozessoren in separaten Sockeln präsentiert werden. Windows 7 Ultimate unterstützt bis zu 2 Socket-Systeme, sodass 2 Prozessoren verwendet werden.

Ich weiß nicht, ob Sie KVM so konfigurieren können, dass die Prozessoren entweder als einzelne Quad-Core-CPU oder als zwei Dual-Core-CPUs dargestellt werden. Dies sollte das Problem beheben.

xenny
quelle
1
Das ist richtig. ATM gibt es keine Möglichkeit, die Topologie zu ändern.
Luca Tettamanti
1
Wow, das wusste ich nicht. Vielen Dank, dass Sie das Problem richtig erkannt haben. @Luca: Weißt du, ob eine solche Unterstützung geplant ist? Ich benutze eigentlich die zusätzlichen zwei Kerne oder werden sie verschwenden?
JKP
2
@Luca: eigentlich kann man seit qemu 0.12 die topologie ändern. Ich habe meine User - Space kvm Komponenten aufgerüstet , aber ich glaube , ich brauche den neuen Kernel mod für sie zu arbeiten .... wie auch immer, es kann getan werden :)
jkp
Ah, cool ... dann sollte ich auch upgraden :)
Luca Tettamanti
Denken Sie daran, dass Sie das neueste kvm-Kernelmodul auf Ihrem aktuellen älteren Kernel ausführen können. Sie müssen das Modul wahrscheinlich selbst kompilieren, es sei denn, Sie finden ein Repository für Ihre Distribution, das die Binärdatei für Sie enthält. Das Erstellen eines Moduls ist jedoch nicht allzu schwierig.
3 Einfluss
21

Auf libvirt 0.8.3, wenn Sie Folgendes eingeben:

virsh capabilities | grep topology

Es wird die Topologie des Hosts aufgelistet:

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

Die Zahlen beziehen sich auf Sockets, Cores pro Socket und Threads pro Core. Fügen Sie diese Zeile zum Eintrag cpu in der XML-Datei hinzu, damit Windows alle 4 Kerne verwenden kann. Beispiel:

 <vcpu>4</vcpu>
 <cpu>
     <topology sockets='1' cores='4' threads='1'/>
 </cpu>
Mark Dayel
quelle
wusste es, vergaß es aber wieder - nun, es gibt Serverfehler und all diese Leute, die all dieses tolle Zeug schreiben. Danke für den Tipp!
Fen
1
Ich habe dies auf meinem RHEL 7.2-Rechner versucht. Zu <topology sockets='1' cores='4' threads='1'/>meiner XML hinzugefügt . virsh capabilities | grep topologyzeigt <topology sockets='1' cores='6' threads='2'/>. KRITISCH: Es wurde ein kill -HUP nnnnnWobei nnnnn die PID meines libvirtd-Prozesses ist. Startete die VM. Es funktionierte. +1! Vielen Dank! ... Aber vergessen Sie nicht, libvirtd entweder mit einem HUP-Signal oder einem Neustart zu treten!
Mike S
4

Topologieeinstellungen werden in virt-manager seit Ubuntu 15.04 vollständig unterstützt.

Von virt-manager> CPUs> Topologie:

  • Überprüfen Sie: Legen Sie die CPU-Topologie manuell fest
  • Steckdosen: 2
  • Kerne: 2
  • Themen: 2

Das Folgende wird aus den obigen Einstellungen in virt-manager erstellt. Sie müssen diese nicht mit virsh edit eingeben.

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

Die Topologie wird nach einem Update nicht mehr von Windows erkannt und die virtuellen CPUs werden wieder auf 2 Sockel begrenzt.

Um dies zu beheben, verwenden Sie "virsh edit", um die kvm-Funktion auszublenden und Hyperv-Funktionen hinzuzufügen. Nach einem vollständigen Herunterfahren und Neustart erkennt die Windows-VM wieder mehrere CPUs.

Warum verwendet meine Windows 7-VM, die unter Linux KVM ausgeführt wird, nicht alle virtuellen Prozessoren?

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

In RHEL / CentOS 5.5 (kvm> = 83-164.el5) unterstützt die kvm-Binärdatei auch die Option "-smp N, cores = N" (das Paket enthält Backport-Patches). Die libvirt-Version unterstützt jedoch nicht das <topology> -Element in der Domain-XML. Eine Problemumgehung besteht darin, ein Wrapper-Skript für / usr / libexec / kvm zu erstellen, das die entsprechende Option hinzufügt und dieses Skript im <emulator> -Element anstelle des Standardpfads angibt.

Sergey Vlasov
quelle
1

Es ist erwähnenswert, dass Ubuntu 10.4 (Lucid) die Version 0.7.5 von libvirt hat, während die Unterstützung für die Topologie in Version 0.7.6 zu libvirt hinzugefügt wurde. Ubuntu 10.10 (Maverick) hat 0.8.3 libvirt und sollte daher in der Lage sein, die Topologie-Spezifikation im XML ohne Wrapper direkt zu unterstützen.

user67327
quelle