Gibt es eine optimale Einstellung für die Anzahl der CPU-Kerne, die einer VM ausgesetzt sind?

23

Mit VirtualBox und möglicherweise anderer VM-Software kann der Benutzer die Anzahl der CPUs angeben, die für die VM verfügbar sind. In meinem speziellen Fall habe ich eine Dual-Core-CPU mit 64-Bit-Version von Windows 7 und 64-Bit-Version von Ubuntu 9.04 als VM.

In der Hilfedatei wird vorgeschlagen, dies nicht über die Anzahl der verfügbaren physischen Kerne zu setzen. Das macht Sinn. Weisen Sie am besten 1 oder 2 CPU-Kerne zu? Kommt es ganz auf die native CPU-Auslastung an?

sblair
quelle

Antworten:

6

Es hängt ganz davon ab, was das Gastbetriebssystem tut. Nach meiner persönlichen Erfahrung führt eine VM ein einzelnes Programm aus (Build-Server, Trac-Server, SVN usw.), sodass es keinen Grund gibt, ein höheres Programm festzulegen.

Ein möglicher Fall kann sein, wenn es sich um einen Endbenutzer an einer Universität handelt, der das Gastbetriebssystem als Wegwerfprodukt (z. B. TAs) verwendet, und es dann möglicherweise auf einen höheren Wert als eins setzt.

Nate
quelle
Mit anderen Worten: Für ein temporäres System können Sie das CPU-Kernkontingent ebenso gut ausschöpfen. aber für "normale" oder typische Verwendung auf einen Kern setzen (um die Leistung des Host-Betriebssystems nicht zu stark zu beeinträchtigen)?
Sblair
18

Die Informationen in dieser Antwort sind nicht mehr korrekt . Es war in den Tagen der strengen Co-Planung korrekt, ist aber nicht mehr der Fall.

Ich behalte die unten stehende Antwort aus Gründen des Wohlstands, aber bitte verlassen Sie sich nicht darauf, dass sie für moderne Hypervisoren korrekt ist.


Sie sollten niemals alle Ihre Kerne als vCPUs in einer virtuellen Maschine zuweisen.

Wenn ein VM anfordert jede CPU - Zeit, VMWare hat entweder zuzuteilen all das vCPUs oder keines des vCPUs.

Dies bedeutet, dass auf einem 4-Core-System, wenn Sie alle 4 Cores zuweisen, nur dem Host oder dem Gast Prozessorzeit zugewiesen werden kann, nicht beiden gleichzeitig.

Dies wird die Leistung in beiden Umgebungen absolut beeinträchtigen.

Sie können beliebig viele Kerne zuweisen (z. B. 3). Es fühlt sich seltsam an, aber es ist eine absolut legitime Option.

Im Allgemeinen reserviere ich nie mehr als (n / 2) vCPUs (in Ihrem Fall 2) - aber normalerweise reserviere ich Kerne auf Servern mit 12 bis 32 Kernen, auf denen Sie eine große Anzahl von vCPUs ohne größere Auswirkungen zuweisen können.

Mark Henderson
quelle
Dies ist die einzige Antwort, die bisher mit einem gewissen Grad an Autorität geschrieben wurde. Vielen Dank für den Austausch Ihrer Erfahrungen.
G-Wiz,
5
-1: Entspricht nicht meiner Erfahrung. Die VM ist ein Prozess, dessen CPU-Zeit auf dieselbe Weise wie jeder andere Prozess auf dem Host geplant werden kann. Sie können die Priorität der VM-Prozesse auf dem Host anpassen, und das System verteilt die Lasten entsprechend.
bwDraco
2
( Fortsetzung ) Angenommen, Sie haben einen 16-Core-Server. Eine Beispielkonfiguration wären 4 VMs, die jeweils für 8 Kerne konfiguriert sind. Dies scheint zwar zu viele virtuelle Kerne zu sein, ermöglicht es jedoch, dass einzelne VMs bei höheren Auslastungen besser skaliert werden können. Sollte die kombinierte Auslastung die Anzahl der physischen Kerne überschreiten, verteilt der Host die Lasten entsprechend. So kann Virtualisierung den Durchsatz steigern und die Kosten senken - indem die Host-Hardware optimal genutzt wird.
bwDraco
@DragonLord - Diese Antwort auf eine Frage, die fast 4 Jahre alt ist, ist älter als 2 Jahre und basiert möglicherweise auf veralteten Informationen. Ich beziehe mich auf "Strict Co-Scheduling" von ESX, kann mich aber nicht erinnern, wie alt diese Informationen sind, und ich bin nicht auf dem neuesten Stand, wie sich die CPU-Planung in den letzten Jahren geändert hat.
Mark Henderson
1
Ich wollte hier nur einen Hinweis hinterlassen, dass es sowohl auf Ubuntu 14.04 als auch auf Ubuntu 16.04 zu Bootproblemen und Abstürzen kommt, wenn Sie die Anzahl der CPUs auf eine ungerade Zahl einstellen. Ich konnte nicht herausfinden, warum, weil ich mich einfach dazu entschlossen habe, es bei geraden Zahlen zu halten, um die Probleme zu vermeiden.
Dorian
3

