Gibt es echte Vorteile, wenn Sie VirtualBox mehr „Kerne“ zuweisen?


40

Ich habe einen 2.8 Quad Core i7 mit einer VirtualBox. Ich habe die Option, einem Gastcomputer bis zu 4 Kerne zuzuweisen, aber ich habe nur zwei Kerne erstellt. Was sind die Vor- / Nachteile, wenn einem Gast mehr Kerne zugewiesen werden? Übrigens, ich kann StarCraft 2 immer noch in Ultra-Einstellungen spielen, während zwei Gastbetriebssysteme (Win 7 und Ubuntu) ausgeführt werden, und das Gleiche gilt für BFBC2 (meine Stresstester). Wie reagiert der i7 auf ungleiche Belastungen über Kerne hinweg?

Antworten:


62

Die "virtuellen" Kerne, die Sie einer VM zuweisen, können im Client-Betriebssystem für die Mehrfachverarbeitung verwendet werden. Wenn Sie einer VM nur einen Kern zuweisen, hat das Gastbetriebssystem keine Möglichkeit, die Last auf mehrere Kerne zu verteilen. Nehmen wir also einige praktische Szenarien an:

Host mit 4 CPUs, Gast zugewiesen 1 CPU

  • Host-Computer mit 4 physischen Kernen
  • Dem Client-Betriebssystem innerhalb der VM wurde 1 Kern zugewiesen

In diesem Fall kann das Gastbetriebssystem nur einen Kern verwenden. Wenn Sie eine Multithread-Anwendung ausführen, die sich gut auf mehrere Kerne skalieren lässt, wird sie dennoch nur auf einem Kern ausgeführt. Daher müssen alle Threads auf dem Gastbetriebssystem einen physischen Kern gemeinsam nutzen.

Wenn Sie in diesem Setup ein Gastbetriebssystem ausführen, das die CPU vollständig lädt, ergibt sich eine CPU-Auslastung des Host-Betriebssystems von ~ 25% (einer von 4 auf dem Host geladenen Kernen).

Natürlich können Sie weiterhin CPU-belastende Aufgaben in Ihrem Host-Betriebssystem ausführen und die verbleibenden 3 Kerne verwenden.

Host mit 4 CPUs, Gast zugewiesen 4 CPUs

  • Host-Computer mit 4 physischen Kernen
  • Dem Client-Betriebssystem innerhalb der VM wurden 4 Kerne zugewiesen

In diesem Fall können Sie gut skalierende Multithread-Anwendungen in der Gast-VM ausführen, die alle 4 virtuellen CPUs voll ausnutzen können. VirtualBox verwendet 4 physische Kerne, um Aufgaben zu verarbeiten, die innerhalb der VM geplant sind, und daher kann Ihre Host-CPU-Auslastung eine maximale Auslastung von 100% erreichen.

Also, welche Einstellung sollten Sie wählen?

Die Antwort auf diese Frage hängt ziemlich davon ab, was Sie tun möchten. In einigen Fällen kann es hilfreich sein, alle Kerne einer VM zuzuweisen oder sogar mehrere VMs auszuführen, denen jeweils die volle Anzahl von CPUs zugewiesen ist. In solchen Fällen kann eine VM die gesamte Verarbeitungsleistung des Hosts voll ausnutzen. Wenn VMs mehr CPUs zugewiesen werden als tatsächlich vorhanden sind, werden die VMs durch die Last auf verschiedenen VMs beeinträchtigt. Um dies zu verhindern, können Sie einige Kerne bestimmten VMs zuweisen. Das Ausführen von 2 VMs mit jeweils 2 CPUs auf einem 4-Kern-Knoten kann beispielsweise dazu beitragen, dass jede VM 2 dedizierte CPUs erhält (vorausgesetzt, das Host-Betriebssystem hat keine Last, die auch einen Teil der Verarbeitungsleistung beansprucht).

Hat es negative Auswirkungen auf meinen Host, wenn alle Kerne einer VM zugewiesen werden?

