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.

  1. Install cpufrequtils:

    aptitude install cpufrequtils
  2. Edit /etc/default/cpufrequtils, make sure it has ENABLE="true".

  3. 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:

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