ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Prozessortaktung

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Hinweis:

Je nach Prozessortyp stehen gegebenenfalls nicht alle in diesem Artikel beschriebenen Abfrage- und Einstellmöglichkeiten zur Verfügung. Im BIOS muss ggf. Cool&Quiet (AMD) oder Speedstep (Intel) aktiviert werden.

Wiki/Icons/config.png

Linux bietet die Möglichkeit, die Taktfrequenz des Prozessors (CPU) auszulesen und wenn notwendig, auch zu modifizieren bzw. den aktuellen Bedürfnissen (an die Rechenleistung) anzupassen. Dies wird normalerweise vollautomatisch erledigt.

Während die Taktfrequenzstufen und -grenzen durch die Hardware vorgegeben sind, entscheidet ein sogenannter "(Scaling-)Governor", wie die Taktfrequenz automatisch geregelt bzw. konkret angepasst wird. Dieser Artikel gibt Hinweise für manuelle Eingriffe.

Wer nicht zuerst den kompletten Artikel lesen möchte, findet im Abschnitt Links ein einfaches Shellskript, das die wichtigsten Informationen zur CPU, Governor, Taktfrequenz etc. im Terminal anzeigt.

⚓︎

Arbeitsweise der Governors

Governor Beschreibung
ondemand (Standard bei den meisten Systemen) Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Dabei wird die CPU-Frequenz u.U. sprunghaft angehoben oder abgesenkt.
conservative Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Die Taktfrequenz wird aber Schritt-für-Schritt angehoben bzw. abgesenkt.
performance Die CPU läuft permanent auf der höchsten erlaubten Taktfrequenz.
powersave Die CPU läuft permanent auf der niedrigsten erlaubten Taktfrequenz.
userspaceDies ist kein Kernel-eigener Governor, vielmehr wird ein Governor im Userspace verwendet, wie z.B. powernowd.

Hinweis:

Auch wenn die Bezeichnungen der Taktstufen anderes suggerieren, spart man bei powersave nicht unbedingt Strom! Im normalen Desktop-Betrieb sorgt powersave dafür, dass der Prozessor später in den "Schlafmodus" fällt, weil er langsamer rechnet und daher entsprechend länger braucht. Der Schlafmodus spart aber wesentlich mehr Energie als die niedrigste Taktfrequenz.

powersave ist nur dann sinnvoll, wenn ein Lüfter lärmt, der zu Ungunsten der Systemleistung langsamer drehen und damit leiser werden soll. Oder wenn die CPU voll ausgelastet ist (z.B. Videokodierung, aufwendige Spiele) und man dabei Strom sparen muss.

In allen anderen Fällen heißt die stromsparendste Variante - auch bei Laptops im Akkubetrieb - ondemand.

Taktfrequenzanpassung beeinflussen

Für die Regelung der Taktstufen hat man zwei Möglichkeiten: grafisch mit GUI oder im Terminal.

GNOME

Zur grafischen Anzeige und Änderung der Frequenzen und Anpassungsmechanismen kann man das Programm cpufreq-selector nutzen, welches in der Regel in der Standardinstallation von Ubuntu (GNOME) enthalten ist. Der entsprechende Paketname lautet [1]:

  • gnome-applets

Befehl zum Installieren der Pakete:

sudo apt-get install gnome-applets 

Oder mit apturl installieren, Link: apt://gnome-applets

./cpufreq-applet.png Nun führt man einem Rechtsklick rechte Maustaste auf das GNOME Panel aus und wählt dann "Zum Panel hinzufügen → Überwachen der Prozessortaktstufen". Dort sollte dann im Leerlauf (bei "ondemand") immer die niedrigst mögliche Frequenz angezeigt werden.

./Prozessortaktstufen_intrepid.png Mit einem Linksklick linke Maustaste auf das Applet kann man die Taktstufen-Anpassung auch selbst verändern. So kann man beispielsweise die Taktrate fest auf den niedrigsten Wert einstellen. Klickt man zum ersten Mal auf einen der Werte, so muss ein Administrator des Systems diesen Vorgang erlauben.

Ab Ubuntu 8.10 Intrepid Ibex genügt es, das Applet zur Leiste hinzuzufügen. Beim ersten Änderungswunsch erscheint eine Abfrage zum Entsperren. Hier kann dann der derzeit aktive Benutzer nach Eingabe des eigenen Passwortes die Einstellungen vornehmen (dies gilt nur für Benutzer mit Admin-Rechten).

Voreinstellung ändern

Allerdings gilt das, was man hier einstellt, nur bis zum nächsten Neustart oder Aufwachen aus dem Standby. Wacht der Rechner wieder auf, so ist diese Einstellung wieder auf "Ondemand" gesetzt. Die Voreinstellung des gnome-power-managers kann mit dem GNOME Konfigurationseditor [4] bearbeitet werden. Dort findet man eine Einstellungsmöglichkeit für den Betrieb am Netzteil

  • "apps → gnome-power-manager → cpufreq → policy_ac"

und einen zugehörigen Schlüssel für den Batteriebetrieb.

  • "apps → gnome-power-manager → cpufreq → policy_battery"

Die verfügbaren Richtlinien zum Einstellen der Frequenz werden im nächsten Abschnitt erläutert.

Experten-Info:

cpufreq-selector kann auch über die Kommandozeile gesteuert werden. Die Option -g legt den Governor fest, die Option -f die Frequenz in kHz. Die Option -c bezeichnet die CPU, für die die Einstellung gilt.

Xfce

Auch unter Xubuntu können native Panel-Applets genutzt werden. Dazu fügt man dem Panel via rechte Maustaste ein neues Element "CPU Frequency Monitor", "CPUFreq" oder "Governor Plugin" hinzu. Die Paketnamen lauten [1]:

  • xfce4-cpu-freq-plugin (universe, Anzeige und Änderung der Taktfrequenz)

  • xfce4-cpufreq-plugin (universe, nur Anzeige der Taktfrequenz)

  • xfce4-governor-plugin (universe, Anzeige und Änderung des Governors)

Befehl zum Installieren der Pakete:

sudo apt-get install xfce4-cpu-freq-plugin xfce4-cpufreq-plugin xfce4-governor-plugin 

Oder mit apturl installieren, Link: apt://xfce4-cpu-freq-plugin,xfce4-cpufreq-plugin,xfce4-governor-plugin

Alternativ ist es auch möglich, durch Installation des Pakets

  • xfce4-xfapplet-plugin

Befehl zum Installieren der Pakete:

sudo apt-get install xfce4-xfapplet-plugin 

Oder mit apturl installieren, Link: apt://xfce4-xfapplet-plugin

GNOME Panel-Applets unter Xfce auszuführen.

Kommandozeile

