[[Vorlage(Archiviert )]] [[Vorlage(Hinweis, "Für AMD K8 CPUs gibt es auch Patches, die Installation dieser sollte ebenfalls beschrieben werden. http://www.linux-phc.org/forum/viewtopic.php?f=13&t=2. Ab Ubuntu 9.04 Jaunty kann der bereits gepatchte Kernel verwendet werden.")]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Packprogramme: Archive entpacken] [:Terminal: Ein Terminal öffnen] [:Kernelmodule: Umgang mit Kernelmodulen] }}} {{{#!vorlage Warnung Die Maßnahmen in dieser Anleitung geschehen auf eigenes Risiko, da der Prozessor außerhalb der Herstellerspezifikationen betrieben wird. Es sind noch keine dadurch entstandene Schäden bekannt, können aber nicht ausgeschlossen werden! Diese Anleitung ist deshalb nur für fortgeschrittene Benutzer geeignet, die neben guten Linux-Kenntnissen auch etwas Hardware-Fachwissen besitzen. }}} [[Inhaltsverzeichnis(1)]] [[Bild(phc_icon.png, align=left)]] Die hier beschriebenen Kernel-Patches haben das gleiche Ziel wie das verbreitete [http://www.pbus-167.com/ NHC (Notebook Hardware Control)] {en} unter Windows. Der Prozessor wird also mit weniger Spannung betrieben als das vom Hersteller vorgesehen ist. Die erzielbaren Verbesserungen hinsichtlich Akkulaufzeit und CPU-Temperatur sind vor allem unter Volllast sehr groß. Zur Zeit ist der Patch in dieser Anleitung allerdings nur für Intel Pentium-M (Centrino) und Core/Core 2 Solo/Duo CPUs geeignet! Allgemeine Informationen zum Thema Stromsparen findet man unter [:Strom_sparen:Strom sparen]. = Installation für Ubuntu-Versionen bis Hardy Heron 8.04 = Für den Ubuntu-Kernel benötigt man den Linux-PHC-Patch, der das Ändern der Spannungswerte durch Schreiben in eine Systemdatei erlaubt. Dabei wird lediglich das für die CPU-Steuerung zuständige Kernel-Modul (eine Datei) verändert. == Welches Kernel-Modul wird benötigt? == Zuerst sollte man überprüfen ob vom System das Modul `acpi-cpufreq` oder `speedstep-centrino` verwendet wird. Man verwendet dazu folgende Befehle [3]: {{{#!vorlage Befehl lsmod | grep acpi_cpufreq lsmod | grep speedstep_centrino }}} In der Ausgabe des ersten Befehls sollte `acpi_cpufreq` vorkommen. Dies bedeutet, dass der Prozessor mit diesem Modul gesteuert wird (Standard). Die nachfolgende Anleitung kann dann ohne Änderungen befolgt werden. Wenn das nicht der Fall ist und das im zweiten Befehl geprüfte Modul geladen ist, dann sollte eigentlich auf die speedstep-centrino-Variante von Linux-PHC zurückgegriffen werden. Dieser Patch ist allerdings nur für die Kernel-Version 2.6.22 (Ubuntu 7.10) verfügbar. In einigen Fällen kann aber trotzdem das Modul `acpi_cpufreq` verwendet werden. Näheres dazu im Abschnitt [#modul-erzwingen Modul erzwingen]. Da man für jede Kernel-Version den passenden Patch benötigt ist es außerdem noch wichtig zu wissen, welcher Kernel auf dem System installiert ist. Dies bekommt man mit dem Befehl {{{#!vorlage Befehl uname -r }}} heraus. Entscheidend ist dabei der vordere Teil der Kernelbezeichnung. == Modul selbst erstellen == Hier wird beschrieben, wie sich der Patch ohne Kompilieren des gesamten Kernels auf das Modul anwenden lässt. Noch einfacher ist es allerdings ein [#Vorkompiliert fertig kompiliertes Modul] (falls verfügbar) zu verwenden. Der Abschnitt "Modul selbst erstellen" kann dann übersprungen werden. === Vorbereitung === Folgende Pakete sind notwendig und müssen gegebenenfalls installiert werden [1]: {{{#!vorlage Paketinstallation build-essential linux-source linux-headers-generic }}} {{{#!vorlage Hinweis Die eigene Kernel-Version muss in der nachfolgenden Anleitung an den mit Stern gekennzeichneten Stellen (z.B. bei Befehlen) berücksichtigt und entsprechend eingesetzt werden! }}} Der Quellcode des Ubuntu-Kernels liegt nun als '''linux-source-2.6.*.tar.bz2''' im Ordner '''/usr/src'''. Von dort lässt sich das Archiv öffnen und beispielsweise in den Home-Ordner entpacken [2]. In den neu entstandenen Ordner muss dann noch der richtige Patch kopiert werden. Dazu wird die zum Kernel passende '''*.patch'''-Datei aus dem [http://www.linux-phc.org/viewtopic.php?f=13&t=2 linux-phc Entwicklerforum] {en} heruntergeladen. === Modul kompilieren === Nun startet man ein Terminal [3] und wechselt in das Verzeichnis mit dem Kernel-Quellcode und dem Patch: {{{#!vorlage Befehl cd linux-source-2.6.* }}} Zum Anwenden des Patchs muss folgender Befehl ausgeführt werden: {{{#!vorlage Befehl patch -p1 < linux-phc*.patch }}} Jetzt kann das Modul mit folgenden Befehlen kompiliert werden: {{{#!vorlage Befehl cd arch/x86/kernel/cpu/cpufreq/ make -C /lib/modules/$(uname -r)/build SUBDIRS=$(pwd) modules }}} Das fertige Modul namens '''acpi-cpufreq.ko''' (bzw. '''speedstep-centrino.ko''') liegt nun im eben kompilierten Ordner '''arch/x86/kernel/cpu/cpufreq'''. Diese Datei sollte man getrennt abspeichern. Sie wird später noch benötigt, während man den Rest des Ordners löschen kann. [[Anker(Vorkompiliert)]] == Alternative - Vorkompiliertes Modul auswählen == Um den vorherigen Schritt zu umgehen, kann auch ein fertiges Modul verwendet werden, das bereits für die verwendete Kernel-Version kompiliert wurde. Mögliche Quellen sind das [http://phcpatches.googlecode.com/svn/trunk/acpi-cpufreq/modules/ Subversion-Verzeichnis von linux-phc] {en} oder das Forum. == Modul installieren == Das zuvor generierte oder heruntergeladene Modul kann man nun mit Root-Rechten in den richtigen Ordner kopieren. Zuvor sollte aber (für den Fall der Fälle) eine Sicherheitskopie der alten Datei angelegt werden. {{{#!vorlage Befehl sudo cp acpi-cpufreq.ko /lib/modules/$(uname -r)/kernel/arch/x86/kernel/cpu/cpufreq }}} {{{#!vorlage Hinweis Nach jedem Kernel-Update muss dieser Schritt mit dem aufbewahrten Modul erneut ausgeführt werden. }}} Nach einem Neustart des Systems sollte die Schnittstelle von Linux-PHC in Form der Datei '''/sys/devices/system/cpu/cpu0/cpufreq/phc_controls''' vorhanden sein. Alternativ kann man mit Hilfe von [:Kernelmodule#modprobe: modprobe] das alte Modul aus dem Kernel entladen und das neue Modul laden. [[Anker(Benutzung)]] = Benutzung von Linux-PHC über das Terminal = == Spannungen auslesen == Die aktuellen Frequenz- und Spannungsstufen können über das SysFS-Interface im Terminal [3] ausgelesen werden: {{{#!vorlage Befehl cat /sys/devices/system/cpu/cpu0/cpufreq/phc_controls }}} Es sollte eine Ausgabe in dieser Form erfolgen: {{{ 13:38 10:30 8:24 6:18 }}} Der Wert vor dem Doppelpunkt entspricht der Frequenzstufe (FID), die Zahl dahinter der Spannungsstufe (VID). Im Gegensatz zu älteren Linux-PHC-Versionen werden hier keine absoluten Werte (Hz/V) mehr angezeigt. Dadurch können aber auch aktuelle und zukünftige Prozessoren unterstützt werden. Die FIDs/VIDs sind also lediglich die Werte, die der Prozessor intern in einem Bit-Register als Speicher verwendet. == Spannungen absenken == Durch Schreiben in die selbe Datei können die Spannungen (hier nur beispielhaft) geändert werden. Dazu darf lediglich die Spannungsstufe hinter dem Doppelpunkt verkleinert werden: {{{#!vorlage Befehl echo "13:22 10:10 8:5 6:0" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/phc_controls }}} {{{#!vorlage Warnung Wenn sie zu niedrig gewählt sind, friert das System ein und es muss neugestartet werden. Deshalb vorher unbedingt alles sichern und Datenträger möglichst aushängen! }}} Zur Überprüfung können die Werte nochmals wie oben abgefragt werden. Da die Spannungen nach oben und unten von der Hardware beschränkt sind kann nicht jeder Wert übernommen werden. Bei Core/Core 2 Solo/Duo CPUs ist die standardmäßig für die niedrigste Taktfrequenz eingestellte VID die niedrigste zugelassene. Man kann dann also nur die Spannung für höhere Frequenzen absenken. Für Besitzer von Zwei-Kern Prozessoren sei noch gesagt, dass sich der zweite Kern automatisch nach der zuletzt eingestellten Spannung richtet. Sobald die Spannungen ausreichend getestet sind, kann man mit der im Wiki-Artikel [:rc.local:] genannten Funktion die CPU-Spannung auch direkt beim Systemstart oder beim Eintritt in einen bestimmten Runlevel einstellen lassen. Dazu schreibt man einfach folgenden Befehl (Beispiel) zum Setzen der gewünschten Spannungen in die Datei hinein: {{{#!vorlage Befehl echo "13:22 10:10 8:5 6:0" > /sys/devices/system/cpu/cpu0/cpufreq/phc_controls }}} = Herausfinden möglicher Spannungseinstellungen = Die Spannungswerte müssen (behutsam) für jede einzelne Taktstufe individuell ermittelt werden, da sie selbst bei gleichen Notebook-Modellen stark variieren können. Anhaltspunkte für mögliche Werte finden sich in den Links am Ende dieser Seite. == Schrittweises Austesten bis zum Einfrieren des Systems == Bei noch unbekannter CPU-Spannungstoleranz muss man zum Ermitteln der "Schmerzgrenze" die Spannung Schritt für Schritt absenken, bis zum sogenannten "Einfrieren". Dazu kann z.B. folgendermaßen vorgegangen werden: 1. Alle wichtigen Datenträger aushängen bzw. laufende Schreibvorgänge unbedingt vermeiden. 1. Die zugehörige Taktstufe des zu verändernden Spannungswertes fest einstellen. Wie das geht ist unter [:Prozessortaktung:] beschrieben. 1. Nun kann Die VID um eine Stufe abgesenkt werden. 1. Auf Stabilität des Systems prüfen, möglichst mit prozessorlastigen Vorgängen (z.B. mittels [http://www.mersenne.org/ Prime95] {en} , [http://users.bigpond.net.au/cpuburn/ CPUBurn] {en} etc.) und zeitweise auch im Akkubetrieb. Falls keine Probleme auftreten Schritt 2 wiederholen. 1. Falls die 'Schmerzgrenze' erreicht wurde und das System einfriert, sollte dieser herausgefundene Wert um ein kleines 'Sicherheitspolster' erhöht werden, um ihn dann in Zukunft dauernd verwenden zu können. Nun kann mit der nächsten Frequenzstufe die selbe Prozedur wiederholt werden. == Einstellen bereits bekannter Werte in Volt == Da bereits vorhandene Werte meist in Form von direkten Spannungsangaben vorliegen, müssen die VIDs zur besseren Vergleichbarkeit in Volt umgerechnet werden. Dazu kann folgende Tabelle verwendet werden: || Prozessortyp ||Spannung|| || Intel Pentium M, Core, Core2 || 700.0 mV + VID * 16 mV|| || Core2 (alternativ) || 0.7125 V + VID * 0.0125 V|| __Rechenbeispiel:__ Der Abruf der aktuellen Default-VIDs im obigen Abschnitt ergab unter anderem das Pärchen `6:18`. Da `6` die niedrigste Frequenzstufe repräsentiert, möchte man dort als erstes die Spannung senken. Die Spannung beträgt nun laut Tabelle `700mV + 18*16mV = 988mV`. Da man aber aus Erfahrung weiß, dass der Wert 716mV auch für einen stabilen Betrieb reicht, stellt man dementsprechend die VID 1 ein. Andere Spannungen lassen sich analog berechnen. Die minimal einstellbare VID hängt übrigens vom Prozessortyp ab, es kann also nicht immer bis auf 0 abgesenkt werden. Wer seinen mathematischen Grund-Rechenfähigkeiten nicht traut, dem sei das graphische [#PHC-Tool PHC-Tool] mit automatischer Spannungsberechnung empfohlen. == Ausgangswerte == Wenn man während dem Testen verschiedener Spannungen die Ausgangswerte des Prozessors vergessen hat, kann man sie mit folgendem Befehl abrufen: {{{#!vorlage Befehl cat /sys/devices/system/cpu/cpu0/cpufreq/phc_default_controls }}} [[Anker(PHC-Tool)]] = Verwendung des PHC-Tools = [[Bild(./PHC-Tool.png, align=right)]] Das Einstellen gewünschter Spannungsstufen kann auch bequem über das PHC-Tool erfolgen. Dies ist eine graphische Oberfläche für das installierte Kernel-Modul und eignet sich gut zum Austesten verschiedener Spannungen. Dabei werden die FIDs und VIDs passend zum CPU-Typ in verständliche Einheiten umgerechnet. Hinweis: Besitzer von Zwei-Kern Prozessoren müssen für beide Prozessoren die gleiche VID für eine Spannung eingeben, damit die Einstellung Effekt hat. Herunterladen kann man das Programm aus dem entsprechenden [http://www.linux-phc.org/forum/viewtopic.php?f=14&t=17 Thread im Entwicklerforum] {en}. Nach dem Entpacken wird das PHC-Tool mit dem im neuen Ordner enthaltenen Skript '''phctool.sh''' gestartet. Weitere Hinweise zur Benutzung kann der beiliegenden Dokumentation im Ordner '''doc''' entnommen werden. Zu beachten ist lediglich noch, dass zur Überprüfung der Spannungen mit dem PHC-Tool zuvor das Kernel-Modul `msr` geladen werden muss. Dies wird hiermit erledigt: {{{#!vorlage Befehl sudo modprobe msr }}} = Problemlösungen = == Funktionstest == Wenn man sich nicht sicher ist, ob die Spannungssenkung erfolgreich war, kann man das mit folgenden Methoden testen. === Indirekt === Im Artikel [:Strom_sparen:Strom sparen] ist genau beschrieben, wie man den Stromverbrauch und die Temperatur messen kann. Nach dem Senken der Spannungen sollten hier vor allem bei hoher Last niedrigere Werte zu beobachten sein. === Mit dem PHC-Tool === Das [#PHC-Tool PHC-Tool] kann mit Hilfe des `msr`-Kernel-Moduls die tatsächlich in der CPU erreichten Spannungen ermitteln. === Brutale Variante === Wenn man die Spannung bei höheren Taktraten absichtlich viel zu weit absenkt, wird das Notebook "einfrieren", sobald es diese Stufe erreicht. == Fehler beim Abrufen von phc_controls == Zuerst sollte man überprüfen, ob die Datei '''/sys/devices/system/cpu/cpu0/cpufreq/phc_controls''' vorhanden ist. Danach kann man die folgenden Fälle unterscheiden. === Die Datei phc_controls fehlt === Mit dem Befehl `lsmod` sollte man nun überprüfen, ob das gepatchte Modul überhaupt geladen wurde. Wenn dies nicht passiert ist, kann man das Modul manuell laden, um eventuelle Fehlermeldungen zu erhalten. [4] === Die Datei phc_controls ist vorhanden, lässt sich aber nicht lesen ("No such device") === Dies kann bei manchen Pentium-M-Systemen passieren, die keine korrekte ACPI-Implementierung haben und nicht mit `acpi-cpufreq` kompatibel sind. Zur Vermeidung dieses Problems muss auf das `speedstep-centrino`-Modul ausgewichen werden. Der Patch dazu lässt sich analog zu obiger Anleitung kompilieren. Teilweise kann die ACPI-Implementierung auch durch ein BIOS-Update korrigiert werden. [[Anker(modul-erzwingen)]] == Ein Kernel-Modul erzwingen == Wenn man sich sicher ist, dass sein Laptop mit einem gepatchten `acpi_cpufreq` korrekt funktioniert, Ubuntu aber trotzdem `speedstep_centrino` verwendet (oder umgekehrt), dann hat man die Möglichkeit, das gewünschte Modul zu erzwingen. Im Einzelnen geschieht dies, durch [:Kernelmodule#Automatisches-Laden-verhindern-Blacklisting: Blacklisting] des unerwünschten Moduls und [:Kernelmodule#Module-automatisch-laden: automatisches Starten] des gewünschten Moduls. [4] = Links = * [http://www.linux-phc.org/ Linux Processor Hardware Control] {en} - Projektseite von linux-phc und PHC-Tool * [http://gentoo-wiki.com/HOWTO_Undervolt_a_Pentium_M_CPU HOWTO Undervolt a Pentium-M] {en} - Ursprünge des Kernelpatches (Gentoo-Community) mit Spannungstabellen für verschiedene Prozessoren * [http://www.computerbase.de/artikel/hardware/komplettsysteme/2005/anleitung_mehr_akkulaufzeit_centrino Mehr Akkulaufzeit für Centrino] {de} - Artikel mit einigen Grundlagen über Undervolting, allerdings für Windows * [http://openmindedbrain.info/09/05/2010/undervolting-in-ubuntu-10-04-lucid-lts Undervolting in Ubuntu 10.04] {en} - Anleitung mit Skript zur automatischen Anpassung der Prozessorspannung * [:Strom_sparen:] * [:Prozessortaktung:] * [:Archiv/Granola:] - Tool zur automatischen Anpassung der Prozessorfrequenz und -spannung, je nach jeweiliger Auslastung der CPU * [:Archiv/k10ctl:] - Alternative Anleitung # tag: Hardware, System