Kann eine VM eine bessere Leistung erbringen, wenn ihr nur zwei statt vier Kerne präsentiert werden?

7

Wir hatten eine VMWare-VM mit zwei zugewiesenen Kernen im Einsatz, die in IIS einen ziemlich abscheulichen Prozess ausführten. Unter Last hat der Prozess die CPU-Auslastung auf beiden Kernen maximal genutzt. Daher haben wir unsere Systemingenieure gebeten, der VM die beiden anderen Kerne des physischen Prozessors vorzustellen. Der Ingenieur sagte sofort, dass dies die Leistung überhaupt nicht verbessern würde, aber die Leistung der VM verschlechtern würde. Er wies den Grund für seine Aussage zurück, der irgendetwas mit der Kapazität des ESX-Servers oder mit Ressourcenkonflikten zu tun hatte.

Diese Aussage ergab für mich wenig Sinn und ich frage mich, wie das, was der Ingenieur sagte, wahr sein könnte. Gibt es tatsächlich Fälle, in denen vier Kerne, die einer VM präsentiert werden, eine schlechtere Leistung verursachen als zwei Kerne auf derselben physischen Hardware? Nehmen wir eine ideale Situation an, in der sich nur eine VM auf dem Hostserver befindet und nichts mit anderen Betriebssysteminstanzen geteilt wird.

Ich glaube, der physische Server hatte einen einzelnen Quad-Core-Prozessor und hostete höchstwahrscheinlich mehrere VMs. Ich weiß nicht genau, welche Version von ESX auf dem Host ausgeführt wurde, und ich weiß auch nicht mit Sicherheit, wie die Konfiguration des physischen Prozessors lautete, aber innerhalb der VM, auf die ich Zugriff hatte, sah ich zwei AMD-Prozessoren mit 3,33 GHz.

Am Ende konnte ich die Behauptung des Ingenieurs nie testen, weil wir (während wir versuchten, die VM zu aktualisieren) den Prozess optimieren und den CPU-Verbrauch reduzieren konnten und 2) wir auf eine andere VM migrierten Ein weiterer ESX-Server mit vier Kernen.

Arcain
quelle

Antworten:

9

Ich melde mich hier und sage, dass Ihr Ingenieur wahrscheinlich über die Tatsache gesprochen hat, dass eine VM mit mehreren vCPUs einen deutlichen Nachteil bei der Planung von CPU-Zyklen hat. Eine 1 vCPU-VM kann Anweisungen ausführen, sobald ein einzelner Kern verfügbar ist. Wenn eine VM über 4 vCPUs verfügt, kann sie buchstäblich keine Anweisungen ausführen, bis 4 Kerne verfügbar sind.

Wenn Ihre Box eine anständige Anzahl von VMs enthält, kann dies Sie definitiv verlangsamen, da Ihre VM in der Schlange warten muss, bis 4 Kerne frei sind. Es könnte auch die anderen VMs verlangsamen, da alle 4 Kerne gleichzeitig verbunden sind.

Ich möchte nicht auf Hyper-Threading und all das eingehen, aber oben ist eine einfache Erklärung dessen, worauf sich Ihr Typ möglicherweise bezogen hat. Obwohl er vielleicht nicht die beste Arbeit geleistet hat, um es zu erklären.

