Debian CPUFreq

Aus Wiki
Zur Navigation springen Zur Suche springen

Einleitung

Wenn unter Debian ein Desktop installiert ist, wird automatisch ein CPU-Powermanager eingerichtet, der die Frequenz der CPU der aktuellen CPU-Last adynamisch anpasst. Beim reinen Serverbetrieb ist dies nicht der Fall. Um dennoch den Stromverbrauch zu senken, kann das Powermanagement relativ einfach nachträglich aktiviert werden.

Als weitere Sparmöglichkeit kann die Spannung der CPU niedriger gewählt werden (Undervolting). Die CPU-Hersteller wählen Spannungen für die CPU's, die garantiert mit jeder CPU funktionieren. Aufgrund von Fertigungstoleranzen arbeiten aber die meisten CPU's auch noch stabil und zuverlässig mit niedriger Spannung. Absenken der Spannung kann den Stromverbrauch nochmals deutlich senken, da die Leistung quadratisch zur Spannung steigt bzw. fällt (P=U^2/R).

Voraussetzung (Apassung der CPU-Frequenz):

  • AMD-CPU mit Cool&Quiet
  • Intel CPU, die EIST (Enhanced Intel Speedstep Technology) unterstützt

Voraussetzung (Undervolting):

  • AMD K8-CPU mit Cool&Quiet
  • C-Compiler installiert


Anpassung CPU Frequenz

Installation

Cool&Quiet bei AMD CPU im Bios aktivieren. EIST bei Intel CPu im Bios aktivieren

apt-get install cpufrequtils


Funktionalität testen

Damit die CPU-Frequenz vom Kernel geändert werden kann, ist ein entsprechender Treiber (Modul) und ein sog. Governor nötig, der die Anpassung vornimmt.

Treiber auswählen

Abhängig vom verwendeten Processor sollte einer der folgenden Treiber ausgewählt werden:

powernow_k6
AMD K6 Prozessor
powernow_k7
AMD K7 Prozessor (Athlon, Duron, Sempron 32 bits)
powernow_k8
AMD K8 Prozessor (Athlon 64, Athlon 64 X2, Turion 64, Sempron 64, Opteron 64)
p4_clockmod
Pentium 4, Celeron D, Pentium D, Celeron M
speedstep_centrino
Pentium M, Core Duo, Core 2 Duo
acpi_cpufreq
Genereller Treiber, der im Zweifel getestet werden kann


Treiber aktivieren:

  • für aktuelle AMD-CPU
modprobe powernow_k8
  • für aktuelle Intel-CPU
modprobe speedstep_centrino

Falls Ein Fehler "FATAL: Error inserting ... No such device" ausgegeben wird, sollte der Gernerische ACPI-Treiber versucht werden:

modprobe acpi_cpufreq

Wenn auch dabei ein Fehler auftritt, unterstützt die verwendetet CPU vermutlich kein Power-Management. Die folgenden Schritte sind damit sinnlos.


Ausgabe der möglichen CPU-Frequenzstufen:

cpufreq-info

Für jeden Core des verwendeten Prozessor werden zahlreiche Informationen wie, z.B. vorhandene Frequenzstufen und die aktuell verwendete, ausgegeben. Nachdem noch kein Powermanagement konfiguriert wurde, wird die maximal mögliche Frequenz verwendet.


Governor konfigurieren

Standardmäßig wird der Governor Performance verwendet. Dieser taktet die CPU permanent mit maximalem Takt. Folgende Governor sind verfügbar:

performance (cpufreq_performance)
Setzt permanent die maximal mögliche CPu Frequenz :
powersave (cpufreq_powersave)
Das Gegenteil von performance. Wählt permanent die niedrigste Taktstufe aus.
ondemand (cpufreq_ondemand)
Takt wird dynamisch, abhänging von der CPU-Last, eingestellt
conservative (cpufreq_conservative)
Ähnlich wie ondemand, aber weniger aggressiv als dieser