Die Anzahl der Kerne, die Gast-CPUs ausgesetzt sind, wirkt sich nicht so stark auf die Leistung aus, wie Sie möchten. Es wird lediglich die Anzahl der Kerne angepasst, die die Gast-CPU "sieht".

Je nachdem, wie der Emulator eingerichtet ist, kann er die Leistung der virtuellen Maschine buchstäblich halbieren, nichts tun oder sich nur auf die Art und Weise auswirken, wie das Gastbetriebssystem / die Gastanwendungen ihre Thread-Planung aufteilen.

Es ist am besten, die Standardeinstellung beizubehalten. Wenn auf dem Host-PC Leistungsprobleme auftreten, können Sie die Prozesspriorität einfach mit dem Windows Task-Manager anpassen.

Durchbruch
quelle
3

Wie Nate bereits erwähnt hat, gibt es wenig Grund, mehr als einen Kern zuzuweisen, solange Ihre VM hauptsächlich einen Single-Thread-Prozess ausführt.

Wenn Sie jedoch vorhaben, es auf eine Weise zu verwenden, die von mehr Kernen profitieren kann (Multithread-Programm, viele parallele Programme usw.), ist die Geschichte komplizierter. Ich war zuvor der Meinung, dass die Hälfte Ihrer CPUs für Ihre VM eine gute Idee ist. Es stellt sich heraus, dass dies nicht immer optimal ist.

Die einzige Möglichkeit, dies sicherzustellen, ist das Ausführen von Benchmarks. Ich weiß nicht warum, aber in meinem Core2 Quad-System (das VT-x-Unterstützung, verschachteltes Paging usw. bietet) ist die Verwendung von 1 der 4 Kerne tatsächlich besser als mit 2 oder mehr Kernen! Ich sehe das einfach in den Startzeiten der VM, aber auch bei Kompilierungsbenchmarks.

Bei anderer Hardware sind die Ergebnisse anders. Ich habe auch einen i7 mit 8 Kernen, und die Leistung scheint viel besser mit der Anzahl der Kerne dort zu skalieren (mit 4 dort glücklich).

Mein Tipp: Zuerst eine neue Hardware testen.

Arnout
quelle
1

Ich würde dem Scheduler des Betriebssystems vertrauen und die VM einfach auf die Anzahl der physischen Kerne einstellen, sofern Sie nicht wissen, dass der Host immer einen potenziell inaktiven Kern haben soll, während Sie in der VM beschäftigt sind.

Andrew Coleson
quelle
1

Dies hängt davon ab, was Sie sowohl auf der virtuellen als auch auf der physischen Maschine tun möchten. Wenn Sie die virtuelle Maschine verwenden müssen, während das Host-Betriebssystem für eine andere Aktivität verwendet wird, ist es möglicherweise besser, zwei Prozessorkerne für die VM zu verwenden, sodass auf dem Host zwei übrig sind, wenn die VM voll ausgelastet ist. Wenn Sie dagegen hauptsächlich an der VM arbeiten, können Sie alle Prozessorkerne verwenden.

Sofern nicht erwartet wird, dass der Gast alle vier Kerne gleichzeitig verwendet, können Sie alle ohne Bedenken verwenden, während Sie auf dem Host-Betriebssystem weiterarbeiten. Denken Sie daran, dass Sie die Priorität des VM-Prozesses jederzeit anpassen können, während er auf dem Host-Betriebssystem ausgeführt wird, und das System die Lasten entsprechend verteilt.

bwDraco
quelle
Dies basiert auf meinen Erfahrungen mit VirtualBox. Da ich mit VMware-Produkten nicht vertraut bin, kann ich mich irren. Wenn ja, werde ich diese Antwort löschen.
bwDraco
0

ja, ich würde auch sagen, dass es darauf ankommt. Aber ich sage, was ich lieber mache. Bei der Arbeit habe ich eine Quad-Core-CPU. Daher habe ich für mein virtuelles Image (win7) zwei CPUs zugewiesen. Auf diese Weise kann ich sowohl die Hostmaschine als auch die virtuelle Maschine gleichzeitig verwenden, und sie verfügen jeweils über die gleichen CPU-Ressourcen.

Joel Martinez
quelle