VirtualBox: Ist es eine schlechte Idee, mehr virtuelle CPU-Kerne als die Anzahl der physischen CPU-Kerne zuzuweisen?

40

Da ich über eine Hyper-Threading- fähige CPU verfüge , frage ich mich, ob es eine schlechte Idee ist, mehr virtuelle CPU-Kerne als die Anzahl der physischen CPU-Kerne zuzuweisen, wie die folgende Warnung nahelegt:

VirtualBox-Warnung

Transkript:

Der virtuellen Maschine werden mehr virtuelle CPUs zugewiesen als die Anzahl der physischen CPUs auf dem Hostsystem. Dies kann die Leistung Ihrer virtuellen Maschine beeinträchtigen. Bitte reduzieren Sie die Anzahl der virtuellen CPUs.

Kann jemand eine Begründung zu diesem Thema setzen?

EDIT1:

Bei der fraglichen CPU handelt es sich um Intel Core i7-4700HQ, Ark Intel , CPU Benchmark

EDIT2:

Angenommen, es gibt keine veraltete Hardware wie Festplatte (anstelle einer SSD) und / oder wenig RAM (hier mindestens 16 GB vm.swappiness, 4 GB für diese VM) und so weiter.

LinuxSecurityFreak
quelle
2
Die Warnung ist ziemlich genau und sollte nicht ignoriert werden, es sei denn, die Echtzeitleistung ist unwichtig oder die virtuelle Maschine wird nur minimal (durch Software) belastet. Siehe Was sind logische CPU-Kerne (im Gegensatz zu physischen CPU-Kernen)?
agc
Wie der Krieg sagt. Mit weniger CPUs in der VM könnte es tatsächlich schneller gehen.
Rui F Ribeiro
Du solltest niemals in die rote Linie gehen. Es ist in Ordnung, 4 "Kerne" auf einer 4 tatsächlichen HT-fähigen Kerne-CPU zu verwenden. Für RAM sollten 50% Ihres RAM ausreichen, auch wenn der grüne Teil darüber hinausgeht.
Cylgalad
In Virtualbox sind "Kerne" alle Threads. Wenn Sie also eine CPU mit 4 Kernen und Hyperthreading haben, entspricht dies 8 "Kernen", sodass Sie tatsächlich bis zu 4 virtuelle Kerne in einer VM einrichten können, wenn Sie diese alleine ausführen. das ist was ich die ganze Zeit mache und es funktioniert großartig.
Cylgalad
Was muss ich beweisen? Die rote Linie ist für mehr als 4 "Kerne", ich gehe nie darüber hinaus und ich führe nie 2 VMs gleichzeitig aus. Wenn Sie das Risiko eines Absturzes Ihres PCs bevorzugen, indem Sie die gesamte CPU an die VM übergeben, und Sie nichts außerhalb der VM tun, ist dies möglicherweise in Ordnung.
Cylgalad

Antworten:

30

Hardware / Betriebssystem / Software

Host : Linux Mint 18 Cinnamon 64-Bit (vollständig aktualisiert); Kernel-Version 4.4.0-47-generisch

Gast : Windows 8.1 Pro 64-Bit (vollständig aktualisiert)

Prozessor : Intel Core i7-4700HQ (6 MB Cache, 4 physische Kerne oder 8 mit Hyper-Threading), CPU-Benchmark

VirtualBox : Version 5.1.10 r112026 (Qt5.5.1)

Guest Additions : Installiert und aktuell

Benchmark-Tool Nr. 1 : WinRAR Version 5.40 final 64-Bit

Benchmark-Tool Nr. 2 : VeraCrypt Version 1.19 final 64-Bit


Vorbereitung

In beiden Fällen habe ich nach dem Booten gewartet, bis die CPU, der Arbeitsspeicher und das Festplattenlaufwerk in der Nähe der Nullpunkttreffer stabil sind.


Methode

  1. Klonen der ursprünglichen virtuellen Maschine, um zwei identische zu erhalten.
  2. Ich habe, für den zweiten Durchgang, seit dem Neustart Antivirus deaktiviert, am Ende dieser Antwort darauf hingewiesen und WinRAR in beiden Fällen von einer Beta auf die Endversion aktualisiert.
  3. Ich habe die gleichen Vorbereitungen getroffen, auf die ich bereits hingewiesen habe.
  4. Die virtuelle Maschine lief im Vordergrund, ohne dass irgendeine andere CPU-Zeit-hungrige Anwendung lief, habe ich deaktiviert, was ich konnte, um den Test nicht zu beeinflussen.
  5. Um potenzielles Caching innerhalb oder außerhalb des Systems zu berücksichtigen, habe ich denselben Test zweimal ausgeführt. Der Vorteil ist fast keiner.

Ergebnisse

