Discussion:
kvm guest mit cpu threading?
(zu alt für eine Antwort)
Ulli Horlacher
2015-05-05 06:47:02 UTC
Permalink
(Wie) kann man mit kvm (qemu) fuer guests CPU threading aktivieren?

Mein host hat threading aktiviert:

mutter:/etc/libvirt/qemu# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 42
Stepping: 7
CPU MHz: 1600.000
BogoMIPS: 6823.49
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7

Leider weiss davon der guest nichts:

***@flupp:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 2
Stepping: 3
CPU MHz: 3411.484
BogoMIPS: 6822.96
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0,1


virsh hat anscheinend dazu keinen Befehl.
--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Florian Weimer
2015-05-06 14:30:47 UTC
Permalink
Post by Ulli Horlacher
virsh hat anscheinend dazu keinen Befehl.
Doch, “edit”. Das Format ist hier beschrieben:

<http://libvirt.org/formatdomain.html>

Du mußt die CPU-Allokation anpassen und ggf. die CPU-Flags, die
durchgereicht werden.
Marc Haber
2015-05-06 15:31:28 UTC
Permalink
Post by Florian Weimer
Post by Ulli Horlacher
virsh hat anscheinend dazu keinen Befehl.
<http://libvirt.org/formatdomain.html>
Du mußt die CPU-Allokation anpassen und ggf. die CPU-Flags, die
durchgereicht werden.
Und ein aktueller Virt-Manager hat dafür sogar ein leidlich
komfortables Klickinterface.

Grüße
Marc, der bei der libvirt-Doku nässenden Ausschlag bekommt
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
Ulli Horlacher
2015-05-07 11:23:06 UTC
Permalink
Post by Marc Haber
Post by Florian Weimer
Post by Ulli Horlacher
virsh hat anscheinend dazu keinen Befehl.
<http://libvirt.org/formatdomain.html>
Du mußt die CPU-Allokation anpassen und ggf. die CPU-Flags, die
durchgereicht werden.
Und ein aktueller Virt-Manager hat dafür sogar ein leidlich
komfortables Klickinterface.
Ok, ich hab jetzt im virt-manager fuer die VM unter Processor
Configuration "kvm64" angewaehlt, was in "SandyBridge" uebersetzt wird.
Bei den CPU Feautures steht dann: "ht require"
Im config file hat sich veraendert:

mutter:/etc/libvirt/qemu# vv -d flupp.xml
--- ./.versions/flupp.xml~1~ 2015-05-03 21:26:12.065285901 +0200
+++ flupp.xml 2015-05-07 13:12:21.602963806 +0200
@@ -20,6 +20,28 @@
<apic/>
<pae/>
</features>
+ <cpu mode='custom' match='exact'>
+ <model fallback='allow'>SandyBridge</model>
+ <vendor>Intel</vendor>
+ <feature policy='require' name='pbe'/>
+ <feature policy='require' name='tm2'/>
+ <feature policy='require' name='est'/>
+ <feature policy='require' name='monitor'/>
+ <feature policy='require' name='osxsave'/>
+ <feature policy='require' name='smx'/>
+ <feature policy='require' name='ss'/>
+ <feature policy='require' name='vme'/>
+ <feature policy='require' name='dtes64'/>
+ <feature policy='require' name='ht'/>
+ <feature policy='require' name='ds'/>
+ <feature policy='require' name='pcid'/>
+ <feature policy='require' name='tm'/>
+ <feature policy='require' name='pdcm'/>
+ <feature policy='require' name='vmx'/>
+ <feature policy='require' name='ds_cpl'/>
+ <feature policy='require' name='xtpr'/>
+ <feature policy='require' name='acpi'/>
+ </cpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>

Wenn ich die VM boote, hab ich allerdings immer noch kein hyperthreading:

***@flupp:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 2
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 42
Stepping: 1
CPU MHz: 3411.482
BogoMIPS: 6822.96
Virtualization: VT-x
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 4096K
NUMA node0 CPU(s): 0,1


