CPU Flags

crmspezi

Renowned Member
Sep 5, 2019
397
29
68
44
Germany/Thueringen
Hallo zusammen,

ich habe trotz langer Suche nur wenig INFO's was die einzelnen CPU Typen für Vorteile bringen. Besonders interessiert mich der Unterschied zwischen

Voreinstellung KVM64 + AES Support und pdpe1gb und
qemu64 + AES Support und pdpe1gb


Alles was ich finden konnte sagt, das qemu64 spezieller und aktueller sein soll. Dagegen spricht aber dies hier:

KVM64
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 6
model name : Common KVM processor
stepping : 1
microcode : 0x1
cpu MHz : 2394.454
cache size : 16384 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology pni cx16 x2apic hypervisor lahf_lm kaiser
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4788.90
clflush size : 64
cache_alignment : 128
address sizes : 40 bits physical, 48 bits virtual
power management:

qemu64
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 6
model name : QEMU Virtual CPU version 2.5+
stepping : 3
microcode : 0x1
cpu MHz : 2394.454
cache size : 16384 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 ht syscall nx lm rep_good nopl xtopology pni cx16 x2apic hypervisor lahf_lm kaiser
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips : 4788.90
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:


Kann mir jemand erklären, welche CPU man auf aktuellen Intel und AMD wählen sollte um möglichst kompatibel bei der Migration zu sein.

Danke sehr.
 
kvm64 ist unser Standard für Kompatibilität. In einem homogenen Cluster (also alle nodes haben die gleiche CPU) sollte es grundsätzlich auch bei anderen CPU Typen keine Probleme geben, aber nur bei kvm64 garantieren wir das größtenteils.

Der Unterschied zwischen kvm64 und qemu64 war so weit ich weiß früher einmal der vendor - einmal AMD, einmal Intel. Das scheint deinen geposteten detailinfos allerdings zu widersprechen... Performance- und feature-mäßig sind die beiden im allgemeinen genau gleich, also da kann man nehmen was einem (oder dem Gast-OS) besser gefällt. kvm64 fühlt sich da bei KVM-unterstützten Maschinen mmn. etwas passender an ;)

Eigene flags (also aes, pdpe1gb, etc...) hindern die Migration nicht, sofern das aktivierte feature auf Quelle und Ziel verfügbar ist.
 
  • Like
Reactions: crmspezi
kvm64 ist unser Standard für Kompatibilität. In einem homogenen Cluster (also alle nodes haben die gleiche CPU) sollte es grundsätzlich auch bei anderen CPU Typen keine Probleme geben, aber nur bei kvm64 garantieren wir das größtenteils.

Der Unterschied zwischen kvm64 und qemu64 war so weit ich weiß früher einmal der vendor - einmal AMD, einmal Intel. Das scheint deinen geposteten detailinfos allerdings zu widersprechen... Performance- und feature-mäßig sind die beiden im allgemeinen genau gleich, also da kann man nehmen was einem (oder dem Gast-OS) besser gefällt. kvm64 fühlt sich da bei KVM-unterstützten Maschinen mmn. etwas passender an ;)

Eigene flags (also aes, pdpe1gb, etc...) hindern die Migration nicht, sofern das aktivierte feature auf Quelle und Ziel verfügbar ist.
Danke für die ausführliche Antwort. Ich habe aber leider kein homogenes Cluster, E5-2670, Ryzen 39xx + 59xx, Xeon E3-21xx, Xeon Silver 42xx.

Mit KVM64 konnte ich nie ohne Absturz (erst nach 1h nach der Migration) zwischen AMD und Intel migrieren. Seit ich am WE von kvm64 auf qemu64 umgestellt hab, scheint dies zu funktionieren. Leistungsmäßig finde ich qemu64 etwas "zäher".

Was bringt mir denn pdpe1gb?
 
Ich habe folgendes noch gefunden, bei beim allerdings von der Verwendung von kvm64 abgeraten wird: CPU Typen
Hier heißt es:

Default x86 CPU models​

The default QEMU CPU models are designed such that they can run on all hosts. If an application does not wish to do perform any host compatibility checks before launching guests, the default is guaranteed to work.

The default CPU models will, however, leave the guest OS vulnerable to various CPU hardware flaws, so their use is strongly discouraged. Applications should follow the earlier guidance to setup a better CPU configuration, with host passthrough recommended if live migration is not needed.

qemu32 qemu64 QEMU Virtual CPU version 2.5+ (32 & 64 bit variants). qemu64 is used for x86_64 guests and qemu32 is used for i686 guests, when no -cpu argument is given to QEMU, or no <cpu> is provided in libvirt XML.

Other non-recommended x86 CPUs​

The following CPUs models are compatible with most AMD and Intel x86 hosts, but their usage is discouraged, as they expose a very limited featureset, which prevents guests having optimal performance.

kvm32 kvm64 Common KVM processor (32 & 64 bit variants). Legacy models just for historical compatibility with ancient QEMU versions.486athlonphenomcoreduocore2duon270pentiumpentium2pentium3Various very old x86 CPU models, mostly predating the introduction of hardware assisted virtualization, that should thus not be required for running virtual machines.

Wie sind eure Erfahrungen?
 
