I'm running daemons cpufreqd and cpufrequtils with speedstep-centrino module
The daemons are enable at boot time:
It uses the configuration stored in /etc/default/cpufreqd
# Cpufreqd startup configuration
# CPU kernel module.
# Leave empty if you wish to load the modules another way,
# or if CPUFreq support for your cpu is built in.
# Governor modules.
# A list separated by spaces. They are needed by cpufreqd
# to load your policies. The init script can automatically
# try to load them. Leave empty to disable loading governor
# modules at all, use "auto" to let the script do the job.
Modify your CPUFREQ_CPU_MODULE so that it points to your cpufreq module.
If set to auto, the daemon will parse /etc/cpufreqd.conf and modprobe all the necessary governor modules (cpufreq_powersave, cpufreq_performance,..).
configuring the cpufreq modules and installing/configuring the cpuspeed daemon
This takes as input /etc/default/cpufrequtils conf file
This sets the governor to userspace here. If set to auto in cpufreqd, then I think this daemon is not needed.
seconds, cpufreqd checks for conditions written in RULE parts which refer to PROFILE parts of /etc/cpufreqd.conf.
The conditions can be : Battery charge, CPU speed, Temperatures, presence or not of some processes,..
Then a score is established for each RULE and the winner gets its profile activated (Powersave_High, Performance Low,..)
Also cpufreqd gets acpi event through its socket. Acpid package is required to trigger event from /proc/acpi/event events.
As an example I have currently this strategy:
When battery is >70 but CPU<20, set it to 1.2Ghz (save the planet and my ears eh)
When battery is >70 and CPU>20, set it to 1.6Ghz
When battery is <70 but CPU<20, set it to 600Mhz
When battery is <70 and CPU>20, set it to 1.2Ghz
When battery is <20, set it to 600Mhz
When temperature is too important, set it to 1.2Ghz
When mplayer, xine, vlc are running, set it to 1.6Ghz
I find it very powerfull.