WinRAR

  1. 4 Adern => 7,5 Minuten ( kürzere Zeit ist besser)

    WinRAR mit 4 Kernen aktiviert

    WinRAR mit 4 Kernen aktiviert, 1,5 GB in 7,5 Minuten verarbeitet.

  2. 8 Kerne => 4,5 Minuten ( kürzere Zeit ist besser)

    WinRAR mit 8 Kernen aktiviert

    WinRAR mit 8 Kernen aktiviert, 1,5 GB in 4,5 Minuten verarbeitet.


VeraCrypt

  1. 4 Kerne => Geschwindigkeit 2,6 GiB / s ( höhere Geschwindigkeit ist besser)

    VeraCrypt mit 4 aktivierten Kernen

    VeraCrypt mit 4 Kernen, HW-beschleunigter AES- Geschwindigkeit (AES-NI) von 2,6 GiB / s.

  2. 8 Kerne => Geschwindigkeit 3,9 GiB / s ( höhere Geschwindigkeit ist besser)

    VeraCrypt mit 8 aktivierten Kernen

    VeraCrypt mit 8 aktivierten Kernen und einer Geschwindigkeit von 3,9 GiB / s für AES (AES-NI) mit HW-Beschleunigung .


Fazit

Ich konnte so viele Tests wie nötig durchführen. Aber ich denke, wenn diese beiden, von denen einer ein ziemlich komplexer Komprimierungstest ist, der zweite eine Reihe von ziemlich komplexen Verschlüsselungstests ist, was wäre der Sinn.

Beide Benchmarks zeigen einen deutlichen Unterschied. Ich sehe keinen Grund zu der Annahme, dass ihre Ergebnisse ungenau sind, da ich einer ziemlich strengen Vorbereitung und Methode gefolgt bin. Außerdem wurden diese Tests im RAM durchgeführt, um einen E / A-Engpass auszuschließen. Aus meiner Sicht kann die in der Frage erwähnte Warnung auf einige Bedingungen zutreffen, aber sicherlich nicht auf alle. Nachdem Sie diese bemerkenswerten Ergebnisse mit uns geteilt haben, können Sie mir sicher zustimmen, dass diese Warnung bei modernen CPUs mit Hyper-Threading und der neuesten VirtualBox-Version wahrscheinlich nicht so ernst genommen werden sollte . Eins ist sicher: Nimm mich nicht für das Wort und teste es unter deinen eigenen Bedingungen, bevor du dich entscheidest, diese Einstellung dauerhaft anzuwenden.

LinuxSecurityFreak
quelle
Haben Sie es auf derselben VM mit geänderten Kernen oder auf zwei verschiedenen (aber identischen) VMs ausgeführt? Wenn es sich um dieselbe VM handelt, haben Sie danach in der anderen Reihenfolge erneut versucht, einen möglichen Einfluss der Caching-Algorithmen des Gastbetriebssystems auszuschließen?
Wildcard
Versuchen Sie, zum Spaß einen tatsächlichen CPU-Brenntest durchzuführen.
Cylgalad
So etwas wie prime95 für mindestens eine Stunde. Und versuchen Sie gleichzeitig, auf dem Host im Internet zu surfen. Wie gesagt, es ist in Ordnung, wenn Sie auf dem Host nichts tun oder nicht mehr als eine VM gleichzeitig ausführen. Wenn es so schlimm wäre, wäre das Limit in Virtualbox anstelle einer Warnung durchgesetzt worden.
Cylgalad
Eine andere Sache, die Sie versuchen können, aber es kann schwieriger sein. Installieren Sie ein Gentoo oder Linux von Scratch VM und überprüfen Sie, wie es bei der intensiven Kompilierung läuft. Oder versuchen Sie, Chromium in einer VM zu erstellen.
Cylgalad
@ Vlastimil völlig einverstanden. In meinem Fall verwende ich VM für die C ++ - Kompilierung (was eine CPU-gebundene Aufgabe ist) und der einzige Grund, warum ich eine 16-Core-CPU habe, war die Möglichkeit, schneller zu kompilieren. Diese Warnung ist völliger Unsinn ohne richtige Erklärung und führt zu falschen Schlussfolgerungen wie "Mit weniger CPUs in der VM könnte es tatsächlich schneller gehen"
Pavel P
16

Als OS-Designer stimme ich dem Ergebnis der Messungen voll und ganz zu. Die Menge an Blödsinn, die an anderer Stelle über das Thema produziert wird, ist unglaublich.

Sehen Sie die Anzahl der logischen Kerne als die Anzahl der parallelen Threads / Prozesse, die von der HW ausgeführt werden können. Dies wird erreicht, indem zB die Register und Befehlszeiger eines CPU-Kerns dupliziert werden. Der CPU-Kern entscheidet nun selbst, welcher Thread (Anweisungszeiger) verwendet werden soll. Es wird entschieden, den anderen Thread zu verwenden, da der Befehl des aktuellen Threads nicht im Cache verfügbar ist und beispielsweise aus dem Speicher oder dem L3-Cache abgerufen werden muss. Dieser Mechanismus führt zu einer potenziellen Verbesserung der Anweisungen / Sekunde oder der CPU-Leistung um 10 bis 30%.