Was hab ich uebersehen?
--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Florian Weimer
2015-05-07 19:36:13 UTC
Permalink
Post by Ulli Horlacher
Was hab ich uebersehen?
Nun ja, Du mußt die CPU-Allokation verändern, sonst ändert sie sich
nicht. Ich verstehe das Problem nicht.
Florian Weimer
2015-05-07 19:37:21 UTC
Permalink
Post by Marc Haber
Marc, der bei der libvirt-Doku nässenden Ausschlag bekommt
Echt? Ich finde sie so schlimm nicht. Das Themenfeld ist fraglos sehr
komplex, aber das können die Entwickler nicht ändern (bzw. wenn sie es
machen, kommt landet man eher bei GNOME Boxes).
Marc Haber
2015-05-07 19:48:50 UTC
Permalink
Post by Florian Weimer
Post by Marc Haber
Marc, der bei der libvirt-Doku nässenden Ausschlag bekommt
Echt? Ich finde sie so schlimm nicht.
Sie hat das typische Problem von Open-Source-Dokumentation. Es gibt
eine Übersichts-Doku aus dem Zehnten Stock, und die Dokumentation der
Grasnarbe aus Sicht einer Lupe.

Was fehlt, ist der Blick aus dem ersten oder zweiten Stock.

Grüße
Marc
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
Florian Weimer
2015-05-07 21:07:02 UTC
Permalink
Post by Marc Haber
Post by Florian Weimer
Post by Marc Haber
Marc, der bei der libvirt-Doku nässenden Ausschlag bekommt
Echt? Ich finde sie so schlimm nicht.
Sie hat das typische Problem von Open-Source-Dokumentation. Es gibt
eine Übersichts-Doku aus dem Zehnten Stock, und die Dokumentation der
Grasnarbe aus Sicht einer Lupe.
Meinst Du die Dokumentation auf libvirt.org, auf die ich verwies?
Post by Marc Haber
Was fehlt, ist der Blick aus dem ersten oder zweiten Stock.
Es gibt auch noch die Dokumentation von Red Hat:

<https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/#_Virtualization>

Das beschreibt, wohlgemerkt, nicht Red Hat Enterprise Virtualization,
sondern KVM und libvirt unter Red Hat Enterprise Linux, d.h. es ist
vermutlich auch für Deinen Anwendungsfall nutzbar.

Ich sehe gerade, daß Ullis Aufgabe auch viel besser beschrieben ist:

<https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Managing_guest_virtual_machines_with_virsh-Displaying_per_guest_virtual_machine_information.html#sect-Displaying_per_guest_virtual_machine_information-Configuring_virtual_CPU_count>

Das ist alles CC-BY-SA, also auch Open-Source-Dokumentation, nur eben
von der Distribution.
Ulli Horlacher
2015-05-08 09:10:06 UTC
Permalink
Post by Florian Weimer
<https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Managing_guest_virtual_machines_with_virsh-Displaying_per_guest_virtual_machine_information.html#sect-Displaying_per_guest_virtual_machine_information-Configuring_virtual_CPU_count>
Da steht nur leider gar nichts zu hyperthreading.
Koennte es sein, dass das mit kvm/qemu gar nicht geht?

Nach dieser Doku kann man einem guest nur VCPUs zuweisen.
Der host hat bei mir:

mutter:/root# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1

Die CPU=8 Angabe enthaelt da schon die virtuellen CPUs, die vom
hyperthreading gebildet werden.
--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Marc Haber
2015-05-08 10:45:57 UTC
Permalink
Post by Ulli Horlacher
Nach dieser Doku kann man einem guest nur VCPUs zuweisen.
mutter:/root# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Die CPU=8 Angabe enthaelt da schon die virtuellen CPUs, die vom
hyperthreading gebildet werden.
Im Virt-Manager bekomme ich auf meinem Quadcore-E7 mit Hyperthreading
direkt "Logical host CPUs: 8" angezeigt, kann auch acht VCPUs
zuweisen, und erst bei der neunten kommt die Warnung "Overcommitting
VCPUS can hurt performance".

Das deckt sich damit, dass Hyperthreading "Kerne" von Linux einfach
als ganz normaler Kern verwendet werden.

|[2/502]***@swivel:~$ lscpu
|Architecture: x86_64
|CPU op-mode(s): 32-bit, 64-bit
|Byte Order: Little Endian
|CPU(s): 8
|On-line CPU(s) list: 0-7
|Thread(s) per core: 2
|Core(s) per socket: 4
|Socket(s): 1
|NUMA node(s): 1
|Vendor ID: GenuineIntel
|CPU family: 6
|Model: 42
|Model name: Intel(R) Core(TM) i7-2720QM CPU @ 2.20GHz
|Stepping: 7
|CPU MHz: 827.406
|CPU max MHz: 3300.0000
|CPU min MHz: 800.0000
|BogoMIPS: 4385.56
|Virtualization: VT-x
|L1d cache: 32K
|L1i cache: 32K
|L2 cache: 256K
|L3 cache: 6144K
|NUMA node0 CPU(s): 0-7
|[3/503]***@swivel:~$ cat /proc/cpuinfo | grep -E '(processor|core id)'
|processor : 0
|core id : 0
|processor : 1
|core id : 0
|processor : 2
|core id : 1
|processor : 3
|core id : 1
|processor : 4
|core id : 2
|processor : 5
|core id : 2
|processor : 6
|core id : 3
|processor : 7
|core id : 3
|[4/504]***@swivel:~$