Zur Kontrolle (Änderungen sind nicht möglich) dient das Programm cpufreq-info aus dem Paket:

  • cpufrequtils (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install cpufrequtils 

Oder mit apturl installieren, Link: apt://cpufrequtils

Beispiel:

cpufreq-info 

Ausgabe für einen Pentium M Einkern-Prozessor (CPUs werden beginnend mit 0 hochgezählt):

cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
Bitte melden Sie Fehler an cpufreq@vger.kernel.org.
analysiere CPU 0:
  Treiber: acpi-cpufreq
  Folgende CPUs laufen mit der gleichen Hardware-Taktfrequenz: 0
  Die Taktfrequenz folgender CPUs werden per Software koordiniert: 0
  Maximale Dauer eines Taktfrequenzwechsels: 20.0 us.
  Hardwarebedingte Grenzen der Taktfrequenz: 600 MHz - 1.70 GHz
  mögliche Taktfrequenzen: 1.70 GHz, 1.40 GHz, 1.20 GHz, 1000 MHz, 800 MHz, 600 MHz
  mögliche Regler: conservative, ondemand, userspace, powersave, performance
  momentane Taktik: die Frequenz soll innerhalb 600 MHz und 1.70 GHz.
                    liegen. Der Regler "ondemand" kann frei entscheiden,
                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
  momentane Taktfrequenz ist 1.20 GHz.
  Statistik:1.70 GHz:14,12%, 1.40 GHz:0,02%, 1.20 GHz:0,03%, 1000 MHz:0,02%, 800 MHz:0,13%, 600 MHz:85,68%  (266)

Um schnell zwischen verschiedenen Governors umzuschalten, kann das folgende Skript verwendet werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh

echo "gov - show or set governor (set requires root privileges)"
echo "usage: [sudo] gov [o|ondemand|f|performance|p|powersave|c|conservative] \n"
echo "governor in use:"

getgov=$(cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)

case $1 in
  o|ondemand)     governor=ondemand;;
  f|performance)  governor=performance;;
  p|powersave)    governor=powersave;;
  c|conservative) governor=conservative;;
  *)         echo $getgov
         exit;;
esac

for g in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo $governor > $g; done
echo $(cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor)

Als gov abspeichern und ausführbar machen. Um den Governor ändern zu können, muss es mit Root-Rechten gestartet werden.

Hintergrundinfos und Einstellung im Terminal

Daten zur CPU-Frequenz auslesen

Alle relevanten Daten zur Taktfrequenz der CPU (wie z.B. mögliche Taktfrequenzen, aktuelle Taktfrequenz, Strategie für Taktfrequenzwechsel etc.) befinden sich in einem Unterverzeichnis von /sys. Dies ist keine "festes" Verzeichnis wie z.B. /usr oder /home, sondern wird bei jedem Systemstart bzw. zur Laufzeit dynamisch angelegt. Der Linux-Kernel legt in diesem Verzeichnis viele Systeminformationen ab. Um die Daten der CPU-Frequenz auszulesen, hilft das Verzeichnis /sys/devices/system/cpu/cpu0/cpufreq weiter.

Hinweis:

Hat man ein Mehrprozessorsystem, so existieren auch die Unterverzeichnisse .../cpu1/... , .../cpu2/... etc., je nach Anzahl der Prozessoren. Im Folgenden beziehen sich alle Beispiele auf die erste CPU (also cpu0). Alle Angaben sind aber 1:1 auf die anderen CPUs übertragbar.

Lässt man sich mit

ls /sys/devices/system/cpu/cpu0/cpufreq/ 

den Inhalt dieser Verzeichnisse ausgeben, erhält man eine Ausgabe wie z.B.

affected_cpus     ondemand                       scaling_driver    stats
cpuinfo_cur_freq  scaling_available_frequencies  scaling_governor
cpuinfo_max_freq  scaling_available_governors    scaling_max_freq
cpuinfo_min_freq  scaling_cur_freq               scaling_min_freq

ondemand (der Name ist abhängig vom gerade verwendeten Governor) und stats sind Verzeichnisse, alles andere sind Textdateien, welche bestimmte Informationen zur CPU bzw. zur Taktfrequenz enthalten. Fast alle Dateien können ohne weiteres mit cat in einem Terminal [2] angezeigt werden.

Soll z.B. die maximal mögliche CPU-Frequenz ausgelesen werden:

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 

1400000

Die Ausgabe erfolgt in KHz, d.h. diese CPU hat einen maximalen Takt von 1,4 GHz.

Details zum laufenden Governor

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 

conservative
ls /sys/devices/system/cpu/cpu0/cpufreq/conservative/ 

down_threshold  ignore_nice_load      sampling_rate      sampling_rate_min
freq_step       sampling_down_factor  sampling_rate_max  up_threshold

