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

67

Unsere IT hat eine VM mit 2 zugewiesenen CPUs erstellt, anstatt der 4, die ich angefordert habe. Der Grund dafür ist, dass die VM mit 2 CPUs besser abschneidet als mit 4 (ihrer Meinung nach). Der Grund dafür ist, dass der VM-Hypervisor (in diesem Fall VMWare) darauf wartet, dass alle CPUs verfügbar sind, bevor sie aktiviert werden. Daher dauert das Warten auf 4 statt 2 CPUs länger.

Ist diese Aussage sinnvoll?

AngryHacker
quelle

Antworten:

62

Das war früher so, ist aber nicht mehr ausschließlich so.

Worauf sie sich beziehen, ist Strict Co-Scheduling .

Am wichtigsten ist jedoch, dass beim strengen Co-Scheduling-Algorithmus aufgrund einer verzögerten vCPU die gesamte virtuelle Maschine gleichzeitig gestoppt wird. Im entspannten Co-Scheduling-Algorithmus entscheidet eine führende vCPU anhand des Versatzes gegenüber der langsamsten geschwisterlichen vCPU, ob sie sich selbst stoppen soll

Nun, wenn nur der Host 4 Threads hat, dann würden Sie dumm sein , alle von ihnen zu vergeben. Wenn zwei Prozessoren und 4 Threads pro Prozessor vorhanden sind, möchten Sie möglicherweise nicht den gesamten Inhalt eines einzelnen Prozessors zuweisen, da Ihr Hypervisor versuchen sollte, vCPUs auf demselben NUMA-Knoten zu belassen, um den Speicherzugriff zu beschleunigen Dies wird erschwert, indem einer einzelnen VM ein ganzer Socket zugewiesen wird (siehe Seite 12 dieser PDF-Datei oben).

So gibt es Szenarien , in denen weniger vCPUs können besser als mehr, aber es ist nicht wahr , 100% der Zeit.

Nach alledem ordne ich sehr selten mehr als 3 vCPUs pro Gast zu. Jeder erhält standardmäßig 2, 3, wenn es sich um eine hohe Auslastung handelt, und 4 für Dinge wie SQL Server oder sehr hohe Stapelverarbeitungs-VMs oder einen Terminalserver mit vielen Benutzern.

Mark Henderson
quelle
3
Abgesehen von den Virtualisierungshürden ist es im Allgemeinen schwierig, Software zu schreiben, die Parallelität ausnutzt. Wenn Ihre Software-Leute nicht gut genug sind, ist es möglicherweise besser, vier virtuelle Hosts zu haben, auf denen jeweils eine Instanz der Software ausgeführt wird, als ein Host, auf dem vier Ausführungsthreads ausgeführt werden.
Luaan
4
@Luaan Auf der Box ist SQL Server installiert, daher nehme ich an, dass dort einige gute Software-Leute sind.
AngryHacker
1
@AngryHacker Ja, SQL Server kann alle 4 Kerne sehr effizient nutzen, vorausgesetzt, Sie haben entsprechende MAXDOPEinstellungen. Abhängig von der Arbeitsbelastung ist ein überlasteter 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 häufig).
Mark Henderson
1
@Luaan Das ist immer noch Parallelität ... nur mit viel höherer 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 und einer Tonne anderer Abfragen gleichzeitig problemlos verarbeitet zu werden.
AngryHacker
15

Dies hängt weitgehend vom zugrunde liegenden Hypervisor und den Administratoren ab, die ihn ausführen. Lassen Sie mich Folgendes erklären:

  1. Es ist eine schlechte Praxis, nur willkürlich 4 CPUs zu geben, nur weil Sie es angefordert haben. Im Allgemeinen denken Sie , dass Sie 4 brauchen; Laut Ressourcenüberwachung benötigen Sie jedoch nur 1.
  2. VMware ESXi erfordert beispielsweise das Sperren aller pCPUs, wenn eine vCPU eine Anforderung für CPU-Ressourcen stellt . Auf diesem Hypervisor wirkt sich dies negativ auf die Leistung aus. KVM sperrt nicht wie ESXi. Es verwendet den zugrunde liegenden Kernel-Scheduler, kann jedoch langfristig zu CPU-Konflikten führen.
  3. Wenn Sie von Anfang an Systeme mit 4 CPUs erstellen, werden Sie nicht wirklich skaliert, sondern aufgerüstet (was besonders auf VMs eine schlechte Praxis ist). Möglicherweise möchten Sie überprüfen, wie Sie die Architektur erstellen, an der Sie gerade arbeiten, damit sie für die heutigen modernen Cloud-Infrastrukturen skaliert werden kann.

Was können Sie daraus lernen? Erstellen Sie VMs immer mit minimalen Ressourcen und erhöhen Sie sie nach Bedarf. Skalieren Sie immer nach unten anstatt nach oben, und Sie können Ihre App überall ausführen.

Aufgrund der Sperrung, die mit dem Hypervisor auftreten kann, ist es in der Tat richtig, dass zwei CPUs schneller sein können als vier CPUs.


quelle
4

Ja, die Aussage macht generell Sinn. Es ist jedoch etwas, das Sie auf Ihre genaue Konfiguration und Workload testen sollten. Manchmal sind mehr CPUs besser, wenn Sie sie tatsächlich nutzen können. Wenn Sie jedoch nicht so viel Parallelität haben, ist die Leistung einer mit weniger CPUs konfigurierten VM häufig etwas besser, da Verzögerungen aufgrund von CPU-Bereitschaftspausen vermieden werden.

Ich habe die vCPUs einiger unserer VMs reduziert und bei den meisten eine Verbesserung des Durchsatzes festgestellt. Eine Handvoll wurde schlimmer und musste in Bezug auf die Anzahl der vCPUs erhöht werden.

Brian Knoblauch
quelle