CPU Sockets vs Cores

virtualization
german

#1

Hallo,

ist es irgendwie möglich, bei der Definition einer VM anstatt der Anzahl der CPU Sockets die Anzahl der CPU Cores zu setzen?
Hintergrund: Normale Windows-Versionen unterstzützen ja max. 2 Sockets, und wenn ich nun mehr Sockets zuweise, werden die
logischerweise ignoriert bzw. nicht erkannt.
Besser wäre es z.B. 1 Socket mit 4 Cores zu haben, ansonten kann ich ja einen Teil der Host-CPU für rechenintensive (Windows-)VMs
nicht verwenden.

Danke für eure Tipps!

Grüße


#2

Moin,

über die UVMM geht das wohl nicht direkt. Was aber bei KVM-Maschinen zu gehen scheint, ist die Konfiguration der Maschine via libvirt zu bearbeiten und dort die Topologieinformationen unterzubringen. Die UVMM scheint zumindest diese Art der Konfigurationsanpassung anschließend beizubehalten.

Dazu melden Sie sich per ssh am Virtualisierungshost an und starten »virsh«. Anschließend bearbeiten Sie die Konfiguration mittels »edit «, also z.B> »edit my-vm1«.

Im Editor fügen Sie dann ein Node für die CPU & die Topologie ein:

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

Dies wäre ein Beispiel, wenn Sie in der UVMM vier CPUs konfiguriert haben. Das Ergebnis ist dann ein Sockel und vier Kerne.

Aber keine Garantie, dass diese Änderung auch wirklich dauerhaft erhalten bleibt!

Funktioniert so natürlich nicht für OpenStack- oder EC2-Instanzen.

Gruß,
mosu


#3

Genau diese Einträge konnte ich nach etwas Suche ebenfalls ausfindig machen, klingen logisch…
Aber leider habe ich mit folgender Konfiguration kein Glück, Windows 8.1 erkennt nur 1 CPU mit 1 Core:

  <vcpu placement='static'>4</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='hd'/>
  </os>
  <cpu>
    <topology sockets='1' cores='4' threads='1'/>
  </cpu>
  <features>
    <acpi/>
    <apic/>
  </features>

Habe die Hostmaschine auch schon neu gestartet, zur Info.
Vielleicht hat noch jemand Erfahrung damit und kann mir weiterhelfen?

Tausend Dank im Voraus!


#4

Moin,

nur um sicherzugehen. Haben Sie auch wirklich die folgenden Schritte gemacht:

[ul][li]Virtuelle Maschine herunterfahren[/li]
[li]»virsh« starten[/li]
[li]Konfiguration mit »edit machine-name« bearbeiten, dort den »«-Teil einfügen, speichern, Editor beenden[/li]
[li]Hat »virsh« anschließend was von »Domain … XML configuration edited« gesagt?[/li]
[li]Vorsichtshalber (noch in »virsh«) die Konfiguration mit »define /etc/libvirt/qemu/….xml« neu laden lassen; sollte mit »Domain … defined from /etc/…« quittiert werden[/li]
[li]VM starten[/li][/ul]

Bei mir funkioniert das wunderbar, hab’s allerdings auch nur mit einer Linux-Rescue-CD getestet und anschließend den Inhalt von /proc/cpuinfo ausgewertet.

Gruß,
mosu


#5

Ja, habe es gerade nochmal so probiert. Windows zeigt aber nur 1 CPU “QEMU Virtual CPU version 1.1.2” an.
Kann es sein, dass der Eintrag “4” zu entfernen ist, sobald der cpu-Block eingefügt wird?

Als Anlage noch die gesamte XML-Konfigurationsdatei.

Danke für die Geduld u. Hilfe! :wink:
host.txt (2.48 KB)


#6

Moin,

nein, der -Eintrag wird benötigt.

Wenn ich Windows 7 mit folgender Konfiguration starte, dann dort hwinfo installiere und ausführe, so werden mir eine CPU mit zwei Kernen angezeigt:

<vcpu placement='static'>2</vcpu> <cpu> <topology sockets='1' cores='2' threads='1'/> </cpu>

Gruß,
mosu


#7

Tatsächlich, sie haben Recht: Mit hwinfo werden die 4 Cores angezeigt, so wie es sein soll.
Windows selbst zeigt nur 1 CPU mit 1 Core an. Ich bin das vom ESXi gewohnt, da werden die Kerne
auch identisch in der Windows-Systemsteuerung angezeigt…

Man lernt nie aus, danke nochmals für ihre schnelle u. freundliche Hilfe!

Grüße :wink:


#8

Fein & gern geschehen :slight_smile:


#9

Erst einmal kann ich das Verhalten bestätigen, Windows 8.1 zeigt wirklich immer nur 1 CPU an, auch wenn die Topologie anders konfiguriert wird.

Jetzt aber die Frage: Wieso wird die CPU überhaupt als “QEMU Virtual CPU version 1.1.2” ausgewiesen. Für mich heißt das, dass die CPU über QEMU emuliert wird. Sollte nicht bei KVM die CPU samt ihrer HW Beschleunigungsfeatures direkt durchgereicht werden ?

Grüße,
Ludwig


#10

Hallo,

ist das hier ggf. hilfreich? http://askubuntu.com/questions/99510/qemu-kvm-unable-to-pass-multiple-cores-cpus-to-guests

Gruß,
Jens Thorp-Hansen


#11

Hallo,

danke erst einmal für den Hinweis.

Zu meinem ersten Problem: Windows 8.1 zeigt nur 1 CPU.
Hier ist die verwendete KVM/libvirt Version in UCS zu alt um das korrekt abzubilden.
Bei Verwendung einer neueren Version erübrigt sich das Thema, weshalb ich auch für den Virtualisierungshost auf Centos + Kimchi umgestiegen bin.
Jetzt werden bei konfiguriert 2 Cores mit 2 Threads auch 4 CPUs in Windows 8.1 angezeigt.

Zur Frage “Wieso wird QEMU Virtual CPU 1.1.2 angezeigt”:
Das wird immer angezeigt wenn für CPU Model / Topology nichts anderes spezifziert ist, siehe https://libvirt.org/formatdomain.html#elementsCPU
Es gibt hier verschiedene Möglichkeiten, entweder ein CPU Modul vorzugeben welches von libvirt unterstützt wird oder einen Pass-Through vom Host zu machen.
Ich musste auf Letzteres setzen, da Skylake CPUs erst ab libvirt Version 2.0 integriert sind (ich verwende 1.5.3) und diese aktuell als Broadwell erkannt werden.

Grüße,
Ludwig


#12

Kann es sein, dass sich mit den letzten UCS-Updates da etwas getan hat?
Bei mir zeigen nun die Gäste mit Win8.1 alle virtuellen Cores an, also z.B. 1 Socket und 4 virtuelle CPUs.
Wohl gemerkt in der Systemsteuerung bzw. im Taskmanager von Windows. Vorher war die genaue Topologie nur mit HWInfo ersichtlich,
im Gerätemanager wurde stets nur 1 Core angezeigt (s. vorhergehende Postings meinerseits).

MfG


KVM Cores / vcpus
#13

Ich kann unter errata.software.univention.de ad-Hoc 2 Updates sehen die qemu und qemu-kvm betreffen.


#14

Ah ok!
Es kann mich täuschen, aber es scheint so als ob die Cores nun “gleichmäßiger” ausgelastet sind:
Die Werte CPU-Time unter “virsh vcpuinfo xxx” sind jetzt nicht mehr so arg verschieden…

Grüße :slight_smile: