Als Web-Performance-Süchtiger suche ich immer nach Möglichkeiten, die Systemleistung zu verbessern und Webanwendungen zu beschleunigen. Und heute teile ich mit Ihnen die Magie der CPU-Frequenzskalierung und eine praktische Anleitung zum Deaktivieren der CPU-Frequenzskalierung, um Ihr System mit voller CPU-Geschwindigkeit zu betreiben.
Bevor wir uns mit dem Deaktivieren der CPU-Frequenzskalierung befassen, wollen wir verstehen, was CPU-Drosselung ist.
Was ist CPU-Frequenzskalierung?
Seit Kernel v. 2.6.18 (CentOS) und 2.6.32 (Ubuntu) wurde eine neue Funktion namens Dynamische CPU-Frequenzskalierung (auch bekannt als CPU-Drosselung) eingeführt.
Diese CPU-Frequenzskalierung ermöglicht es einem Prozessor, mit einer geringeren als der maximal zulässigen Frequenz zu laufen. Dies geschieht nur, um den Stromverbrauch zu schonen, hat aber den Nachteil, dass Sie nicht Ihre volle CPU-Geschwindigkeit nutzen können.
Wie finde ich heraus, mit welcher Geschwindigkeit meine CPU läuft?
Führen Sie diesen Befehl aus, wie Sie unten sehen:
grep -E '^model name|^cpu MHz' /proc/cpuinfo
Die Ausgabe sollte ungefähr so aussehen:
[[email protected]:~]grep -E '^model name|^cpu MHz' /proc/cpuinfo model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.000
Wie Sie sehen, beträgt die ursprüngliche CPU-Geschwindigkeit @ 3,40 GHz, die laufende CPU-Geschwindigkeit in MHz liegt jedoch bei etwa 1600. Die CPU läuft mit der Hälfte ihrer Gesamtgeschwindigkeit.
Dies kann auch mit einem coolen CPU-Paket namens cpufrequtils / cpupoweruitls
erreicht werdenInstallieren Sie cpupowerutils unter CentOS/Debian
yum install cpupowerutils -y
Installieren Sie cpupowerutils unter Ubuntu/Debian
apt-get install cpufrequtils
Führen Sie nun diesen Befehl aus und er zeigt Ihnen unter anderem Informationen über Ihre minimale und maximale CPU-Geschwindigkeit:
cpupower frequency-info
Die erwartete Ausgabe sollte ungefähr so aussehen:
[[email protected]:~]cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 1.60 GHz - 3.80 GHz available cpufreq governors: performance powersave current policy: frequency should be within 1.60 GHz and 3.80 GHz. The governor "powersave" may decide which speed to use within this range. current CPU frequency: 1.60 GHz (asserted by call to hardware) boost state support: Supported: yes Active: yes 3600 MHz max turbo 4 active cores 3700 MHz max turbo 3 active cores 3800 MHz max turbo 2 active cores 3800 MHz max turbo 1 active cores
CPU-Frequenzskalierung unter Linux (RedHat und Ubuntu) deaktivieren
Sehen wir uns an, wie die Skalierung der CPU-Frequenz auf den gängigsten Linux-Plattformen deaktiviert wird.
Für CentOS-/RHEL-Benutzer
Ändern wir die CPU-Frequenz mit dem folgenden Befehl auf die maximal verfügbare Geschwindigkeit:
cpupower frequency-set -g performance
Mal sehen, ob sich wieder etwas an der CPU-Laufgeschwindigkeit ändert:
[[email protected]:~]grep -E '^model name|^cpu MHz' /proc/cpuinfo model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 3497.218 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 3392.296 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 3397.742 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 2283.578 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 3457.640 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 2133.234 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 1600.257 model name : Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz cpu MHz : 3740.265 [[email protected]:~]
Wie Sie im vorherigen Befehl sehen, läuft die CPU jetzt höher als zuvor, wenn sie benötigt wird.
Eine andere Möglichkeit, dies manuell zu tun, besteht darin, diesen Befehl auszuführen, der den CPU-Governor für alle Ihre CPUs vom „On-Demand“-Modus in den „Performance“-Modus ändert:
for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -f $CPUFREQ ] || continue; echo -n performance > $CPUFREQ; done
Wenn auf Ihrem System irgendein Daemon läuft, der die CPU-Geschwindigkeit steuert, stoppen Sie ihn einfach, damit Ihr System mit voller CPU-Geschwindigkeit läuft:cpuspeed, cpufreqd oder powerd.
service cpuspeed stop
Für Ubuntu-/Debian-Benutzer
Bearbeiten Sie diese Datei, und wenn sie nicht existiert, erstellen Sie sie einfach:
nano -w /etc/default/cpufrequtils
Fügen Sie die folgende Zeile hinzu:
GOVERNOR="performance"
Speichern Sie mit STRG + X und drücken Sie dann Y.
Nächster Schritt:Ondemand-Daemon deaktivieren Um zu vermeiden, dass Ihre Änderungen nach dem Neustart des Servers verloren gehen, führen Sie diesen Befehl aus:
update-rc.d ondemand disable
Das ist alles. Überprüfen Sie Ihre Einstellungen noch einmal mit diesem Befehl:
cpufreq-info
Schlussfolgerung
Wenn Sie Ihre CPU mit voller Geschwindigkeit laufen lassen, kann dies die Leistung Ihrer Anwendungen wirklich steigern. Die meisten modernen CPUs haben bereits wirklich gute CPU-Kühlsysteme, daher sollte dies kein Problem sein, stellen Sie jedoch sicher, dass dies nicht zu einem enormen zusätzlichen Stromverbrauch oder einer Überhitzung der CPU führt. Wie Sie sehen, können Sie die CPU-Frequenzskalierung sowohl für RedHat- als auch für Debian-basierte Distributionen einfach deaktivieren. Bitte teilen Sie uns mit, wenn Sie diesbezüglich Probleme oder Fragen haben.
Weiterführende Literatur:
- CPU-Frequenzskalierung in Linux mit cpufreq
- ArchLinux CPU Frecuency Scaling Docs
- RedHat CPUFreq Governors-Dokumentation