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:
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.
quelle
Antworten:
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
Ergebnisse
WinRAR
4 Adern => 7,5 Minuten ( kürzere Zeit ist besser)
WinRAR mit 4 Kernen aktiviert, 1,5 GB in 7,5 Minuten verarbeitet.
8 Kerne => 4,5 Minuten ( kürzere Zeit ist besser)
WinRAR mit 8 Kernen aktiviert, 1,5 GB in 4,5 Minuten verarbeitet.
VeraCrypt
4 Kerne => Geschwindigkeit 2,6 GiB / s ( höhere Geschwindigkeit ist besser)
VeraCrypt mit 4 Kernen, HW-beschleunigter AES- Geschwindigkeit (AES-NI) von 2,6 GiB / s.
8 Kerne => Geschwindigkeit 3,9 GiB / s ( höhere Geschwindigkeit ist besser)
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.
quelle
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.
quelle
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:
Für mehr als zwei Threads verwende ich diese Formel:
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.
quelle