Frage Ist eine VM mit 2 CPUs wirklich schneller als eine mit 4 CPUs?


Unsere IT hat eine VM mit 2 zugewiesenen CPUs erstellt und nicht die 4, die ich angefordert habe. Der Grund dafür ist, dass die VM besser mit 2 CPUs als 4 (entsprechend) funktioniert. Der Grund dafür ist, dass der VM-Hypervisor (in diesem Fall VMWare) darauf wartet, dass alle CPUs verfügbar sind, bevor sie einen von ihnen aktivieren. Daher dauert es länger, auf 4 anstatt 2 CPUs zu warten.

Macht diese Aussage Sinn?


65
2018-04-30 05:43


Ursprung




Antworten:


Das war einmal richtig, ist aber nicht mehr ausschließlich richtig.

Worauf beziehen sie sich? Strenges Co-Scheduling.

Am wichtigsten ist, dass während des strengen Co-Scheduling-Algorithmus die Existenz einer verzögerten vCPU die Ursache dafür ist   Die gesamte virtuelle Maschine muss gestoppt werden. In dem entspannten Co-Scheduling-Algorithmus entscheidet eine führende vCPU, ob   Es sollte sich selbst auf der Grundlage der Schräglage gegenüber der langsamsten Geschwister-vCPU stoppen

Jetzt, ob Der Host hat nur 4 Threads, dann wäre es albern, sie alle zuzuordnen. Ob es hat zwei Prozessoren und 4 Threads pro Prozessor, dann Sie könnte Sie möchten nicht den gesamten Inhalt eines einzelnen Prozessors zuweisen, da Ihr Hypervisor versuchen sollte, vCPUs auf demselben NUMA-Knoten zu halten, um den Speicherzugriff zu beschleunigen. Sie erschweren diesen Auftrag, indem Sie einer einzelnen VM einen ganzen Socket zuweisen (Siehe Seite 12 dieser PDF oben).

Es gibt also Szenarien mit weniger vCPUs können Leistung besser als mehr, aber es ist nicht in 100% der Zeit wahr.

All das gesagt und getan, ich zuteile sehr selten mehr als 3 vCPUs pro Gast. Jeder erhält standardmäßig 2, 3, wenn es sich um eine hohe Arbeitslast handelt, und 4 für Dinge wie SQL Server oder sehr umfangreiche Batch-VMs oder einen Terminalserver mit vielen Benutzern.


62
2018-04-30 06:05



Nur eine Nebenbemerkung - auch abseits von Virtualisierungshürden ist es meist schwierig, Software zu schreiben, die Parallelität ausnutzt. Wenn Ihre Software-Leute nicht gut genug sind, könnte es tatsächlich besser sein, wenn vier virtuelle Hosts eine Instanz der Software ausführen, wobei jeder Host vier Ausführungs-Threads ausführt. - Luaan
@Luaan Die Box hat SQL Server drauf, also nehme ich an, dass sie dort gute Software-Leute haben. - AngryHacker
@AngryHacker ja SQL-Server kann alle 4 Kerne sehr effizient verwenden vorausgesetzt, Sie haben entsprechende MAXDOP die Einstellungen. Je nach Arbeitsbelastung ist ein übermäßig besteuerter SQL-Server jedoch häufig ein Zeichen für ein schlechtes Datenbankdesign - schlechte Indizes, keine Clustered-Indizes, zu viele Indizes, keine Optimierung usw. (nicht immer, aber oft). - Mark Henderson♦
@Luaan Das ist immer noch Parallelität ... nur mit viel höheren Latenz, wenn sie miteinander reden müssen. :) - reirab
@MarkHenderson Es ist ziemlich gut optimiert, aber einige Workloads sind einfach zu groß, um von 2 CPUs plus eine Tonne anderer Abfragen gleichzeitig problemlos gehandhabt werden zu können. - AngryHacker


Dies hängt hauptsächlich von dem zugrunde liegenden Hypervisor und den Admins ab, die ihn ausführen, lassen Sie mich erklären:

  1. Es ist eine schlechte Übung, Ihnen nur 4 CPUs willkürlich zu geben, nur weil Sie es angefordert haben. Im Allgemeinen, du denken du brauchst 4; aber Ressourcenüberwachung sagt, dass Sie nur 1 brauchen.
  2. VMware ESXi zum Beispiel erfordert das Sperren aller pCPUs, wenn eine vCPU eine Anforderung für CPU-Ressourcen anfordert; Also auf diesem Hypervisor ist es schlecht für die Leistung. KVM sperrt nicht wie ESXi; Es verwendet den zugrunde liegenden Kernel-Scheduler, kann aber auf lange Sicht CPU-Konflikte erzeugen.
  3. Wenn Sie Systeme von Anfang an mit 4 CPUs bauen, werden Sie nicht wirklich skaliert, sondern ups (was besonders auf VMs eine schlechte Übung ist). Vielleicht möchten Sie überprüfen, wie Sie das erstellen, an dem Sie gerade arbeiten, damit es auf die heutigen modernen Cloud-Infrastrukturen skaliert werden kann.

Was kannst du daraus lernen? Erstellen Sie VMs immer mit minimalen Ressourcen und erhöhen Sie sie nach Bedarf. Skaliere immer statt nach oben und du kannst deine App überall ausführen.

Aufgrund der Verriegelung, die mit dem Hypervisor erlebt werden kann, ist es in der Tat wahr, dass 2 CPUs schneller als 4 CPUs sein können.


14
2018-04-30 19:56





Ja, die Aussage macht im Allgemeinen Sinn. Es ist jedoch etwas, was Sie für Ihre genaue Konfiguration und Arbeitslast testen sollten. Manchmal ist mehr CPUs besser, wenn Sie sie tatsächlich nutzen können. Wenn Sie jedoch nicht so viel Parallelität haben, wird eine VM, die mit weniger CPUs konfiguriert ist, oft etwas besser arbeiten, da sie Verlangsamungen aufgrund von CPU Ready State-Pausen vermeidet.

Ich habe die vCPUs auf einer Reihe unserer VMs reduziert und den Durchsatz bei der Mehrheit verbessert. Eine Handvoll wurde schlechter und musste bei der vCPU-Zählung aufgestockt werden.


3
2018-04-30 19:41