PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Undervolting und Speedstepping beim Intel-Centrino



Maja
01.11.07, 23:59
Hallo Linux-Gemeinde!

Ich bin jetzt jüngst komplett auf Linux umgestiegen. Nach der Installation von Fedora 7 (2.6.23.1-10.fc7) bin ich schon richtig zufrieden mit meinem Linux. NTFS-Partitionen und -Laufwerke konnte ich problemlos einbinden, Wlan funktioniert, Beryl macht alles richtig attraktiv, alle Programme, die ich im Alltag benötige, sind vorhanden und funktionieren bestens. Nun möchte ich noch meine CPU in den Griff kriegen, dann bin ich restlos zufrieden.

Für Windows XP benutzte ich bisher "Notebook-Hardware-Control", das ein Freund für mich sorgsam konfiguriert hatte. Mit diesem Programm ist es möglich, die Centrino-CPUs von Intel zu takten und vor allem auch die Spannungen anzupassen. Das Ergebnis ist, dass die Spannungen so weit runtergesetzt werden, mein Notebook stets stabil und vor allem lüfterlos arbeitete. Unter Linux läuft mein Lüfter leider aber, selbst wenn die CPU-Auslastung nur ganz gering ist, was meistens der Fall ist.

Über mein Panel habe ich in Fedora den "CPU Frequency Scaling Monitor" installiert. Damit lassen sich bereits 4 Taktstufen anpassen bzw. dass die CPU 'ondemand' hoch- und runtertaktet. Leider lassen sich nicht die Spannungen für die CPU einstellen und/oder weitere Taktstufen, so dass diese kühler liefe und somit der Lüfter ausbleiben könnte. Ebenso taktet die CPU viel zu früh hoch. Wenn ich die CPU fest auf 800 MHz setze, läuft Linux bereits absolut ausreichend, nur dass eben die Spannung immer noch zu hoch ist.

Ich habe jetzt ausführlich im Netz nach Lösungen für Linux gesucht und bin natürlich fündig geworden. Nur eine genaue Anleitung für Fedora konnte ich leider nicht finden. Aus den anderen Anleitungen werde ich schlicht nicht schlau. Stets passt irgend etwas nicht, funktioniert an irgend einer Stelle nicht usw.

Hier ein Beispiel für Ubuntu:
http://www.cywhale.de/tag/hardware/

Viele weitere Möglichkeiten, unterschiedliche Lösungsmöglichkeiten habe ich in der Gentoo-Wiki, Thinkpad-Wiki usw. gefunden. Komplierte Kernel usw. Ich hab es einfach nicht hingekriegt. Meine analytischen Fähigkeiten oder mein Linux-Wissen sind wohl zu begrenzt.

Hat es hier schon jemand geschafft einen Intel Pentium M (Dothan oder ähnlich) in der Spannung für Fedora 7 anzupassen oder kann mir aus Erfahrung weiterhelfen? Ich würde mich freuen...

Für Windows nutzte ich übrigens folgende Stufen für einen Pentium M 730 (Dothan, 1,6 GHz):

Multiplier / Spannung / Takt:
6 x 0700 / 800 MHz
8 x 0780 / 1066 MHz
9 x 0828 / 1200 MHz
10 x 0876 / 1333 MHz
11 x 0924 / 1465 MHz
12 x 0972 / 1600 MHz


Alles Liebe, Maja

DarkSpir
07.11.07, 01:04
Hi Maja,

damit der Kernel mit den Speedstep-Funktionen von Intel-CPUs umgehen kann, müssen einige Funktionen im Kernel aktiviert werden. Ich benutze hier Gentoo, habe daher die notwendigen Optionen fest in den Kernel kompiliert. Ich kann dir aber die Modulnamen nennen. Schau mal bei deinem Fedora Core nach, ob es die Module gibt, dann lade sie per Modprobe und wir haben die erste Hürde genommen. Unter Gentoo trägt man Module, die beim Systemstart mitgeladen werden sollen, unter /etc/modules.autoload.d/kernel-2.6 ein. Wo das bei Fedora Core passiert, kann ich dir jetzt aktuell nicht sagen.

Okay, folgende Module müssen geladen oder fest einkompiliert sein:
cpufreq
speedstep-centrino oder acpi-cpufreq (ersteres war früher das notwendige Modul, ist in der aktuellen Kernelversion als veraltet markiert und wurde durch acpi-cpufreq ersetzt. Wenn du es hast, benutze das Letztere)

Die Frequenz der CPU wird von einem sogenannten Governor gesteuert. Die Module hierzu heissen:

cpufreq-performance
cpufreq-powersave
cpufreq-userspace
cpufreq-ondemand
cpufreq-conservative

Je nachdem, welche Governor du benutzen willst, musst du auch die dementsprechenden Module mitladen. Jeder Governor hat seine eigene Vorstellung davon, wie er die CPU-Frequenz regelt. Ich als User kann ihm hierzu nur eine Untergrenze und eine Obergrenze vorgeben. Einzige Ausnahme hiervon ist der userspace-Governor, der macht garnix selbst sondern setzt lediglich die von mir gewünschte Frequenz. Ich kann, indem ich auf diesen Governor wechsele, die CPU-Frequenz manuell selbst steuern.

Performance: Fährt immer Vollgas (also Obergrenze).
Powersave: Fährt immer Sparflamme (als Untergrenze).
Ondemand: Fährt auf Sparflamme, setzt den Takt schrittweise hoch, wenn die CPU unter Last steht. Geht die CPU in den Leerlauf, setzt er den Takt schrittweise wieder runter.
Conservative: Fährt auch Sparflamme und lässt sich mehr Zeit mit dem Hochsetzen des Takts bei Vollast. Ist die CPU allerdings im Leerlauf, wird ruckzuck der Takt wieder runtergesetzt um den Akku möglichst optimal zu schonen.

Im Prinzip brauchen wir jetzt noch ein Paket namens cpufrequtils und wir können schon ein bisschen mit dem CPU-Takt herumspielen.

Mach ne Root-Konsole auf und gebe mal cpufreq-info ein. Der Befehl zeigt dir detailliert an, welcher Treiber für die Taktregelung in Verwendung ist, welche Frequenzen in welchen Abstufungen verfügbar sind, welcher Frequenzbereich genutzt wird, welcher Governor (im Deutschen als Regler übersetzt) über den Takt entscheiden darf und welche Governor überhaupt verfügbar sind. Holla, das ist schon ziemlich viel.

Mit cpufreq-set kannst du diese Werte beeinflussen. Ein Beispiel von meinem Laptop (Intel Core 2 Duo, 2.4 GHz): cpufreq-set -g userspace && cpufreq-set --min 800 MHz --max 2400 MHz && cpufreq-set --freq 1600 MHz

Damit wähle ich den Governor userspace (und bestimme die Taktung damit selbst), setze die untere Grenze auf 800 MHz (das Hardware-Minimum meiner CPU) und die obere Grenze auf 2.4 GHz (das Hardware-Maximum meiner CPU). Den tatsächlichen Takt lege ich schlussendlich dann mit 1.6 GHz fest. Der Befehl fummelt dummerweise immer nur an einer Schraube und muss daher mehrfach aufgerufen werden (Ausnahme: --min und --max können kombiniert werden). Ich hätte natürlich --min und --max auch auf 1600 MHz setzen können, nur muss ich dann, wenn ich den Takt ändern will, an drei Parametern drehen. So darf der userspace-Governor jetzt zwischen 800 und 2400 MHz "frei" entscheiden (du erinnerst dich, userspace hat keine Logik und macht nur stur das, was der User ihm sagt) und ich kann mit einem einfachen cpufreq-set --freq 2400 MHz beispielsweise Vollgas geben.

Wofür brauche ich --min und --max überhaupt? Ganz einfach. Bei den dynamischen Governors lege ich damit fest, in welchem Bereich er überhaupt entscheiden darf. Vielleicht will ich ja im Akku-Modus, dass im Bedarfsfall der Takt schnell hochgeschaltet wird (also Governor ondemand), die CPU allerdings generell nicht schneller als 1200 MHz arbeiten soll um den Akku zu schonen. Mit cpufreq-set -g ondemand && cpufreq-set --min 800 MHz --max 1200 MHz ist das ganz schnell eingestellt. Oder ich sage mir, ich brauch generell eine Mindestmenge an CPU-Leistung (******* auf Akkuzeiten! ;), der Takt soll unter Vollast allerdings erst langsam hochgeschaltet werden: cpufreq-set -g conservative && cpufreq-set --min 1200 MHz --max 2400 MHz wäre die Antwort z.B.

