Mittels Frequency Scaling läßt sich auch mit neueren Kernels die Taktrate dynamisch regulieren. Das funktioniert auch mit dem Pentium 4, der ja offiziell keine Throtteling zuläßt.
Im Kernel müssen dazu die folgenden Optionen aktiviert sein:
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_PROC_INTF=m
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_TABLE=y
Die Governor, regeln die Policy bezüglich des Taktes der CPU. Im 2.6. Kernel werden 3 Governor mitgeliefert: performance, powersave und userspace. Die Namen deuten es schon an, powersave steht für maximales heruntertakten. Im Gegensatz dazu wird bei Performance nicht heruntergetaktet. Bei Userspace Governor kann man mittels einer vorgegebenen Policy die Taktraten dynamisch beeinflußen.
Dies erreicht man zum Beispiel mit cpufreqd. Ein apt-get install cpufreqd reicht, um den entsprechenden Daemon zu installieren. Wenn der Kernel diese Optionen unterstüzt, findet man unter /sys/devices/system/cpu/cpu0/cpufreq verschiedene Pseudo-Dateien.
Anhand dieser Dateien kann man die aktuelle Policy beeinflussen und mögliche Werte auslesen:
cpuinfo_min_freq: Minimale Taktfraquenz
cpuinfo_max_freq: Maximale Taktfrequenz
cpuinfo_cur_freq: Aktuelle Taktfrequenz
scaling_driver: Treiber, der die Taktrate steuert.
scaling_available_frequencies: Mögliche Taktraten, die vom Prozessor genutzt werden können
scaling_available_governors: Governors, die die Policy vorgeben (Powersave, Performance und Userspace)
scaling_cur_freq: Aktuelle Taktfrequenz
scaling_governor: Die aktuelle Policy
scaling_max_freq: Maximale Taktrate
scaling_min_freq: Minimale Taktrate
scaling_setspeed: Aktuelle Taktrate
Die Scaling Werte beziehen sich auf eine Bandbreite von Taktfrequenzen, anzugeben als obere und untere Grenzwerte für ein Band bestimmen die Grenzwerte für eine Policy. Man kann durch ein simples echo neue Werte festlegen.
Dynamisches Takten mittels cpufreqd wird über die Datei /etc/cpufreqd.conf eingestellt. Meine aktuelle Konfiguration sieht so aus:
[General]
pidfile=/var/run/cpufreqd.pid
poll_interval=2
pm_type=acpi #(acpi, apm or pmu)
# Uncomment the following line to enable ACPI workaround (see cpufreqd.conf(5))
# acpi_workaround=1
verbosity=4 #(if you want a minimal logging set to 5)
[Profile]
name=hi_boost
minfreq=1575000
maxfreq=1800000
policy=performance
[Profile]
name=medium_boost
minfreq=1125000
maxfreq=1350000
policy=userspace
[Profile]
name=sleep_speed
minfreq=450000
maxfreq=900000
policy=powersave
# conservative mode when not AC
[Rule]
name=conservative
programs=opera,firefox,amarok,xmms
ac=on # (on/off)
cpu_interval=30-75
profile=medium_boost
# full power when AC
[Rule]
name=AC_on
cpu_interval=70-100
profile=hi_boost
[Rule]
name=sleep_cpu
ac=on
cpu_interval=0-80
delay_cycles=3
cpu_nice_scale=1.5
profile=sleep_speed
# full power when watching DVDs and not AC:
# this is the last rule and takes less
# precedence with respect to the others
[Rule]
name=dvd_watching
ac=off # (on/off)
battery_interval=0-100
programs=xine,mplayer,avidemux
cpu_interval=0-100
profile=hi_boost
Informationen zu cpufreqd finden sich in der Manpage von cpufreqd.conf, in der Kernel Dokumentation unter Documentation/cpu-freq und im
Mini-HOWTO zu cpufreqd