Verhalten des Powersave-Frequenzreglers, wenn die CPU-Quote festgelegt ist

Verhalten des Powersave-Frequenzreglers, wenn die CPU-Quote festgelegt ist

Ich versuche, die Auswirkungen der Einstellung von cpu.cpu_quota_us im CPU-Cgroup-Subsystem auf die Anwendungsleistung zu verstehen. Im Wesentlichen durch Reduzierung der CPU-Quote, aber Erhöhung der Anzahl der CPUs, sodass die „effektiven“ CPUs immer noch gleich sind. Hätte dies Auswirkungen auf die Anwendung? Ist beispielsweise eine Konfiguration mit 4 CPUs und 100 % Quote dasselbe wie eine Konfiguration mit 8 CPUs und 50 % Quote?

Ich habe ein einfaches CPU-intensives Programm geschrieben bei https://github.com/ashu-mehra/cpu-quota-testund habe es unter folgender Cgroup-Konfiguration ausgeführt:

1) In einer Kontrollgruppe mit 4 CPUs und ohne Quotenbegrenzung

2) In einer Kontrollgruppe mit 8 CPUs und 50 % Quote

Beim Ausführen dieses Programms für 32 Threads ist mir der folgende Unterschied im vom Programm für die beiden Konfigurationen gemeldeten Durchsatz aufgefallen:

4CPU@100 8CPU@50
176236 87252.5

Die Leistung von 8CPU@50 ist weniger als halb so hoch wie die von 4CPU@100.

Beim weiteren Debuggen bemerkte ich, dass mein System so konfiguriert ist, dass es den CPU-Frequenzregler „Powersave“ verwendet. In diesem Modus erreichte die CPU-Frequenz der Kerne bei 4CPU@100-Programmen ihr Maximum, bei 8CPU@50 war die CPU-Frequenz der Kerne jedoch viel niedriger.

Als ich den CPU-Frequenzregler auf „Leistung“ änderte (das ist der einzige andere verfügbare Frequenzregler), verbesserte sich die Leistung mit 8CPU@50 beträchtlich, da die Kerne mit der maximalen Frequenz liefen:

4CPU@100 8CPU@50
175804 163831

Meine Systemdetails sind:

Ubuntu 16.04.2 LTS

Kernel 4.4.0-103-generisch

Ich habe folgende Fragen zu den CPUFreq-Regler:

1) Dieser Linkhttps://www.kernel.org/doc/Documentation/cpu-freq/governors.txtsagt: „Der CPUfreq-Regler „powersave“ stellt die CPU statisch auf die niedrigste Frequenz innerhalb der Grenzen von scaling_min_freq und scaling_max_freq ein.“ Mir ist jedoch aufgefallen, dass sich die Frequenz mit zunehmender Belastung ändert. Wie funktioniert „powersave“ eigentlich?

2) Warum wird die CPU-Frequenz nicht auf das Maximum erhöht, wenn der CPU-Frequenzregler „PowerSave“ verwendet wird und die CPU-Quote eingestellt ist? Führt das Einstellen der CPU-Quote zu Fehlfunktionen von „PowerSave“?

Antwort1

Das in Ihrer Frage 1 referenzierte Dokument bezieht sich auf den CPU-Frequenzskalierungstreiber acpi-cpufreq. Ich glaube, bin mir aber nicht sicher, dass Sie den CPU-Frequenzskalierungstreiber intel_pstate verwenden. Um sicherzugehen, fragen Sie Ihr System:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate

Der Powersave-Regler im intel_pstate-Treiber verhält sich ähnlich wie der OnDemand-Regler im acpi-cpufreq-Treiber. Die Kontrollalgorithmen haben sich geändert, aber wenn Sie aktuelle genug haben, sollte der Kernel lastbasiert sein.

Wenn Sie die Nutzung auf 50 % beschränken, steigt die CPU-Frequenz nicht wesentlich oder überhaupt nicht an, da dem lastbasierten Algorithmus nicht genügend Last präsentiert wird, um eine Erhöhung der CPU-Frequenz zu rechtfertigen.

verwandte Informationen