Wenn Sie eine einzelne Anwendung mit einem Thread ausführen, können Sie diesen Vorteil nicht nutzen. Wenn Sie jedoch zwei Anwendungen mit hoher Auslastung ausführen, z. B. auf einem alten HT-Pentium, können Sie die Vorteile nutzen. Gleiches gilt natürlich auch für Anwendungen, die mehr als einen Thread haben. Mein Linux-System hat 200 Threads, daher sind einige Vorteile, die von der tatsächlichen Last abhängen, immer vorhanden. Alle diese Bemerkungen gelten ohne Virtualisierung.

Virtualbox begrenzt nur die Anzahl der Threads, die für jede virtuelle Maschine (VM) parallel ausgeführt werden können. Der Host-Prozess-Scheduler ändert jedoch die logischen Prozessoren und damit die physischen Prozessoren, auf denen die VM-Prozesse dynamisch ausgeführt werden. Wenn Sie Anwendungen mit hoher Auslastung auf einer VM ausführen, bieten die zusätzlichen logischen Kerne den gleichen Vorteil von 10% -30%. Die Last kann eine einzelne Multithread-Anwendung oder eine Reihe verschiedener Anwendungen sein.

Auf modernen Systemen mit VT-x oder AMD-V gibt es keine Leistungseinbußen bei der Maximierung der Anzahl der logischen Kerne, da auch keine spürbaren Leistungseinbußen bei der gleichzeitigen Ausführung mehrerer virtueller Maschinen auftreten. Ihre Grenze ist die Leistung Ihres CPU-Chips. Sie können also nicht Videos auf 3 VMs gleichzeitig rendern, ohne jede VM zu verlangsamen, da diese dieselbe physische CPU teilen müssen.

Ihr Host-System reagiert möglicherweise nicht mehr, wenn Sie ein Video auf einer VM mit allen vorhandenen logischen Kernen rendern. Wenn Sie diese Rendering-App jedoch auf Ihrem Host ausführen, tritt fast dasselbe Problem auf. Zumindest in VM haben Sie die Wahl und können es lösen, indem Sie die maximale CPU-Auslastung auf 80% -90% begrenzen oder die Anzahl der Kerne aus diesem Grund reduzieren.

Bert Nijhof
quelle
0

Meine besten zwei Cent sind, niemals alle Kerne / Threads zu verwenden, sondern nur einen oder zwei für den Host.

Geben Sie in Ihrem Fall dem Gast einen Kern mit sechs Kernen, niemals einen achten Kern (weil Sie nur 8 Threads auf dem Host haben).

Wenn die Anzahl der verfügbaren Threads (nicht zu verwechseln mit Kernen) auf dem Host ist:

  • Wenn <2, sollten Sie keine virtuellen Maschinen verwenden
  • Wenn 2, verwenden Sie virtuelle Maschinen im Mono-Core-Modus oder gehen Sie ein Risiko ein und verwenden Sie Dual-Core-Gastsysteme
  • Wenn> 2, verwenden Sie besser eine Formel

Für mehr als zwei Threads verwende ich diese Formel:

  • N = Anzahl der Threads für den Host
  • M = Anzahl gleichzeitiger virtueller Maschinen, die ich ausführen möchte (unter der Annahme eines ausgeglichenen Gleichgewichts, gleiche Anzahl von Gastkernen für jeden Gast)
  • Formel = (N-1) / M, wenn der Host nur 4 Threads oder weniger hat
  • Formel = (N-2) / M, wenn der Host mehr als 4 Threads hat

Meine Erfahrung sagt mir, dass es viel reibungsloser und weniger riskant ist, ein solches Formellimit nicht zu überschreiten.

Warnung: Es ist nicht zulässig, die Anzahl der Gast-Cores zu ändern, während der Gast ausgeführt wird. Es ist jedoch zulässig, die CPU-Auslastung von 100% auf 75% oder auch 50% zu senken. Möglicherweise schlägt nicht weniger Gast fehl.

Manchmal neige ich dazu, zwei Gästen 6 sechs Kerne auf einem 8-Thread-Host zu geben (die Nummer der Formel als ob nur ein Gast statt zwei Gäste), aber sie auf 50% der CPU-Geschwindigkeit zu begrenzen (so können beide Gäste 1 verwenden / 2 der Zeit die CPU), aber nur, wenn ich weiß, dass Gäste Apps ausführen, die ein Verhältnis von mehr als 1 parallel haben, wie bei Bildvergleich / Joint usw.

Laura
quelle
1
Sie selbst hatten diese Formeln gemacht? Oder können Sie Zitate hinzufügen?
LinuxSecurityFreak