Gewünschten Governor installieren (auch mehrere möglich) z.B. ondemand:

modprobe cpufreq_ondemand

Selektiveren des zu verwendenden Governor:

cpufreq-set -g ondemand

Takt und Governor überprüfen:

cpufreq-info

Als Governor sollte nun ondemand für alle CPU's / Cores ausgegeben werden. Die CPU sollte nun auf der geringsten Taktstufe betrieben werden, falls die CPU-Last relativ gering ist.


CPU Powermanagement permanent aktivieren

Nachdem die Funktionsweise des CPU Powermanagements im vorhergehenden Kapitel verifiziert wurde kann nun das Powermanagement permanent (nach dem Reboot) aktiviert werden.

Kernel Module

vi /etc/modules
  • Das Treibermodul ans Ende anhängen. Z.b. powernow_k8 (siehe oben)
  • Den/die zu ladenden Governors anhängen, z.B. ondemand (siehe oben)

Governor

Mit Hilfe der Datei /etc/default/cpufrequtils kann der standardmäßig anzuwendende Governor ausgewählt werden. Dafür wurde eine Vorlage bei der Installation angelegt. Diese muß zunächst nach /etc/default/cpufrequtils kopiert werden.

cp /usr/share/doc/cpufrequtils/examples/cpufrequtils.sample /etc/default/cpufrequtils

File anpassen:

vi /etc/default/cpufrequtils

Folgende Änderungen vornehmen, um den Governor ondemand auszuwählen:

ENABLE="true"
GOVERNOR="ondemand"
MAX_SPEED=0
MIN_SPEED=0

Funktionscheck

Rechner neu starten. Mit

watch cpufreq-info

Prüfen:

  • der Governor wurde korrekt gesetzt
  • CPU sollte auf niedrigster Taktstufe laufen
  • CPU takt steigt, falls CPU-Last erzeugt wird

Watch-Befehl mit STRG-C beenden.


Undervolting

Folgende Anleitung funktioniert ausschließlich mit AMD K8-CPU's. Derzeit kein Intel Support. Dies ist in einer der folgenden Versionen des verwendeten Tools geplant.

Installation

  • Cool&Quiet im Bios aktivieren
  • CPU-Spannung auf Auto oder ähnliches im Bios einstellen. Die Vorgabe einer bestimmten Spannung im Bios verhindert die dynamische Anpassung mittels Daemon unter Linux.

Kernel-Header-Files des aktuellen Kernels installieren:

apt-get install libcurl3 build-essential linux-headers-$(uname -r)

Für den Stresstest (check ob CPU stabil läuft) kommt mprime zum Einsatz.

cd /usr/local/src
mkdir mprime
cd mprime

32Bit Linux:

wget http://mersenneforum.org/gimps/mprime259.tar.gz
tar xvf mprime259.tar.gz

64Bit Linux:

wget http://mersenneforum.org/gimps/mprime259-linux64.tar.gz
tar xvf mprime259-linux64.tar.gz

mprime verschieben und Download-Ordner löschen:

mv mprime /usr/local/bin/mprime
cd ..
rm -R mprime 

CPUPowerD herunterladen und installieren:

cd /usr/local/src
wget  http://sourceforge.net/projects/cpupowerd/files/cpupowerd/0.2.1/cpupowerd-0.2.1.tar.gz
tar xvf cpupowerd-0.2.1.tar.gz
cd cpupowerd-0.2.1/src
make
make install


Kernelmodule

modprobe cpufreq_userspace
modprobe msr


Funktionalität testen

cpupowerd --status eingeben

Es werden einige Informationen zur CPU - insbesondere alle möglichen Taktstufen, aktuelle Taktfrequenz und aktuelle Spannung ausgegeben.

Für die folgenden Schritte wird davon ausgegangen, dass die CPU die Taktstufen 1000, 1800, 2000 und 2200 MHz unterstützt (siehe cpupowerd --status). Die Stufen in den folgenden Schritten evtl. den eigenen Stufen anpassen.