Mit KVM64 konnte ich nie ohne Absturz (erst nach 1h nach der Migration) zwischen AMD und Intel migrieren. Seit ich am WE von kvm64 auf qemu64 umgestellt hab, scheint dies zu funktionieren. Leistungsmäßig finde ich qemu64 etwas "zäher".
Migration zwischen CPU Herstellern ist im allgemeinen nicht unterstützt. Dafür gibt es zwischen den Implementationen des x86 sets einfach zu viele Unterschiede - was nicht heißt, dass es nicht in Ausnahmefällen gutgehen kann, aber ich würde es nie für Produktivsysteme verwenden.

Ich habe folgendes noch gefunden, bei beim allerdings von der Verwendung von kvm64 abgeraten wird: CPU Typen
Der Artikel an sich scheint korrekt zu sein, nur bei dem Punkt zum Unterschied zwischen kvm64 und qemu64 muss ich widersprechen: Schaut man direkt im source-code von QEMU nach [0], dann sieht man, dass der einzige wirkliche Unterschied zwischen den Typen der angegebene CPU vendor ist (wie ich auch oben schon erwähnt habe - was dann die Ergebnisse im ersten Post noch ein wenig seltsamer macht)...

Es sollte also in Sachen performance absolut keinen Unterschied machen, welchen davon man wählt.

Was bringt mir denn pdpe1gb?
Wie auch in der verlinkten Seite erklärt, erlaubt diese Flag es 1GB hugepages im Gast zu verwenden. Das kann unter Umständen mit der performance von bestimmten Programmen (DBs, etc...) helfen, oder auch bei nested virtualization (wobei letzteres bei kvm64/qemu64 sowieso nicht funktionieren wird).

[0] https://github.com/qemu/qemu/blob/51db2d7cf26d05a961ec0ee0eb773594b32cc4a1/target/i386/cpu.c#L1880
 
  • Like
Reactions: crmspezi
Migration zwischen CPU Herstellern ist im allgemeinen nicht unterstützt. Dafür gibt es zwischen den Implementationen des x86 sets einfach zu viele Unterschiede - was nicht heißt, dass es nicht in Ausnahmefällen gutgehen kann, aber ich würde es nie für Produktivsysteme verwenden.


Der Artikel an sich scheint korrekt zu sein, nur bei dem Punkt zum Unterschied zwischen kvm64 und qemu64 muss ich widersprechen: Schaut man direkt im source-code von QEMU nach [0], dann sieht man, dass der einzige wirkliche Unterschied zwischen den Typen der angegebene CPU vendor ist (wie ich auch oben schon erwähnt habe - was dann die Ergebnisse im ersten Post noch ein wenig seltsamer macht)...

Es sollte also in Sachen performance absolut keinen Unterschied machen, welchen davon man wählt.


Wie auch in der verlinkten Seite erklärt, erlaubt diese Flag es 1GB hugepages im Gast zu verwenden. Das kann unter Umständen mit der performance von bestimmten Programmen (DBs, etc...) helfen, oder auch bei nested virtualization (wobei letzteres bei kvm64/qemu64 sowieso nicht funktionieren wird).

[0] https://github.com/qemu/qemu/blob/51db2d7cf26d05a961ec0ee0eb773594b32cc4a1/target/i386/cpu.c#L1880
Danke Stefan für Deine Ausführungen. Migration zwischen den Herstellern ist immer schwierig, aber scheinbar habe ich keine Abstürze mit qemu64 statt kvm64 mit der Migration zwischen den Herstellern, was vorher immer der Fall war wenn ich die Maschine laufen lassen habe.

Nested virtualization geht glaube ich nur bei der hosts Einstellung und das nutze ich auch nicht.

Ich danke Dir sehr für Deine Ausführungen!
 
Hallo!

Ich habe eine weiterführende Frage zu den CPU Flags.

Unsere Hosts zeigt in der cpuinfo folgende flags:

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts md_clear flush_l1d

In einem KVM sehen wir allerdings nur:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm constant_tsc nopl xtopology cpuid tsc_known_freq pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti

Wir würden gerne in der KVM auch sse4_1 und sse4_2 verwenden. Diese Flags werden anscheinend nicht durchgereicht..
Habt ihr eine Idee dazu?
 
Wir würden gerne in der KVM auch sse4_1 und sse4_2 verwenden. Diese Flags werden anscheinend nicht durchgereicht..
Habt ihr eine Idee dazu?
Siehe "CPU Types" und "Custom CPU Types" in unserer Doku: https://pve.proxmox.com/pve-docs/chapter-qm.html#qm_cpu

Der "CPU Type" bestimmt, welche CPU emuliert wird, sprich welche flags dem Gast "durchgereicht" oder vorgegaukelt werden. Für SSE4 reicht einfach eine etwas neuere AMD oder Intel CPU (am besten den Hersteller immer gleich wie am Host) auszuwählen. "host" ist auch möglich, dann sieht der Gast (fast) alles was der Host auch kann. Der einzige Nachteil ist hier die Migration - all dem Gast angezeigten Flags müssen auch auf allen Hosts im Cluster verfügbar sein, falls live-migration erwünscht ist.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!