Kann kvm guest mehr CPUs erhalten, als er hat?

2065
Zhen

Wenn ich eine VM mit einer einzelnen virtuellen CPU in KVM betreibe, kann es sein, dass die VM tatsächlich mehr CPU-Zyklen als eine ganze CPU hat, wenn keine andere VM im Host läuft? Mit anderen Worten, kann die VM mehr CPUs bekommen, als sie hat? Ich verwende keine CPU-Bandbreite für meine VM.

Da der Linux-Scheduler (CFS) sparsam arbeitet, sollte er, wenn ich ihn richtig verstehe, immer beschäftigt sein, wenn etwas zu tun ist. In diesem Fall einige Threads in meiner vm.

Wenn in der VM tatsächlich mehrere CPUs vorhanden sind, wie wird die CPU-Auslastung von VM gemeldet? > 100% oder einfach 100%. Wie ist die Anzahl der CPUs in der / proc / cpuinfo der virtuellen Maschine?

Ich denke, es ist eine interessante Frage oder vielleicht eine dumme Frage. Wenn ich keine Antwort bekomme, plane ich einige Experimente.

Danke im Voraus. Zhen

2
Mach die Experimente. Ich habe den Verdacht, dass eine einzelne CPU einen einzelnen Thread bekommt und dass sie niemals schneller sein wird als ein einzelner Core auf Ihrer echten CPU. Wenn Sie über 2 "echte Hardware" und 1 "Core" verfügen, würde die vm bis zu 50% (1/2) Ihrer tatsächlichen CPU-Leistung beanspruchen. Mit 2 Kernen bis zu 100%. Mit drei virtuellen Kernen bis zu 100% (gut ist mehr nicht möglich), wobei die virtuellen Kerne schlechter abschneiden. (Zur Vereinfachung: bis zu 2/3 der Geschwindigkeit, in der Praxis jedoch etwas weniger durch zusätzlichen Aufwand) Hennes vor 12 Jahren 0

1 Antwort auf die Frage

1
Zhen

Getestet zeigt das Ergebnis, dass der Gast NICHT mehr CPU-Prozessor als erforderlich beansprucht, selbst wenn der Linux-Scheduler arbeitsschonend ist.

Ich habe einige einfache Experimente mit einem Mikro-Benchmark durchgeführt, der im Grunde die CPU dreht. Der Host ist ein Dual-Core-Computer, auf dem KVM mit einem einzigen Gast-VM ausgeführt wird.

Ich führe mehrere Gastanwendungen gleichzeitig in der Gast-VM aus, um zu sehen, ob sie mehr CPU-Kapazität beanspruchen kann, als sie verdient. Das Ergebnis ist wie folgt:

  • Wenn die virtuelle Maschine mit einer virtuellen CPU konfiguriert ist, meldet sar ~ 100% CPU-Auslastung in der virtuellen Maschine und ~ 50% im Host. Der oberste Befehl im Host zeigt 2 KVM-Threads.

  • Wenn die VM mit 2 virtuellen CPUs konfiguriert ist, meldet sar ~ 100% CPU-Auslastung in VM und ~ 100% im Host. Der oberste Befehl im Host zeigt 3 KVM-Threads.

So meine Theorie ist, dass KVM einen einzigen Thread für jede virtuelle CPU zuweisen wird, und ein extra Thread für einige Management - Aktivität verwendet. Die VM mit einer einzelnen virtuellen CPU kann daher nicht in mehreren CPUs des Hosts gleichzeitig bedient werden.

Es stellt sich eine dumme Frage heraus :)