Wenn es sich um die Leistung eines Servers handelt, gibt es verschiedene Betrachtungsweisen. Es gibt die offensichtliche Reaktionszeit (ähnlich der Netzwerklatenz) und den Durchsatz (ähnlich der Netzwerkbandbreite).
In einigen Versionen von Windows Server sind die Einstellungen für die ausgeglichene Stromversorgung standardmäßig aktiviert. Wie Jeff betonte. Windows 2008 R2 ist einer von ihnen. Heutzutage sind nur noch wenige CPUs Single-Core-Prozessoren. Diese Erklärung gilt daher für fast alle Windows-Server, auf die Sie stoßen, mit Ausnahme von Single-Core-VMs. (mehr dazu später).
Wenn der Energiesparplan aktiv ist, versucht die CPU, den Stromverbrauch zu drosseln. Dies geschieht durch Deaktivieren der Hälfte der CPU-Kerne in einem Prozess, der als "Parken" bezeichnet wird. Es steht jeweils nur die Hälfte der CPUs zur Verfügung, sodass in verkehrsarmen Zeiten weniger Strom verbraucht wird. Dies ist an und für sich kein Problem.
Was ein Problem ist, ist die Tatsache, dass Sie, wenn die CPUs nicht geparkt sind, die für das System verfügbaren CPU-Zyklen verdoppelt und die Belastung des Systems plötzlich aus dem Gleichgewicht gebracht haben, beispielsweise von 70% Auslastung auf 35% Auslastung. Das System prüft dies und denkt, nachdem der Datenverkehr verarbeitet wurde: "Hey, ich sollte dies ein wenig zurückwählen, um Strom zu sparen." Und so ist es auch.
Hier ist der schlechte Teil. Um eine ungleichmäßige Verteilung von Wärme und Strom in den CPU-Kernen zu verhindern, werden die zuletzt nicht geparkten CPUs tendenziell geparkt. Damit dies ordnungsgemäß funktioniert, muss die CPU alle Daten aus den CPU-Registern (L1-, L2- und L3-Cache) an einen anderen Speicherort (höchstwahrscheinlich Hauptspeicher) übertragen.
Nehmen wir als hypothetisches Beispiel an, Sie haben eine 8-Kern-CPU mit C1-C8.
- Aktiv: C1, C3, C5, C7
- Geparkt: C2, C4, C6, C8
In diesem Fall werden alle für einige Zeit aktiv und werden dann vom System wie folgt geparkt:
- Aktiv: C2, C4, C6, C8
- Geparkt: C1, C3, C5, C7
Dabei ist jedoch ein erheblicher Overhead mit dem Leeren aller Daten aus dem L1-L3-Cache verbunden, damit bei Programmen, die aus der CPU-Pipeline geleert wurden, keine seltsamen Fehler auftreten.
Es gibt wahrscheinlich einen offiziellen Namen dafür, aber ich erkläre es gerne als CPU-Thrashing. Grundsätzlich verbringen die Prozessoren mehr Zeit mit der internen Verschiebung von Daten als mit der Bearbeitung von Arbeitsanforderungen.
Wenn Sie eine Anwendung haben, deren Anforderungen eine geringe Latenzzeit erfordern, müssen Sie die Einstellungen für die ausgeglichene Stromversorgung deaktivieren. Wenn Sie sich nicht sicher sind, ob dies ein Problem ist, gehen Sie wie folgt vor:
- Öffne den "Task Manager"
- Klicken Sie auf die Registerkarte "Leistung".
- Klicken Sie auf "Open Resource Monitor"
- Wählen Sie das Register "CPU"
- Schauen Sie sich rechts im Fenster die verschiedenen CPUs an.
Wenn Sie sehen, dass einer von ihnen geparkt wird, werden Sie feststellen, dass die Hälfte von ihnen zu einem bestimmten Zeitpunkt geparkt wird, alle werden angezündet, und die andere Hälfte wird geparkt. Es wechselt hin und her. Somit sind die System-CPUs überlastet.
Virtuelle Maschinen: Dieses Problem ist noch schlimmer, wenn Sie eine virtuelle Maschine ausführen, da der zusätzliche Aufwand für den Hypervisor besteht. Im Allgemeinen muss für die Ausführung einer VM auf der Hardware zu jedem Zeitpunkt ein Zeitschlitz für jeden der Kerne verfügbar sein.
Wenn Sie über eine Hardware mit 16 Kernen verfügen, können Sie VMs mit mehr als 16 Gesamtkernen ausführen. Für jede Zeitscheibe sind jedoch nur bis zu 16 virtuelle CPUs für diese Zeitscheibe zulässig, und der Hypervisor muss für alle Kerne einer VM geeignet sein in diese Zeitscheibe. Es kann nicht über mehrere Zeitscheiben verteilt werden. (Eine Zeitscheibe ist im Wesentlichen eine Menge von X CPU-Zyklen. Sie kann 1000 oder 100.000 Zyklen betragen.)
Bsp .: 16 Core-Hardware mit 8 VMs. 6 haben 4 virtuelle CPUs (4C) und 2 haben 8 virtuelle CPUs (8C).
Zeitscheibe 1: 4x4C Zeitscheibe 2: 2x8C Zeitscheibe 3: 2x4C + 1x8C Zeitscheibe 4: 1x8C + 2x4C
Was der Hypervisor nicht tun kann, ist die Hälfte der Zuteilung für eine Zeitscheibe auf die ersten 4 CPUs einer 8-vCPU-VM aufzuteilen und dann in der nächsten Zeitscheibe den Rest auf die anderen 4 vCPUs dieser VM aufzuteilen. Es ist alles oder nichts in einer Zeitscheibe.
Wenn Sie Microsoft Hyper-V verwenden, können die Einstellungen für die Stromversorgungssteuerung im Host-Betriebssystem aktiviert werden. Dies bedeutet, dass sie auf die Client-Systeme übertragen werden und sich auch auf diese auswirken.
Sobald Sie sehen, wie dies funktioniert, können Sie leicht erkennen, wie die Verwendung der Einstellungen für die ausgeglichene Stromregelung zu Leistungsproblemen und zu langsamen Servern führt. Eines der zugrunde liegenden Probleme besteht darin, dass die eingehende Anforderung warten muss, bis der Vorgang zum Parken / Entparken der CPU abgeschlossen ist, bevor der Server auf die eingehende Anforderung antworten kann, unabhängig davon, ob es sich um eine Datenbankabfrage, eine Webserveranforderung oder etwas anderes handelt .
Manchmal parkt oder entparkt das System die CPUs während einer Anfrage. In diesen Fällen startet die Anforderung in der CPU-Pipeline, wird aus dieser entfernt und ein anderer CPU-Kern übernimmt den Prozess von dort. Wenn es sich um eine ausreichend umfangreiche Anforderung handelt, kann dies im Verlauf der Anforderung mehrmals vorkommen und eine 5-Sekunden-Datenbankabfrage in eine 15-Sekunden-Datenbankabfrage ändern.
Das größte Problem bei der Verwendung von Balanced Power ist, dass sich die Systeme langsamer anfühlen, wenn Sie auf nahezu jede Ihrer Anforderungen reagieren.