Einstellen der maximalen CPU-Frequenz: 2200 MHz (der Befehl sollte lediglich eine Warnung, keine Fehler ausgeben):

cpupowerd -F "0|2200"

Überprüfen, ob dies erfolgreich war:

cpupowerd --status

Dies Ausgabe sollte nun die Maximalfrequenz 2200 MHz enthalten. Die aktuell eingestellte Spannung (z.B. 1,3000V) für die folgenden Schritte merken.

Verringern der Spannung: Das Verringern der Spannung ist ein iterativer Prozess. Die Spannung sollte nur in kleienn Schritten verringert werden und anschließend die Stabilität mit mprime überprüft werden. Sobald die Stabilität leidet, solte die Spannung um 1 oder 2 Schritte erhöht werden.

Bulbgraph.png Hinweis:

mprime lastet sämtliche Cores einer CPU zu 100% aus und ermöglicht somit einen idealen Test der Stabilität einer CPU. Er soltle jeweils einige Minuten (mindestens 10) laufen. Abgebrochen wird der Test mit STRG-C

Spannung verringern (jeweils 0.125V bzw. 0.25V):

cpupowerd -V "0|1.2500"

Stabilität testen:

mprime -t

Diese beiden Schritte wiederholen, bis die CPU nicht mehr stabil läuft. Die letzte stabil laufende Einstellung wieder herstellen und mit mprime eine deutlich längere Zeit testen, ob diese Einstellung wirklich stabil funktioniert.

Wenn auf diese Weise die minimale Spannung ermittelt wurde, diese notieren. Anschließend die nächste Frequenz (hier: 2000 MHz) einstellen (cpupowerd -F "0|2200") und schrittweise die minimale Spannung ermitteln. Auf diese Art und Weise die minimale Spannung aller Taktstufen ermitteln und notieren.

Daemon permanent aktivieren

Zunächst das Konfigfile anlegen, das alle möglichen Taktstufen incl. zugeh. Spannungen enthält:

cpupowerd -a /etc/cpupowerd.conf

Konfigfile bearbeiten:

vi /etc/cpupowerd.conf

Die eben ermittelten minimalen Spannungen im Configfile checken und bei Bedarf anpassen.

Nun wird CPUPowerd im Vordergrund gestartet (Keine Rückkehr zum Prompt). Dabei gibt CPUPowerd evtl. debugging Informationen an der Console aus, während die CPU-Frequenz und -Spannung abhängig von der Last geregelt wird.

cpupowerd -c /etc/cpupowerd.conf

CpuPowerd bringt ein Script mit, das abwechselnd CPU-Last und Pausen erzeugt, um das korrekte Hoch-/Runtertakten mit den verringerten Spannungen zu testen. Ein zweites Terminal/Putty-Fenster öffnen und createload.sh starten:

/usr/local/src/cpupowerd-0.2.1/tools/createload.sh

Ein drittes Terminal/Puttyfenster starten und mit folgendem Befehl das hoch- und Runtertakten der CPU beobachten:

watch cpupowerd --status

Das Scritp createload.sh sollte mindestens 15 Minuten lang laufen, ohne dass es zu Abstürzen kommt. Anschließend das Script kann mit STRG-C abbrechen. Schließlich cpupowerd im ersten Terminalfenster mit STRG-C ebenfalls abbrechen.

Daemon einrichten:

cp /usr/local/src/cpupowerd-0.2.1/tools/cpupowerd.sh /etc/init.d/cpupowerd
/etc/init.d/cpupowerd start

Daemon beim Rechnerstart aktivieren:

vi /etc/init.d/cpupowerd

Folgende Zeilen am Dateianfang ab Zeile2 einfügen:

### BEGIN INIT INFO
# Provides:          cpupowerd
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop cpupowerd
# Description:       Start/stop cpupowerd
### END INIT INFO
update-rc.d cpupowerd defaults 99 01