Okay, damit kannst du jetzt von Hand das Taktverhalten deiner CPU beeinflussen... und das ist genau das, was du NICHT wolltest, richtig? Installier mal das Paket cpufreqd. Das ist ein Daemon, der eingangsseitig bestimmte Ereignisse überwacht (Battieriemodus/Notebook am Stromnetz, CPU-Temperatur, CPU-Last, Füllstand der Batterie, bestimmte Anwendung im Arbeitsspeicher) und dann je nach Ereignis ein Profil wählt, in dem ein Governor und eine Frequenz-ober- und -untergrenze gesetzt ist. Dabei bedient er sich genau dieser Mechanismen, die wir eben gerade von Hand durchgespielt haben. Schau dir dazu mal http://www.gentoo.org/doc/en/power-management-guide.xml#doc_chap3 an, is zwar leider in Englisch, allerdings wird da grob die Funktionen der cpufreqd.conf erklärt, die letztendlich aber auch sehr selbsterklärend ist. Ansonsten gibts auf der Website des Tools http://cpufreqd.sourceforge.net ein paar Informationen und ne Beispielkonfiguration (die mir aber etwas gefrickelt aussieht).

Ich hoffe, ich konnte dir ein bisschen weiterhelfen. Achso, ja, auf Spannung bin ich jetzt gar nicht eingegangen. Ehrlich gesagt hab ich das bisher so verstanden, dass der jeweilige speedstep-Treiber sich darum kümmert, dass beim Runtertakten der CPU auch die Spannung passend dazu angepasst wird. Zumindest gibt es IMHO hierzu keine manuelle Regulierungsmöglichkeit. Man möge mich korrigieren, sollte ich im Irrtum sein.

Maja
07.11.07, 03:54
Vielen Dank, DarkSpir, für Deine Mühe und Deine Ausführungen. All das, wovon Du jetzt geschrieben hast, hatte ich allerdings schon eingerichtet und es funktioniert bestens. Dank Deiner Erläuterungen habe ich es aber noch mal überprüft.

Ich konnte bzw. kann per 'CPU Frequency Scaling Monitor' (Applet auf dem Panel) bereits vier Taktstufen direkt für den laufenden Betrieb auswählen. Desgleichen kann ich drei Verhaltensweisen aussuchen: conservative, ondemand, performance. Den wenigsten Lüftereinsatz erlebe ich freilich bei 'conservative'. Die CPU bleibt meistens bei ca. 800 Mhz und taktet nur bei Bedarf verzögert hoch. Das bringt natürlich schon einiges.

Die Taktstufen umfassen allerdings nicht die Möglichkeiten der CPU, die eigentlich sechs Taktstufen anwählen könnte. Wie das unter Windows und entsprechendem Programm zur Herabsetzung der Spannung ausschaut, habe ich im ersten Post ja bereits geschrieben.

Die werkseitigen Spannungen sind unter Linux jetzt aber so hoch, dass der Lüfter ständig selbst bei niedrigster Taktstufe anläuft. Bei herabgesetzten Spannungen (wie unter Windows bisher möglich) kann die CPU fröhlich takten und der Lüfter geht trotzdem nur bei längerer Belastung mal an.

Beispiele, dass dies auch unter Linux funktioniert, lassen sich für andere Distributionen im Netz finden. Nur komme ich selber immer wieder an eine Grenze, wo es für Fedora nicht funktioniert, wo vielleicht ja nur mal ein Pfad nicht stimmt. Ich weiß es nicht und kriege es leider nicht hin. Hier einige Beispiele, wo die Spannungen der Prozessoren runtergesetzt worden sind, die Kernel 'gepatcht' werden usw.:

http://www.thinkwiki.org/wiki/Pentium_M_undervolting_and_underclocking
https://www.dedigentoo.org/trac/linux-phc/
http://gentoo-wiki.com/HOWTO_Undervolt_a_Pentium_M_CPU
http://www.cywhale.de/tag/hardware/

Ein Freund hatte es mir (wie im ersten Post erwähnt) bereits unter Windows eingerichtet. Es bringt jetzt im Vergleich fast eine dreiviertel Stunde längere Arbeitszeit, wenn ich im Batteriebetrieb bin. Ansonsten läuft auch mein Notebook fast absolut lüfterfrei, was unter Linux jetzt noch nicht der Fall ist. Dabei braucht Linux wesentlich weniger Ressourcen als Windows, und auch die CPU taktet viel seltener hoch als in Windows.

Aber da komme ich jetzt nicht weiter...

Liebe Grüße, Maja

choener
07.11.07, 12:04
Schau dir mal http://tuxamito.com.es/cpupw/index.php an.

Cpupw arbeitet ebenfalls als governor, kann dazu aber noch undervolting.

Da muss nur "msr" im Kernel aktiv sein, was bedeutet das man nicht patchen muss.

===