B. Riley
quelle
4
Was Sie meinen, wird in der VMware-Terminologie als Strick-Co-Scheduling bezeichnet und ist in neueren Versionen von VMware nicht vollständig korrekt. Das Planen mehrerer vCPUs ist schwieriger (und Rex 'Antwort fasst die meisten Gründe zusammen), aber seit ESX 3.5 wurde keine absolut strenge gemeinsame Planung durchgeführt. Es gibt immer noch Einschränkungen, aber es ist eine gewisse Abweichung zwischen den vCPUs zulässig, wodurch die Planung viel weniger problematisch ist als früher. Sie haben mit ziemlicher Sicherheit Recht, dass der betreffende Ingenieur dies dachte.
Helvick
Danke für die Klarstellung. Es klang einfach so, wie der Typ es meinte.
B. Riley
@B. Riley - Das ist eine großartige Einsicht. Einige von denen, die Sie erwähnen, stimmen mit einigen Dingen überein, die unser Ingenieur gesagt hat. Aber würden Sie erwarten, dass die Leistung tatsächlich schlechter ist als bei zwei Kernen? Ich kann sehen, dass es nicht optimal ist, aber es fällt mir schwer zu glauben, dass es nicht zwei Kerne schlagen würde. Im Wesentlichen lautete seine pauschale Aussage, dass wenn ich Ihnen vier Kerne gebe, Ihre VM schlechter läuft als bei zwei, und als er gefragt wurde, ob dies auf einen Konflikt zurückzuführen sei, sagte er, dass der Konflikt nichts damit zu tun habe.
Arcain
@arcain Das Problem ist, dass der Server früher auf eine Zeitscheibe warten musste, in der alle vier Prozessoren verfügbar waren. Es ist weniger wahrscheinlich, dass alle vier gleichzeitig verfügbar sind, als dass nur zwei gleichzeitig verfügbar sind - insbesondere, wenn Sie nur auf einem 4-Core-Basissystem ausgeführt werden. Ein System mit zwei vcpus würde also häufiger Zeitscheiben finden, was bedeutet, dass sie insgesamt mehr Arbeit erledigen würden.
David Mackintosh
@arcain - Wenn ich davon ausgehe, dass Ihre Anwendung über mehrere Threads verfügt und Sie ESX 3 oder 4x ausführen, würde ich keinen Leistungsabfall erwarten. Allerdings würde ich auch keinen signifikanten Anstieg erwarten. Nach allem, was ich gesehen habe, ist der Effekt mehrerer vCPUs marginal. Dies ist ein Beweis für den Planungsalgorithmus von VMware und dafür, wie gut Ressourcen in einer Umgebung mit mehreren Mandanten zugewiesen werden. Es ist wirklich so gut.
B. Riley
6

Die beste Vorgehensweise für vSphere pro VMWare besteht darin, so wenig virtuelle CPUs wie möglich zu verwenden. Wenn die Anwendungen nicht für SMP-Anwendungen erstellt wurden, kann dies negative Auswirkungen haben, wenn Sie dem Gast mehrere vCPUs zuweisen.

Selbst wenn einige vCPUs nicht verwendet werden, stellt die Konfiguration virtueller Maschinen mit ihnen dennoch einige geringe Ressourcenanforderungen an ESX: * Nicht verwendete vCPUs verbrauchen immer noch Timer-Interrupts. * Die Aufrechterhaltung einer konsistenten Speicheransicht zwischen mehreren vCPUs verbraucht Ressourcen. * Einige ältere Gastbetriebssysteme führen Leerlaufschleifen auf nicht verwendeten vCPUs aus und verbrauchen dabei Ressourcen, die andernfalls für andere Zwecke verfügbar wären (andere virtuelle Maschinen, der VMkernel, die Konsole usw.). * Der Gastplaner migriert möglicherweise eine Single-Threaded-Workload zwischen mehreren vCPUs, wodurch die Cache-Lokalität verloren geht.

Wenn der Host alle physischen CPU-Zyklen maximal ausnutzt, kann dies zu anderen Leistungsproblemen führen, da der Host ins Stocken gerät, was wiederum dazu führt, dass alle Gäste ins Stocken geraten.

Bearbeiten: Ihr Ingenieur sollte zumindest bereit gewesen sein, zu testen.

Als Sie Ihren Beitrag noch einmal gelesen haben, sagten Sie, dass er nur 1 Quad-Core-CPU hat. Wenn dies der Fall ist, würde ich wahrscheinlich mit Ihrem Ingenieur gehen und sagen, dass es eine schlechte Idee ist, alle 4 physischen CPUs einem Gast zuzuweisen. Der Overhead auf dem Host für die Verwaltung aller 4 vCPUs, wenn nur 4 physische Kerne vorhanden sind, würde die Gesamtleistung beeinträchtigen.

Das Problem ist, dass Sie beim Hinzufügen von 4 vCPUs zur Böe, wenn der Host nur 4 Kerne hat, alle Ihre physischen CPU-Ressourcen einem Computer zuweisen. Der Aufwand für die Verwaltung aller 4 vCPUs durch den Hypervisor führt dazu, dass Ressourcen verbraucht werden und Ihre realisierten Gewinne höchstwahrscheinlich minimal sind

Rex
quelle
Okay, das macht Sinn, aber haben Sie gehört, dass die Leistung tatsächlich beeinträchtigt wird, indem Sie einer VM allein mehr CPUs hinzufügen - nicht gemeinsam genutzt? Der Ingenieur sagte sofort, dass die Leistung durch Hinzufügen weiterer CPUs beeinträchtigt würde, ohne zu fragen, ob der Prozess Multithreading war (was es war).
Arcain
Normalerweise nein. Wenn ich mich nicht unnatürlich ornery fühlte (wie bei BOFH), würde ich nicht sofort sagen, dass dies angesichts der von Ihnen präsentierten Informationen zu einer schlechteren Leistung führen würde. Es kann natürlich auch andere Probleme geben, weshalb er möglicherweise zu diesem Schluss gekommen ist.
Rex
Ich habe meine Melodie geändert, nachdem ich Ihren Beitrag noch einmal gelesen habe. Ich habe meine Antwort bearbeitet, um neue Gedanken zu reflektieren.
Rex
Also denke ich, ich setze das zusammen. Nach den Aussagen von B. Riley und Helvick bezog sich unser Ingenieur vermutlich auf die Leistungseinbußen, die entstehen könnten, wenn der ESX-Server einer strengen Co-Planung unterliegt. Wie Sie bereits erwähnt haben, sieht es so aus, als wäre die Leistung nicht optimal, wenn vier Kerne zugewiesen würden, aber ich denke, sie würde die einer Zwei-Kern-VM immer noch übertreffen. Ist das der Drift, den ich aufnehme?
Arcain
3

Eine Faustregel, die ich bisher aufgegriffen habe, ist, einer einzelnen VM immer weniger virtuelle CPU zuzuweisen, als physisch auf dem Host vorhanden ist.

Ein Grund dafür (vor esxi), dass die Konsole vm immer lief. Für die Planung von Resaons würden Sie nur dann CPU-Zyklen an die VM senden, wenn die Menge des virtuellen CPUs gleichzeitig inaktiv war. Andernfalls erhöht sich Ihre "CPU-Wartezeit"

Mit einer Quadcore-CPU im Host würde ich also nur max. 2 cpus zu einem vm.

Lepole
quelle
1
Selbst in ESXi ist der Hypervisor immer noch damit beschäftigt, vCPU zu planen und den Speicher zu verwalten. Die Servicekonsole war nicht der Hypervisor. Die Servicekonsole war für die Hypervisor-Verwaltung vorgesehen - nicht für die eigentliche Arbeit des Hypervisors.
Rex
0

Es hängt davon ab, was diese anderen Kerne sonst noch verwendet. Wenn die Kerne inaktiv sind, würde das Hinzufügen dieser Kerne zu Ihrer VM die Leistung verbessern (ich gehe davon aus, dass die auf Ihrer VM ausgeführte Anwendung über mehrere Threads verfügt und alle 4 Kerne verwenden kann). Wenn die Kerne beschäftigt sind, hilft es wahrscheinlich nicht oder zumindest nicht so viel, wie man denkt.

mrdenny
quelle
Sie sagen also, dass seine Behauptung falsch wäre? Dass es keinen Fall gibt, in dem das Hinzufügen weiterer Prozessoren zu einer VM die Leistung sofort beeinträchtigen sollte? Angenommen, die VM wird nicht freigegeben.
Arcain
Ihr Ingenieur sollte zumindest bereit gewesen sein, zu testen. Das Problem ist jedoch, dass Sie beim Hinzufügen von 4 vCPUs zur Böe, wenn der Host nur über insgesamt 4 Kerne verfügt, alle Ihre physischen CPU-Ressourcen einem Computer zuweisen. Der Aufwand für die Verwaltung aller 4 vCPUs durch den Hypervisor führt dazu, dass Ressourcen verbraucht werden und Ihre realisierten Gewinne höchstwahrscheinlich minimal sind.
Rex
Sie sollten nicht sehen, dass die Leistung schlechter wird. Bei schlechterer Leistung sollte die Leistung gleich bleiben, aber im Allgemeinen würden Sie eine Verbesserung sehen.
Mrdenny