Dynamic CPU frequency scaling (also known as CPU throttling) is a technique in computer architecture where a processor is run at a less-than-maximum frequency in order to conserve power (src: Wikipedia).
Howto enable Cpu Frequency Scaling
Note: In most cases, this should be enable automatically, during Debian installation.
Install cpufrequtils:
aptitude install cpufrequtils
Edit /etc/default/cpufrequtils, make sure it has ENABLE="true".
Restart the service (or the computer!)
invoke-rc.d cpufrequtils restart
Troubleshooting
Check how CPU is configured
Either add "CPU Frequency Scaling Monitor" to your Gnome panel, or run the command cpufreq-info, which prints one bloc like this per core:
analyzing CPU 0: driver: acpi-cpufreq CPUs which need to switch frequency at the same time: 0 hardware limits: 1000 MHz - 1.83 GHz available frequency steps: 1.83 GHz, 1.33 GHz, 1000 MHz available cpufreq governors: userspace, powersave, conservative, ondemand, performance current policy: frequency should be within 1000 MHz and 1.83 GHz. The governor "ondemand" may decide which speed to use within this range. current CPU frequency is 1000 MHz (asserted by call to hardware). cpufreq stats: 1.83 GHz:10.34%, 1.33 GHz:0.62%, 1000 MHz:89.04% (1068280)
There are two important information:
The statement The governor "ondemand", which means that this governor is loaded and enabled.
The statement current CPU frequency is XXXX MHz, If XXXX is lower than maximum speed, it probably means that it's working.
Governor ??
The [cpufreq] governor decides what frequency should be used (it uses the cpufreq driver to actually switch the CPU's policy).
As explained above, since Lenny, the cpufreq modules should be loaded using cpufrequtils.
Userspace Governors
In most cases, ondemand is the recommended governor. Cpu-freq governors are actually modules (Even though governor are modules, you should use cpufreq-info to know if the governors are loaded, and which one are active).
For more information about governors
read governors.txt (available in /usr/share/doc/linux-doc-2.6.26/Documentation/cpu-freq/ from the package linux-doc-2.6, you can read the latest version from kernel.org).
Userspace Governors
The userland based governors (cpufreqd, cpudyn, powersaved, powernowd ...) are usually not needed any more.
cpufreq drivers
As explained above, the governor defines the frequency scaling policy, but it doesn't instructs the CPU to change the speed directly... It needs a driver for that.
cpufrequtils has an init script that should load the appropriate driver at boot time.
The list of cpu-freq drivers available on your system can be obtained by running:
modinfo /lib/modules/$(uname -r)/kernel/arch/*/kernel/cpu/cpufreq/* | grep "^[fd]"
For more information about governors, read cpu-drivers.txt (available in /usr/share/doc/linux-doc-2.6.26/Documentation/cpu-freq/ from the package linux-doc-2.6, you can read the latest version from kernel.org).
See Also
The documentation in usr/share/doc/linux-doc-2.6.26/Documentation/cpu-freq/
cpufrequtils's documentation (esp. cpufreq-info(1) and cpufreq-set(1))
powertop is a tool to check what prevents the kernel from going to sleep mode (also read also http://www.lesswatts.org/projects/powertop/).