{{{#!vorlage Wissen [:Terminal:einen Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/config.png, 48, align=left)]] 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 ''"(Scaling-)Governor"'', wie die Taktfrequenz automatisch geregelt bzw. konkret angepasst wird. Moderne CPUs und die entsprechenden Module im Linux Kernel besitzen vielfältige Mechanismen zum Stromsparen und verschiedene Modi / (Tief-) Schlafmodi, die [#CPU-Zustaende-C-States C-States]. Deshalb ist ein manueller Eingriff in das Umschaltverhalten des Taktfrequenz bzw. der Wahl des Governors in der Regel nicht notwendig oder empfehlenswert. Wer dies trotzdem tun möchte findet im Abschnitt [#manuelle-Einstellungen manuelle Einstellungen] einige Hinweise dazu. {{{#!vorlage Hinweis Je nach Prozessortyp stehen gegebenenfalls nicht alle in diesem Artikel beschriebenen Abfrage- und Einstellmöglichkeiten zur Verfügung, wenn im BIOS des Rechners bestimmt Funktionen der CPU aktiviert bzw. deaktiviert werden können. }}} = CPU Treiber und Governor = Für jede CPU bzw. für genau genommen für jeden CPU-Kern ist ein Treiber in Form eines Kernelmoduls zuständig. Jeder Treiber wiederum stellt verschiedene "Scaling Governor" (oder kurz nur : "Governor") zur Verfügung, die das Wechseln der Taktfrequenz des CPU-Kerns zuständig sind. == Kernel-Module == Die folgenden Tabelle gibt eine Übersicht über einige Kernelmodule für x86 CPUs: {{{#!vorlage Tabelle <-2 tableclass="zebra_start3" rowclass="titel">Übersicht Kernel Module für CPUs +++ Kernel-Modul Prozessortyp(en) +++ `intel_pstate` Intel Core i Prozessoren [wikipedia:Intel-Sandy-Bridge-Mikroarchitektur:Sandy Bridge und neuer] (=alle Intel Core i CPUs ab 2011) +++ `amd_pstate` neuere AMD Prozesoren mit Zen 2 und Zen 3 (oder neuer) Architektur +++ `acpi-cpufreq` AMD Prozessoren der Athlon 64, Opteron und Phenom Serien +++ `p4-clockmod` Intel Pentium 4, Xeon und Celeron Prozessoren +++ `powernow-k8` AMD K8, K10 sowie ältere Athlon 64, Opteron und Phenom Prozessoren +++ `speedstep-lib` Intel Atom und altere Pentium Prozessoren +++ `cpufreq_nforce2` Mainboards mit Nforce2-Chipsatz }}} Welches Modul geladen ist, kann man über die Ausgabe von {{{#!vorlage Befehl lsmod | less }}} feststellen (beenden mit [[Vorlage(Tasten, q)]]. In neueren Ubuntu-Versionen sind die Module teilweise statisch in den Kernel eingebunden, und werden daher nicht von `lsmod` angezeigt. Für `intel-pstate` (das Standmodul für alle Core i Prozessoren ab 2011) prüft man das z.B. mit folgendem Befehl. Steht am Ende der Ausgabezeile ein "y", ist das Modul fest in den Kernel eingebunden und wird daher bei jedem Start geladen. {{{#!vorlage Befehl grep INTEL_PSTATE /boot/config* }}} {{{ ... /boot/config-4.4.0-104-generic:CONFIG_X86_INTEL_PSTATE=y ... }}} Eine vollständige Übersicht über alle Module, die im aktuellen Linux-Kernel enthalten sind, findet man auf der Github-Seite des Linux-Kernels: * [github:torvalds/linux/blob/master/drivers/cpufreq/Kconfig.x86:für x86 (64bit und 32bit) CPUs] * [github:torvalds/linux/blob/master/drivers/cpufreq/Kconfig.arm:für ARM CPUs] * [github:torvalds/linux/blob/master/drivers/cpufreq/Kconfig.powerpc:für PowerPC CPUs] [[Anker(governor)]] == Scaling Governor == Der "Scaling Governor" oder kurz einfach nur Governor, bestimmt, wann und wie welche CPU die Taktfrequenz wie ändert. Es gibt die folgenden Governor: {{{#!vorlage Tabelle Governor Beschreibung +++ `ondemand` Standard bei den meisten Systemen, die nicht das Intel P-State Modul für die CPU verwenden. 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` CPU läuft permanent auf der höchsten erlaubten Taktfrequenz +++ `powersave` CPU läuft permanent auf der niedrigsten erlaubten Taktfrequenz. +++ `schedutil` Die CPU-Frequenz wird abhängig von dem Arbeitsaufkommen des [wikipedia:Prozess-Scheduler:Schedulers] angepasst. +++ `userspace` Dies ist kein kernel-eigener Governor. Vielmehr wird ein eigenes Governor-Programm verwendet. }}} Je nach CPU-Architektur und Typ stehen nicht alle Governor zur Verfügung. So kennt z.B. das Intel P-State Modul, welche für alle neueren Core i CPUs der Standard ist, nur die Governors "`Performance`" und "`Powersave`". = Informationen zur Prozessortaktung ermitteln = Informationen zum Prozessor bzw. dessen Taktfrequenz sind im [:Verzeichnisstruktur/#sys:sys-Verzeichnis] zu finden. Der Befehl[1] {{{#!vorlage Befehl ls /sys/devices/system/cpu/cpu0/cpufreq/ }}} zeigt das Verzeichnis für die `cpu0` an, in dem alle Informationen hinterlegt sind. Solch ein Verzeichnis gibt es für jede CPU, d.h. für eine 4-Kern CPU gibt es auch die Verzeichnisse '''cpu1''', '''cpu2''' und '''cpu3'''. Die Ausgabe für z.B. eine Intel i5 Prozessor sieht so aus: {{{ affected_cpus related_cpus scaling_governor cpuinfo_max_freq scaling_available_governors scaling_max_freq cpuinfo_min_freq scaling_cur_freq scaling_min_freq cpuinfo_transition_latency scaling_driver scaling_setspeed }}} {{{#!vorlage Hinweis Bei anderen CPU-Architekturen und Typen kann die Ausgabe leicht variieren. }}} Die verschiedenen Dateien beinhalten die folgenden Informationen: {{{#!vorlage Tabelle Datei enthaltene Information +++ '''scaling_driver''' Name des Linux Kernel Treibers, der für die CPU zuständig ist +++ '''scaling_governor''' Name des [#scaling-govenor Governors], der aktuell die Taktfrequenz des CPU-Kerns regelt +++ '''scaling_available_governors''' Liste der für diesen CPU-Kern verfügbaren Governor +++ '''scaling_max_freq''' Frequenz in Hertz, mit der der Governor den CPU-Kern maximal laufen lässt +++ '''scaling_min_freq''' Frequenz in Hertz, mit der der Governor den CPU-Kern minimal laufen lässt +++ '''cpuinfo_max_freq''' Frequenz in Hertz, mit der der CPU-Kern maximal laufen kann +++ '''cpuinfo_min_freq''' Frequenz in Hertz, mit der der CPU-Kern minimal laufen kann }}} = CPU Zustände - C-States = CPUs, wie sie üblicherweise in Desktop-Rechnern und Servern verwendet werden, kennen verschiedene Zustände der Leistungaufnahme die [wikipedia:Advanced_Configuration_and_Power_Interface#Prozessorzustände_(CPU-States):C-States]. Diese werden mit dem Buchstaben C, gefolgt von einer Zahl und ggf. gefolgt von einem weiteren Buchstaben, gekennzeichnet. Der Zustand C0 ist der CPU (bzw. eines CPU-Kerns) unter Last, also wenn der Kern voll aktiv ist. Je höher die Zahl hinter dem C, desto weniger Strom braucht der CPU-Kern in diesem Moment. Die Anzahl der Zustände, die die CPU 0 des Rechners kennt, sind im Verzeichnis '''/sys/devices/system/cpu/cpu0/cpuidle/''' zu sehen. Hier gibt es Unterverzeichnisse mit den Namen '''state0''' bis '''stateX''', wobei X je nach CPU-Architektur und Typ variieren kann. In jedem Verzeichnis sind Informationen zum jeweiligen C-State abgelegt. Die Nummerierung der Verzeichnisse muss zumindest ab '''state2''' nicht dem C-State entsprechen. So kann z.B. im Verzeichnis '''state2''' die Information zum C-State C1E abgelegt sein. Der Inhalt eines state-Verzeichnisses kann z.B. so aussehen: {{{ above below desc disable latency name power residency time usage }}} Die Dateien enthalten die folgenden Informationen: {{{#!vorlage Tabelle Datei Beschreibung +++ '''name''' enthält den Namen des C-States (also z.B. C0) +++ '''time''' Zeit in Mikrosekunden, die der CPU-Kern in diesem C-State verbracht hat +++ '''usage''' Zähler, wie oft der CPU-Kern in diesen C-State gewechselt hat }}} Ein vollständige Beschreibung aller Dateien ist in der [https://www.kernel.org/doc/html/v5.4/admin-guide/pm/cpuidle.html#representation-of-idle-states Kernel-Dokumentation] {en} zu finden. = manuelle Einstellungen = [[Vorlage(Fortgeschritten)]] {{{#!vorlage Warnung Die unüberlegte oder unvorsichtige Änderung von Dateien, welche die CPU-Taktfrequenz beeinflussen, kann im schlimmsten Fall zur Beschädigung der Hardware führen! }}} In aktuellen Ubuntu-Versionen wird die Prozessorsteuerung vollautomatisch über eine vordefinierte Kernel-Einstellung bzw. die zuständigen Module im Kernel geregelt. Damit muss der Anwender diesbezüglich eigentlich nichts weiter tun. Wie in der Einleitung schon erwähnt, haben moderne CPUs und deren Kernel Treiber sehr effizient Mechanismen zum Stromsparen implementiert. Ein manueller Eingriff kann also auch dazu führen, dass eine vermeintlich Optimierung letztendlich zu einem erhöhten Energieverbrauch der CPU führt. So kann es z.B. bei rechenintensiven Aufgaben effizienter sein, kurz mit hoher Frequenz ( = höherer Stromverbrauch) zu rechnen und dann wieder in einen Halte- oder Schlafzustand zurück zu fallen, als über einen längeren Zeitraum mit niedriger oder mittleren Frequenz zu rechnen. Wer dies nichts desto trotz machen möchte, findet im folgenden Abschnitt die entsprechenden Befehle. === Governor und Frequenzgrenzen ändern === Manuell lassen sich folgende Änderungen vornehmen: * maximal erlaubte obere Taktfrequenz * minimal erlaubte untere Taktfrequenz * zu verwendender Governor Die Änderungen lassen sich per [:echo:] und [:Shell/tee:tee] in die entsprechende Datei schreiben. Im folgenden Beispiel wird zuerst für den ersten CPU-Kern der aktuelle Governor abgefragt, dann die möglichen Alternativen und anschließend der Governor von "`powersave`" auf "`performance`" gesetzt: {{{#!vorlage Befehl cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor }}} {{{ powersave }}} {{{#!vorlage Befehl cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors }}} {{{ powersave performance }}} {{{#!vorlage Befehl echo performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor }}} {{{ performance }}} Im nächsten Beispiel wird die maximale Taktfrequenz von 2700000 (=2.7 GHz) auf 2000000 (=2.0 GHz) begrenzt: {{{#!vorlage Befehl cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq }}} {{{ 2700000 }}} {{{#!vorlage Befehl echo 2000000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq }}} Die [:Shell/Umleitungen:Umleitung] über '''tee''' ist für das Wechseln des Governors notwendig, da ein direktes `echo XXX > /sys/...` nicht erlaubt ist und ein vorangestelltes sudo, `sudo echo XXX > /sys/...` sich nur auf den Echobefehl, nicht aber auf die Umlenkung erstreckt. Zu bedenken ist, dass die Änderung flüchtig ist, d.h. nach einem Neustart des Rechners muss die gewünschte Änderung erneut vorgenommen werden. [[Anker(doku)]] = 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]: {{{#!vorlage Paketinstallation 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. = Problembehebung = == es wird kein CPU Modul geladen == In manchen seltenen 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. Ein Kernel-Modul wird mit {{{#!vorlage Befehl 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_aktualisieren:BIOS-Update/-Downgrade] (bekannte Bugs beim BIOS von Asus Mainboards; siehe [topic:acpi-cpufreq-no-such-device:Forum]) helfen. == ondemand-Governor startet nicht == Per Design - "it's a feature, not a bug" - wird der Rechner ab [:Jaunty:Ubuntu 9.04] mit dem Governor `performance` gestartet. Nach kurzer Zeit (wenige Minuten nach Systemstart) übernimmt der neue [:Dienste:Dienst] `ondemand` die Aufgabe, den gleichnamigen 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 in Kombination mit dem Kernelmodul `p4-clockmod` helfen. Obwohl einzelne Taktstufen dann 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 wieder überschrieben bzw. zurückgesetzt werden. Dies sollte bei Manipulationen am Governor beachtet werden. = Links = * [:laptop-mode-tools:] - Taktfrequenz etc. eines (Laptop-) Computers kontrollieren * [:Strom_sparen:Strom sparen] - weitere Maßnahmen, um (am Laptop) Strom zu sparen * [attachment:Prozessortaktung/cpu_freq-0.03.sh:Shell-Skript zum schnellen Anzeigen der möglichen CPU-Frequenzen, verfügbarer Governors etc.] {dl} * [https://www.thinkwiki.org/wiki/How_to_use_cpufrequtils How to use cpufrequtils] {en} * [askubuntu:544266/why-are-missing-the-frequency-options-on-cpufreq-utils-indicator:Why are missing the frequency options on cpufreq-utils indicator?] {en} # tag: Hardware, System