Über diese Dateien kann zusätzlich das Verhalten des Governors im Detail beeinflusst werden. Dies wird weiter unten beschrieben (Manuelle Änderungen vornehmen). Interessierte können die entsprechenden Informationen auch unter Weiterführende Informationen nachlesen.

Taktfrequenzgrenzen des Prozessors

Datei enthält Info zu
cpuinfo_cur_freq Die aktuelle Taktfrequenz der CPU.
cpuinfo_max_freq Die maximale Taktfrequenz der CPU.
cpuinfo_min_freq Die minimale CPU-Frequenz.

Taktfrequenzgrenzen des Governors

Die Taktfrequenzwechsel müssen nicht unbedingt innerhalb der durch die Hardware (CPU) vorgegebenen Grenzen erfolgen, die Grenzen für die Governor werden über folgende Dateien im Verzeichnis /sys/devices/system/cpu/cpu0/cpufreq festgesetzt:

Datei enthält Info zu
scaling_available_frequencies Gibt alle möglichen Frequenzen der CPU aus.
scaling_max_freq Maximal (für den Governor) erlaubte Frequenz; muss nicht zwangsläufig identisch mit cpuinfo_max_freq sein!
scaling_min_freq Minimale (für den Governor) erlaubte Frequenz; muss nicht zwangsläufig identisch mit cpuinfo_min_freq sein!
scaling_cur_freq Aktuell vom Governor eingestellte Taktfrequenz

Statistik über Taktfrequenzwechsel

Einige Statistiken zu den Frequenzwechseln enthält /sys/devices/system/cpu/cpu0/cpufreq/stats:

ls /sys/devices/system/cpu/cpu0/cpufreq/stats/ 

time_in_state  total_trans  trans_table

Den Dateien können folgende Informationen entnommen werden:

Datei enthält Info zu
time_in_state Wie lange wurde mit welcher Taktfrequenz gearbeitet
total_trans Anzahl der Taktwechsel
trans_table Übersicht, wie oft von welcher Frequenz auf welche andere Frequenz gewechselt wurde

Beispiel:

cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state 

1400000 53513
1200000 2616
1000000 2400
800000 2840
600000 1208171
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/total_trans 

5477
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/trans_table 

   From  :    To
         :   1400000   1200000   1000000    800000    600000
  1400000:         0       282       258       291      1549
  1200000:        52         0        12        12       206
  1000000:        48         0         0        14       208
   800000:        52         0         0         0       265
   600000:      2228         0         0         0         0

Manuelle Änderungen vornehmen

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Achtung!

Die unüberlegte oder unvorsichtige Änderung von Dateien, welche die CPU-Taktfrequenz beeinflussen, kann im schlimmsten Fall zur Beschädigung der Hardware führen!

⚓︎

Governor und Frequenzgrenzen ändern

Manuell lassen sich folgende Änderungen vornehmen:

  • maximal erlaubte obere Taktfrequenz

  • minimal erlaubte untere Taktfrequenz

  • zu verwendener Governor

Hinweis:

Die Umleitung über tee ist für das Wechseln des Governors notwendig, da ein direktes echo conservative > /sys/... nicht erlaubt ist und mit einer Fehlermeldung beendet wird.

Die Änderungen lassen sich per echo in die entsprechende Datei schreiben. Im folgenden Beispiel wird zuerst der aktuelle Governor abgefragt, dann die möglichen Alternativen und anschließend der Governor von "ondemand" auf "conservative" gesetzt:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 

ondemand
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 

powersave userspace ondemand conservative performance
echo conservative | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 

conservative

Zu bedenken ist, dass die Änderung flüchtig ist, d.h. nach einem Neustart des Rechners muss die gewünschte Änderung erneut vorgenommen werden. Oder man nutzt die folgende Anleitung:

⚓︎

Einstellung bei Systemstart festlegen