Dies hängt wiederum von der ausgeführten Software ab. Wenn Sie eine VM im Leerlauf ausführen (es werden überhaupt keine CPU-intensiven Programme ausgeführt), liegt die von dieser VM auferlegte Last nahe bei 0%. Sie können sogar 10 VMs parallel ausführen und trotzdem eine Host-CPU-Auslastung von nahezu 0% feststellen, wenn alle VMs im Leerlauf sind.

Wie verhält sich die CPU bei ungleichmäßiger Auslastung?

Nun, die CPU-Lastverteilung hängt stark von einer betriebssystemspezifischen integrierten Komponente namens Scheduler ab. Unter Windows XP hat der Scheduler versucht, alle CPU-Kerne im Round-Robin-Verfahren zu laden. Das Ausführen einer Single-Threaded-Task mit Volllast auf einer Quad-Core-CPU hätte also eine Auslastung von ~ 25% auf jedem Kern ergeben.
Leider hat sich dies für ein modernes CPU-Power-Management als schlecht erwiesen. Bei modernen Systemen ist es sogar von Vorteil, wenn ein einzelner Kern zu 100% ausgelastet ist, bevor der zweite Kern überhaupt involviert ist. Der Grund dafür ist, dass die anderen Kerne im Tiefschlafmodus bleiben können, um Energie zu sparen und die Wärmeabgabe zu reduzieren, solange nicht genügend Last vorhanden ist, um einen Kern vollständig zu nutzen.

Für einige CPUs wie Intel Core i-Series und neuere AMD (Bulldozer) ist dies sogar noch interessanter, da die nicht verwendeten Kerne ausgeschaltet werden, wenn nur eine Teilmenge der Kerne verwendet wird. Dies reduziert den Stromverbrauch der CPU. Beide (Intel und AMD) beginnen, das Budget für Wärme und Stromverbrauch zu verwenden, um dann die aktiven Kerne zu übertakten. Dies kann Single-Thread-Anwendungen (die nicht auf mehrere Kerne verteilt werden können, um eine Aufgabe parallel zu bearbeiten) einen Schub verleihen. Wenn jedoch alle Kerne aktiv sind, haben die meisten dieser "Boost" -Technologien nur einen geringen Einfluss auf die Verarbeitungsleistung, da die Situation "Alle Kerne aktiv" genau die Situation ist, für die die CPU entwickelt wurde.

Die Antwort ist also, dass Ihr Core i7 die ungleiche Auslastung einzelner Kerne sehr gut bewältigt und Single-Thread-Anwendungen unter Umständen sogar eine Leistungssteigerung bietet. Diese Steigerung liegt jedoch im Bereich einiger Prozent, während Multithread-Anwendungen, die die Last auf mehrere CPU-Kerne verteilen können, im optimalen Fall um Faktoren (x2 bei Dual-Core, 4x bei Quad-Core ...) verstärkt werden können . Multi-Threading bietet also immer mehr Leistung in Bezug auf die kombinierte CPU-Leistung als Single-Threading in Kombination mit Clock-Boosting.


1
Wow, das hilft mir wirklich, das Multi-Core-Verhalten zu verstehen, nicht nur, wie es sich auf VMS auswirkt.
Dan Allen

2
Ich hatte ein Problem mit meinem Ubuntu 12.04 LTS-Client, der auf meinem Macbook Air mit 2 GHz i7 Dual Core sehr langsam lief. Ich habe die Client-Einstellung auf zwei CPU-Werte erhöht, und jetzt geht es richtig los. Ich ignoriere die Warnmeldung bei nicht optimalen Einstellungen.
Mike Graf

Es ist sehr kompliziert, da VirtualBox keine Kerne verwendet, sondern Prozessoren verwendet und jeder einen Prozessor hat, vielleicht sogar zwei.
SSpoke

0

Ich habe mich nicht mit den Handbüchern auf der VB-Site befasst, aber ich gehe davon aus, dass die Zuweisung von Kernen zu einem Gastcomputer dem Gastbetriebssystem die Anzeige mehrerer Kerne ermöglichen würde und damit Anwendungen, die diese zusätzlichen Kerne nutzen können, die zusätzliche Geschwindigkeit / Leistung / Effizienz wie beim Host-Betriebssystem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.