KVM und Zuordnung von virtueller zu physischer CPU

10

Ich komme relativ spät zur Virtualistion-Party, also musst du mir vergeben, wenn dies eine offensichtliche Frage ist.

Wenn ich einen Server mit 12 Kernen zur Verfügung habe, hat jeder KVM-Gast Zugriff auf alle 12 Kerne? Ich verstehe, dass KVM den Linux-Scheduler verwendet, aber hier endet mein Verständnis von "Was passiert als nächstes?".

Mein Grund für die Frage ist, dass die ungefähr 10 verschiedenen Aufgaben, die wir in KVM-Gästen ausführen möchten (zum Zwecke der Isolation, um Upgrades zu erleichtern), nicht 100% der Zeit einen einzelnen Kern verwenden. Auf dieser Basis erscheint dies verschwenderisch Sie müssen jedem Gast 1 virtuelle CPU zuweisen - wir haben von Anfang an keine Kerne mehr und einen "vollen", inaktiven Server, der angezeigt wird.

Anders ausgedrückt: Unter der Annahme meiner obigen Beschreibung entspricht 1 virtuelle CPU tatsächlich 12 physischen Kernen in Bezug auf die Verarbeitungsleistung? Oder funktioniert das nicht so?

Danke vielmals

Steve

Steve
quelle

Antworten:

8

Eine virtuelle CPU entspricht einem physischen Kern. Wenn Ihre VM jedoch versucht, etwas zu verarbeiten, kann sie möglicherweise auf einem der Kerne ausgeführt werden, die gerade verfügbar sind. Der Scheduler übernimmt dies, und die VM ist sich dessen nicht bewusst. Sie können einer VM mehrere vCPUs zuweisen, sodass sie gleichzeitig auf mehreren Kernen ausgeführt werden kann.

Die Kerne werden nach Bedarf von allen VMs gemeinsam genutzt, sodass Sie ein 4-Kern-System und 10 VMs mit jeweils 2 zugewiesenen vCPUs ausführen können. VMs teilen alle Kerne in Ihrem System sehr effizient, wie vom Scheduler festgelegt. Dies ist einer der Hauptvorteile der Virtualisierung - die Nutzung unterzeichneter Ressourcen zur Stromversorgung mehrerer Betriebssysteminstanzen.

Wenn Ihre VMs so beschäftigt sind, dass sie um die CPU-Zeit kämpfen müssen, müssen die VMs möglicherweise auf die CPU-Zeit warten. Dies ist wiederum für die VM transparent und wird vom Scheduler verarbeitet.

Ich bin mit KVM nicht vertraut, aber all das ist generisches Verhalten für die meisten Virtualisierungssysteme.

Chris Thorpe
quelle
Warnung: Machen Sie Ihre Recherchen, bevor Sie blind Tonnen von vCpus zuweisen. Sie könnten sich überzeichnen, was zu einer Blockierung der CPU führt.
Pause
Oh ja. Ich habe das nicht aufgenommen, weil ich nicht sicher war, ob es für KVM zutrifft. Wenn Sie 4 vCPUs zuweisen, musste der Scheduler warten, bis 4 Kerne frei waren, bevor einer VM CPU-Zeit eingeräumt wurde, selbst wenn sie nur einen Kern für den aktuellen Vorgang benötigt.
Chris Thorpe
Ich wäre überrascht, wenn KVM keinen Overhead verursacht, wenn Sie jeder VM viel vCpus zuweisen. Aber hey, ich bin ein VMware-Typ :-)
Pause
3

Eine virtuelle CPU ist ein Thread im qemu-kvm-Prozess. qemu-kvm ist natürlich multithreaded.
Wenn Sie Prozesse nicht an bestimmte CPUs anheften, weist der Systemplaner die Thread-CPU-Zeit von den verfügbaren Kernen zu. Dies bedeutet, dass jede vCPU CPU-Zyklen von jedem physischen Kern erhalten kann, sofern sie nicht speziell an bestimmte Kerne angeheftet ist.

dyasny
quelle
Vielen Dank, eine Frage: Bringt es Leistungsvorteile, wenn wir einem CPU-Kern eine vCPU zuweisen?
Zim3r
Wenn Sie Lasten speziell manuell verteilen, werden Sie die Ressourcen wahrscheinlich nicht ausreichend nutzen. Wenn Sie dies jedoch richtig machen, kann dies zur Leistungssteigerung beitragen. Vor allem, wenn Sie auch das Feststecken nach numa Knoten machen
dyasny
0

Ich empfehle zu überprüfen, welche vCPU Ihrer VM zuweisen, die Ihnen die beste Leistung bietet. Passen Sie auch Ihre Arbeitslast an, dh CPU-gebunden oder E / A-gebunden, dann stehen zahlreiche kostenlose Benchmarking-Tools zur Verfügung, mit denen Sie Ihre Leistung überprüfen können, z. B. Apache Bechmark für E / A-gebundenen Betrieb und John the Ripper für CPU-gebundenen Betrieb. Sobald Sie festgelegt haben, welche vCPU-Zuweisung Ihre VM am besten bietet, können Sie andere VMs verteilen oder konfigurieren. Weil es negative Auswirkungen auf die Leistung gibt, haben wir uns nicht um vCPU gekümmert.

Wenn Sie beispielsweise einen Host mit 4 Kernen haben und eine VM ausführen und ihr eine vCPU zuweisen möchten, ist die Leistung am niedrigsten, da nur ein Kern der 4 Kerne verwendet wird und der Rest 3 Kerne nicht gleichzeitig nutzen. Da der Virtual Machine Monitor (VMM) oder Hypervisor die interne Last der VM nicht kennt. Sie erhalten den maximalen Durchsatz, wenn Sie 4 VCPU zuweisen. In diesem Fall wird der gesamte Kern des Hosts gleichzeitig verwendet, wenn Ihre Workload über mehrere Threads verfügt. Wenn Sie einen Kern weiter erhöhen, dh mehr als 4 vCPUs zuweisen, können Sie eine Leistungsverschlechterung feststellen. Es ist nur gut, wenn Sie mehr virtuelle VM haben und Sie sich Sorgen machen, wenn eine der VMs auf einen anderen Server migriert oder ausgeschaltet wird, dann wird immer noch der gesamte Kern verwendet, andernfalls wird es verschwendet, wenn nicht die Gesamtzuordnung konfiguriert wird.

Hafiz ur Rahman
quelle