Jedenfalls hoffe ich, dass Prozesse zuerst die "Prozessoren" mit
gerader Prozessornummer bevölkern, damit die Kerne gleichmäßig
beschäftigt sind und die "Prozessoren" mit gleicher Core-ID erst dann
gleichzeitig beschäftigt wenn sonst nichts mehr frei ist.

Grüße
Marc
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
Florian Weimer
2015-05-09 10:38:02 UTC
Permalink
Post by Ulli Horlacher
Da steht nur leider gar nichts zu hyperthreading.
Koennte es sein, dass das mit kvm/qemu gar nicht geht?
Nach dieser Doku kann man einem guest nur VCPUs zuweisen.
Du kannst die CPU-Affinität setzen, so daß der Gast ein
Hyperthreading-Paar bekommt. Ob der Gast dann den
Hyperthreading-Scheduler aktiviert, habe ich nicht ausprobiert.
(Letztlich ist das noch immer keine echte Hyperthreading-Topologie.)
Es gibt aber die umgekehrte Empfehlung, einem Gast nicht mehr VCPUs
als echte Cores (ohne Hyperthreading) zuzu weisen.

Es ist schwierig, das technisch sauber umzusetzen. Andere Hypervisors
weisen einem Gast stets einen kompletten Satz von Kernen zu, aber das
ist in vielen Fällen auch nicht ideal.
Marc Haber
2015-05-10 12:00:07 UTC
Permalink
Post by Florian Weimer
Post by Marc Haber
Post by Florian Weimer
Post by Marc Haber
Marc, der bei der libvirt-Doku nässenden Ausschlag bekommt
Echt? Ich finde sie so schlimm nicht.
Sie hat das typische Problem von Open-Source-Dokumentation. Es gibt
eine Übersichts-Doku aus dem Zehnten Stock, und die Dokumentation der
Grasnarbe aus Sicht einer Lupe.
Meinst Du die Dokumentation auf libvirt.org, auf die ich verwies?
Ja.
Post by Florian Weimer
Post by Marc Haber
Was fehlt, ist der Blick aus dem ersten oder zweiten Stock.
<https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/#_Virtualization>
Vielen Dank, die ist super und leicht in meine Welt zu übertragen! Da
merkt man deutlich, dass da technische Redakteure am Werk sind. Ist
zwar etwas anstrengend zu lesen weil jeder Mausklick beschrieben ist
aber immerhin sind hier auch endlich mal die Optionen erklärt. Ich
habe heute schon sehr viel gelernt.

Grüße
Marc
--
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
Bastian Blank
2015-05-10 01:02:04 UTC
Permalink
Post by Ulli Horlacher
(Wie) kann man mit kvm (qemu) fuer guests CPU threading aktivieren?
Indem du dem "-smp"-Parameter mehr Infos gibst:

| -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
| set the number of CPUs to 'n' [default=1]
| maxcpus= maximum number of total cpus, including
| offline CPUs for hotplug, etc
| cores= number of CPU cores on one socket


Mehr als Hints wo man Sachwn nicht zusammen schedulen sollte sind das
auf x86 nicht. Was willst du also erreichen?

Bastian
Ulli Horlacher
2015-05-10 18:44:11 UTC
Permalink
Post by Bastian Blank
Post by Ulli Horlacher
(Wie) kann man mit kvm (qemu) fuer guests CPU threading aktivieren?
| -smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
Parameter zu welchem Kommando?
Post by Bastian Blank
auf x86 nicht. Was willst du also erreichen?
Brachliegende Ressourcen nutzen.
Die VM soll auch das Hyperthreading ihrer CPU benutzen koennen.
Inzwischen bin ich mir aber nicht mal sicher, was die VM als "CPU" bekommt:
ist das eine echte CPU (core) oder nur eine virtuelle CPU?
--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum IZUS/TIK E-Mail: ***@tik.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-68565868
Allmandring 30a Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Loading...