Debian GNU/Linux auf dem IBM Thinkpad R50p
« zurück (ACPI, Suspend) • Inhalt • (Sondertasten) weiter »
Strom sparen (cpufreqd, slocate)
Die Taktfrequenz der CPU ist zwar ausschlaggebend für die Geschwindigkeit des Gesammtsystems, bei der täglichen normalen Nutzung meines R50p ist mir aber kein merklicher Unterschied zwischen 600 Mhz und den möglichen 1700 Mhz aufgefallen.
Das könnte aber auch an der Verwendung des CPU Frequency Daemon (cpufreqd) liegen, der je nach augenblicklich benötigter Systemleistung die Taktung der CPU anpasst. Hierzu dienen sogenannte Governors, die eine Art Taktpolitik darstellen.
In meinem Kernel sind die Governors in Module ausgelagert. Will man sie verwenden, müssen die Module vorher geladen werden, deshalb trägt
man sie am besten in die Datei /etc/modules
ein:
# /etc/modules [...] # >>> nur ein Modul aktivieren! #acpi-cpufreq speedstep-centrino # <<< # Governor Module cpufreq_userspace cpufreq_ondemand cpufreq_conservative [...]
Die Liste der verfügbaren Governors kann mit Auslesen des Wertes scaling_available_governors
abgefragt werden:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace performance
Der Defaultwert ist "performance", d.h. die CPU wird mit der höchstmöglichen Frequenz getaktet. Wie bereits erwähnt, ist das aber gar nicht nötig und erhitzt einerseits nur die CPU, andererseits senkt es die Akkulaufzeit.
Im Gegensatz dazu steht der Governor "conservative", der die CPU mit der niedrigstmöglichen Frequenz taktet. Bei dem Pentium M aus dem R50p sind das 600 MHz.
Der Governor "userspace" ist für die Taktung durch andere Programme und "ondemand" stellt Rechenleistung dann bereit, wenn man sie benötigt.
Im Folgenden nun auszugsweise Definitionen und Regelsätze für die Konfigurationsdatei /etc/cpufreqd.conf
.
Definition eines konservativen Default-Modes mit der ID "Conservative High":
[Profile] name=Conservative High minfreq=33% maxfreq=100% policy=conservative [/Profile]
Die Default-Regel für den eben definierten Modus lautet dann wie folgt:
[Rule] name=AC Rule ac=on # (on/off) profile=Conservative High [/Rule]
Sobald das Notebook an die Stromversorgung angeschlossen ist, wird also in diesem Modus gearbeitet. Im Falle des Akkubetriebs soll ein anderer Modus verwendet werden, ebenso falls die CPU zu heiß ist und so weiter...
Der Paket-Maintainer hat bereits eine Menge Beispiele implementiert, die man entsprechend anpassen kann und somit gehe ich hier nicht weiter ins Detail. Alternativ kann man hier auch meine Konfigurationsdatei für den cpufreqd runterladen: cpufreqd.conf.
slocate hilft Zeit und Strom sparen
Wer öfters an der Konsole arbeitet und nach Dateien sucht, hat sicher schon das Werkzeug locate entdeckt. In der Standardkonfiguration wird einmal am Tag die Festplatte katalogisiert und in einer Datenbank gespeichert, die dann bei Suchanfragen wie z. B.
$ locate datei.txt
anstelle des Dateisystems bemüht wird. Das spart Zeit und auch Strom im Akkubetrieb, da die Festplatte nicht so sehr in Mitleidenschaft gezogen werden muss. Das Tool locate hat aber einen entscheidenden Nachteil: Die Katalogisierung erfolgt normalerweise als nicht-privilegierter Benutzer, der auf die interessanten Verzeichnisse (wie z. B. das eigene Heimverzeichnis) keinen Zugriff hat. Somit können sich darin befindende Dateien auch nicht mit locate gefunden werden.
Diesen Nachteil behebt das Tool slocate (s = secure, sicher), bei dem die Aktualisierung der Datenbank als root ausgeführt wird. Jetzt kann man natürlich bei einem Mehrbenutzerbetriebssystem gleich an Schutz der Privatsphäre und Sicherheitsaspekte denken. Im Gegensatz zu locate wird bei slocate bei einer Suchanfrage geprüft, ob der Benutzer ausreichende Rechte hat, um die Datei lesen zu können. Es werden also nur die Dateien und Verzeichnisse angezeigt, die der Benutzer auch mit dem Kommando find auffinden kann.
Das Aktualisieren der Datenbank einmal am Tag sollte natürlich nicht unbedingt während einer "uneingestöpselten"
Sitzung passieren, d. h. es muss verhindert werden, dass die Datenbank bei Akkubetrieb aktualisiert wird. Hierzu muss man die Datei
slocate im Verzeichnis /etc/cron.daily
leicht modifizieren. Man kapselt einfach den
kompletten Ablauf mit einer Abfrage, ob sich das System gerade im Akkubetrieb befindet und startet die Aktualisierung nur, wenn dies nicht der
Fall ist. Das kann dann in etwa so aussehen:
#! /bin/sh # do not execute if on battery power if [ `grep on-line /proc/acpi/ac_adapter/AC/state | wc -l` -ne 0 ] then [... Inhalt der Datei /etc/cron.daily/slocate ...] fi # end not on battery power
Jetzt wird die slocate-Datenbank nur noch aktualisiert, wenn das Notebook mit dem Netzteil am Stromnetz angeschlossen ist.