Wenn du das machst, dann gehe langsam an die untere Voltgrenze heran und lasse jeweils Minuten/Stunden Primzahlen berechnen, ansonsten kann es dumme Überraschungen geben, wenn nur ganz mal irgendwas crasht.

DarkSpir
07.11.07, 12:33
Undervoltage through MSR registers (only in AMD K8 and intel Pentium-M based cpu's by now)
This program has no warranty at all. It lets you override the hardware manufacturer specifications so it could damage your hardware. But using lover voltages could make your hardware live longer tooAutsch. Bin ich mir sicher, dass ich das ausprobieren will?

choener
07.11.07, 13:37
Keine Ahnung, das kannst nur du wissen. Andererseits ist Undervolting im Zweifel ungefährlicher als Overvolting / Overclocking.

Da man aber ausserhalb der Spezifikation arbeitet, für die ein Prozessor freigegeben ist, sollte man sehr genau die Anleitung studieren und wissen was man tut.

Maja
07.11.07, 16:35
Danke, choener, das Programm könnte ein einfacherer Weg sein, selbst wenn ich damit gerade nicht mit klarkomme. Die Anleitung finde ich kaum nachvollziehbar, was der Autor demnächst verbessern will, wie er schreibt. Ich habe es jetzt aber noch nicht hinbekommen. "MSR" usw. sagt mir auch noch nichts. Aber ich werde mich da durchwühlen und die Suchmaschinen bemühen. Vielen Dank aber für den Hinweis schon einmal!

Für DarkSpir:
Zum Undervolting kann ich generell zunächst nur gute Erfahrungen rückmelden. Ein Freund hat meine CPU in Windows bereits undervoltet. Die Werte habe ich ja oben bereits gepostet, und die sollten auch unter Linux dann funktionieren. Er selbst hat es auch schon unter Linux gemacht, hat aber beruflich bedingt nur wenig Zeit, und ich will es auch mal selber hinkriegen. Die Vorteile sind genial. Das Notebook läuft stabil und stürzt nicht ab. Die Arbeitszeit, während des Batteriebetriebes liegt fast eine dreiviertel Stunde über der Zeit, die ich erreiche, wenn ich das Undervolting deaktiviere, wie jetzt z.B. in Linux. Der Prozessor läuft kühler, weshalb der Lüfter z.B. nur anspringt, wenn er ständig ausgelastet wird; bei mir selten der Fall. Im Grunde kann man wenig falsch machen. Mich hat seiner Zeit folgender Artikel überzeugt. Und seitdem genoss ich einen leisen, stabilen Rechner, den ich hoffentlich auch wieder unter Linux wieder so nutzen kann.
http://www.computerbase.de/artikel/hardware/komplettsysteme/2005/anleitung_mehr_akkulaufzeit_centrino/2/

Liebe Grüße, Maja

DarkSpir
08.11.07, 08:58
War/ist bei mir im Moment nicht so interessant, mein altes Laptop (Pentium-M 1,6 GHz Centrino Carmel) schaffte mit dem abgenudelten Akku grad mal 30 Minuten Laufzeit. Da der Lüfter mittlerweile komplett ausgefallen ist, bin ich gezwungen beim Booten den Governor Userspace zu wählen und das System auf 600 MHz fest herunterzutakten, sonst wird das Teil zu heiss. Leise ist er dann natürlich. *lach*

Ich hab gestern mit meiner neuen Kiste bei aktiviertem Laptop-Mode im Kernel auf einer längeren Autofahrt per qComicbook Mangas gelesen. Gut, die Last war jetzt so niedrig, dass er auf der niedrigsten Stufe blieb (800 MHz) und kaum an der Festplatte gerödelt hat. Nach 3 Stunden war ich bei einer Restkapazität von 66%. Ich muss das bei Gelegenheit mal bis an die Grenze austesten, eine rechnerische Laufzeit von 9 Stunden halte ich nämlich für Unsinn. Beeindruckend im Vergleich mit meiner alten Kiste war es aber trotzdem. Wenn ich da per Undervolting noch eine Halbe Stunde mehr aus dem Akku kitzeln kann, muss ich mich halt im Moment nur fragen: Wofür? Ich hab ja jetzt schon mehr als genug. :)

Aber wenn der Akku mal älter wird, wird das sicherlich interessant.

und3r
09.11.07, 16:14
bei mir muss ich das auch mal machen, hab ein IBM Thinkpad T42. Der standart akku hällt noch ca. 1,5h bei "normaler" Last, das ist mir definitiv zu wenig zum arbeiten unterwegs. Werde es mal testen und berichten.