Mit Hilfe der sysfsutils lassen sich Einträge im Verzeichnis /sys bei Systemstart vornehmen. So ist es z.B. auch möglich, den Governor festzulegen, ohne jedesmal den Befehl echo <Option> | sudo tee ... aufrufen zu müssen.

Dazu muss man das Paket

  • sysfsutils (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install sysfsutils  

Oder mit apturl installieren, Link: apt://sysfsutils

installieren. Anschließend bearbeitet oder ergänzt man in der Konfigurationsdatei /etc/sysfs.conf in einem Editor mit Root-Rechten [3]. Um z.B. den "Ondemand Governor" festzulegen und den minimalen CPU-Takt auf 1,0 Ghz, ergänzt man folgende Zeilen:

devices/system/cpu/cpu0/cpufreq/scaling_governor = ondemand
devices/system/cpu/cpu0/cpufreq/scaling_min_freq = 1000000

Hinweis:

Hat man einen Mehrkernprozessor, so müssen die entsprechenden Einträge natürlich auch für die weiteren CPUs vorgenommen werden.

Hinweis:

Wenn man sysfsutils für die dauerhafte Änderung des Governors benutzen möchte, sollte man an dieser Stelle prüfen, ob man in /etc/init.d die Datei ondemand umbenennen/löschen/verschieben muss, es könnte sonst sein, dass sie nach dem Neustart die in /etc/sysfs.conf gemachten Einstellungen wieder überschreibt und der Governor wieder auf ondemand steht.

⚓︎

Kernel-Module

Die in diesem Artikel besprochenen Funktionen setzen voraus, dass ein entsprechendes Kernelmodul zur Taktfrequenzanpassung für den Prozessor geladen ist. Ob dies der Fall ist, lässt sich über den Befehl

lsmod |less 

feststellen (beenden mit q).

In der Übersicht sollte, je nach Prozessor, eines der folgenden Module auftauchen:

Prozessortyp Kernel-Modul
Intel Prozessoren neuerer Generation, bei korrekter ACPI-Implementierung acpi-cpufreq
Intel Centrino (Kompatibilitätsmodus) speedstep-centrino
Intel Pentium 4 (und teilweise neuere) p4-clockmod
Intel Pentium-III M speedstep-ich
AMD je nach Modellreihe powernow-k6, powernow-k7 oder powernow-k8
Mainboards mit Nforce2-Chipsatz cpufreq_nforce2

In manchen Fällen - gerade bei Notebooks - kann es vorkommen, dass das BIOS falsche ACPI-Tabellenwerte zurückliefert. Dann kann es sein, dass entweder kein Modul geladen wurde oder ein anderes nötig ist. Benutzer mit einem Intel Core Duo können bei Problemen unter Umständen Abhilfe schaffen, indem sie das Kernel-Modul p4-clockmod laden.

Ein Kernel-Modul wird mit

sudo modprobe -v modulname 

geladen. Näheres zum Umgang mit Modulen erfährt man unter Kernelmodule.

Nach dem Laden des richtigen Moduls sollte das Heruntertakten funktionieren. Wenn nicht, dann kann vielleicht noch ein BIOS-Update/-Downgrade (bekannte Bugs beim BIOS von Asus Mainboards; siehe Forum) oder der Artikel acpi-fix helfen.

⚓︎

Weiterführende Informationen

Weitere Informationen zu den verschiedenen Governors, den Dateien im Verzeichnis /sys/devices/system/cpu/cpu0/cpufreq und manuellen Eingriffsmöglichkeiten enthält die Kernel-Dokumentation. Diese kann über folgendes Paket installiert werden [1]:

  • linux-doc

Die entsprechenden Dokumente befinden sich dann im Verzeichnis /usr/share/doc/linux-doc-KERNELVERSION/Documentation/cpu-freq, wobei die KERNELVERSION je nach System variiert.

Probleme und Lösungen

ondemand-Governor startet nicht

ab Ubuntu 9.04

Per Design - it's a feature, not a bug - wird der Rechner mit dem Governor performance gestartet. Nach kurzer Zeit (wenige Minuten) übernimmt der neue Dienst ondemand die Aufgabe, den Governor ondemand zu aktivieren. Damit ist Ubuntu in der Lage, den Systemstart zu beschleunigen, während der Prozessor im normalen Betrieb dynamisch geregelt wird.

Allerdings können Probleme mit manchen CPUs auftreten, die auf performance bleiben. Zur Diagnose die Datei /var/log/kern.log auf Fehlermeldungen prüfen. Beispiel:

ondemand governor failed, too long transition latency of HW, fallback to performance governor

Praktisch heißt das: der Prozessor ist nicht in der Lage, ausreichend schnell herunter- bzw. hochzutakten. Daher wird er dauerhaft mit der höchsten Taktfrequenz betrieben.

Speziell beim Pentium 4 kann der Einsatz eines userspace-Governors wie powernowd in Kombination mit dem Kernelmodul p4-clockmod helfen. Powernowd ist aber nur bis Ubuntu 10.10 in den Paketquellen enthalten. Damit powernowd funktioniert, müssen noch die Start-/Stop-Level von ondemand angepasst werden:

sudo update-rc.d -f ondemand remove
sudo update-rc.d ondemand start 20 2 3 4 5 . stop 20 0 1 6 . 

Dann muss powernowd neu gestartet werden:

sudo /etc/init.d/powernowd restart 

Das Panel-Applet cpufreq-selector unter GNOME sollte dann nur noch zur Kontrolle verwendet werden. Obwohl einzelne Taktstufen frei wählbar sind, bewirkt die Auswahl von "Conservative" und "Ondemand" in manchen Fällen einen Rückfall auf "Performance" ("Powersave" funktioniert). Die Kontrolle kann alternativ auch mit PowerTOP erfolgen.

Der Dienst ondemand kann auch der Grund sein, wenn eigene Einstellungen (z. B. über /etc/rc.local) wieder überschrieben bzw. zurückgesetzt werden. Dies sollte bei Manipulationen am Governor beachtet werden.

Ubuntu 10.04

Hier empfiehlt sich der Einsatz des Programms cpufreqd:

  • cpufreqd (universe)

  • cpufrequtils (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install cpufreqd cpufrequtils 

Oder mit apturl installieren, Link: apt://cpufreqd,cpufrequtils

Die Konfiguration erfolgt über die Datei /etc/cpufreqd.conf. Einfach einen Eintrag für ondemand erzeugen und den restlichen Einträge ausdokumentieren oder ersatzlos löschen.

Prozessor taktet bei unwichtigen Prozessen hoch

Ab Ubuntu 9.04 werden auch Prozesse niedriger Priorität (kleiner nice-Wert) bei dynamischen Govenor (z.B. ondemand) bei Auslastung mit hoher Taktfrequenz bearbeitet. Dies kann bei Hintergrundprozessen (z.B. BOINC) unerwünscht den Stromverbrauch erhöhen. Dies wird mit dem Setzen der Datei ignore_nice_load auf 1 geändert. Die einfachste Methode ist es, dies mit Hilfe der sysfsutils gleich beim Start festzulegen. Dazu muss das Paket sysfsutils installiert sein.

Dann öffnet man die Datei /etc/sysfs.conf mit einem Texteditor [3] und Root-Rechten [4] und fügt folgende Zeilen ein:

devices/system/cpu/cpu0/cpufreq/scaling_governor = ondemand
devices/system/cpu/cpu0/cpufreq/ondemand/ignore_nice_load = 1

Dann wird automatisch beim Start des Systems der Ondemand-Govenor eingestellt, allerdings ignoriert er dann Prozesse niedriger Priorität.

Diese Revision wurde am 13. Januar 2012 18:49 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Hardware, System