Virtualisierung: vCPU-Pinning mit Hyperthreading-Host-CPU?

Virtualisierung: vCPU-Pinning mit Hyperthreading-Host-CPU?

Ich verwende KVM/libvirt auf einem Linux-Server mit Core i7-2600-CPU, der über die folgende CPU-Topologie verfügt (1 Sockel, 4 Kerne, 8 Threads):

Physical | Logical
---------+--------
Core 0   | 0, 4
Core 1   | 1, 5
Core 2   | 2, 6
Core 3   | 3, 7

Normalerweise betreibe ich auf diesem Host 3 virtuelle Maschinen mit jeweils 2 virtuellen CPUs. Um die Leistung durch aktive Caches zu verbessern, möchte ich die virtuellen Kerne der VMs an feste Hostkerne binden.

Die Frage ist nun die Zuordnung von VM-Kernen zu Host-Kernen unter Berücksichtigung der Tatsache, dass die Host-CPU Hyperthreading verwendet:

Option 1: Eine VM pro physischem Hostkern

VM1: logical cores 1, 5
VM2: logical cores 2, 6
VM3: logical cores 3, 7

Auf diese Weise würden die beiden virtuellen Kerne einer VM auf gleichgeordnete Hyperthreads auf der Host-CPU abgebildet. Gastcode würde von der Cache-Lokalität profitieren, da die beiden Host-Kerne einige Caches gemeinsam nutzen.

Da sich zwei Hyperthreads aber auch einige Funktionseinheiten teilen, würden sie sich bei hoher Rechenlast gegenseitig ausbremsen.

Option 2: Verteilte VM-Kerne

VM1: logical cores 1, 2
VM2: logical cores 3, 5
VM3: logical cores 6, 7

Diese Zuordnung hat den Vorteil, dass, wenn eine VM auf beiden ihrer beiden virtuellen Kerne Rechenlast erfährt, diese Last auf zwei separate physische Kerne auf dem Host abgebildet wird. Wenn zu diesem Zeitpunkt keine andere VM ausgelastet ist, könnte die VM zwei physische Kerne verwenden, statt nur einen wie bei Option 1.

Auf den VMs laufen hauptsächlich Webdienste (Nginx, MySQL, PHP-FPM), daher ist mir klar, dass die Frage eher theoretischer Natur ist – aber ich würde es trotzdem gerne wissen.

Antwort1

Möglicherweise denken Sie zu viel darüber nach.

Die manuelle Zuweisung von Kernen könnte hier tatsächlich zu einer geringeren Leistung führen. In der VMware-Welt tun wir dies nicht, es sei denn, es gibt sehr spezielle Anforderungen, aber für die von Ihnen beschriebene Arbeitslast und die Anwendungen ist dies nicht erforderlich. Lassen Sie KVM die Dinge planen und erledigen. Wenn Sie Zweifel haben, besorgen Sie sich mehr Kerne und Sockel. Aber die CPU wird bei einer so kleinen Bereitstellung nicht der begrenzende Faktor sein.

Antwort2

Option 1 sollte in den meisten Fällen nicht langsamer werden, aber das Betriebssystem und die Programme könnten ihre Arbeitslasten überlasten. Es könnte sich häufen. Ich denke, Option 2 ist besser, wenn Ihr Nachbar die ~winzige~ Verlangsamung nicht stört.

verwandte Informationen