Difference between revisions of "How to make use of Dynamic Frequency Scaling"

From ThinkWiki
Jump to: navigation, search
(configuring SpeedStep daemons)
Line 1: Line 1:
===general===
+
==General==
 
Linux supports Dynamic Frequency Scaling for ThinkPads with mobile Pentium III, Pentium 4 and Pentium M processors.
 
Linux supports Dynamic Frequency Scaling for ThinkPads with mobile Pentium III, Pentium 4 and Pentium M processors.
  
===configuring the kernel===
+
===Configuring the Kernel===
 
+
====2.4 Kernels====
====2.4 kernels====
+
There were various frequency scaling implementations in the 2.4 series of kernels. They all were preliminary and a standard was rised with the introduction of the sysfs filesystem in 2.6 kernels. It is recommended to use a 2.6 kernel, if possible.
Todo...
 
 
 
====2.6 kernels====
 
  
 +
====2.6 Kernels====
 
You need to enable the cpu frequency scaling for your kernel (usually your distros kernel will have this enabled):
 
You need to enable the cpu frequency scaling for your kernel (usually your distros kernel will have this enabled):
 
  CONFIG_CPU_FREQ=y
 
  CONFIG_CPU_FREQ=y
Line 25: Line 23:
 
*If you have a p4-class celeron based Thinkpad like the R40e you might want to look at [[How to get SpeedStep working on P4-class-Celeron based Thinkpads | this page]]
 
*If you have a p4-class celeron based Thinkpad like the R40e you might want to look at [[How to get SpeedStep working on P4-class-Celeron based Thinkpads | this page]]
  
===using the sys interface===
+
==Using the Sys Interface==
  
 
The files in {{path|/sys/devices/system/cpu/cpu0/cpufreq/}} provide information and a means of controlling the frequency scaling subsystem.
 
The files in {{path|/sys/devices/system/cpu/cpu0/cpufreq/}} provide information and a means of controlling the frequency scaling subsystem.
Line 44: Line 42:
 
:{{cmdresult|cpu MHz        : 976.152}}
 
:{{cmdresult|cpu MHz        : 976.152}}
  
===using scaling gouvernors===
+
==Using Frequency Scaling Governors==
 
You can compile the scaling gouvernours into your kernel or compile it as module. You'll find the gouvernors with 'make menuconfig' here:
 
You can compile the scaling gouvernours into your kernel or compile it as module. You'll find the gouvernors with 'make menuconfig' here:
 
: <code>Power managemant options (ACPI, APM)  ---></code>
 
: <code>Power managemant options (ACPI, APM)  ---></code>
Line 61: Line 59:
 
::Like the name says, your battery would choose this one ;). It sets the Frequency always to the lowest available.
 
::Like the name says, your battery would choose this one ;). It sets the Frequency always to the lowest available.
 
:;userspace
 
:;userspace
::You have to choose this one, if a frequency scaling daemon should manage your CPU frequency or you want to do it manually.
+
::You have to choose this one, if a [[#Using Frequency Scaling Daemons|frequency scaling daemon]] should manage your CPU frequency or you want to do it manually.
 
:;performance
 
:;performance
 
::This gouvernour sets your Frequency always to the highest available.
 
::This gouvernour sets your Frequency always to the highest available.
Line 78: Line 76:
 
You may set the governor in your rc.local, to make it used on every boot.
 
You may set the governor in your rc.local, to make it used on every boot.
  
==Configuring Frequency Scaling Daemons==
+
==Using Frequency Scaling Daemons==
 +
{{NOTE|It is recommended to use the ondemand frequency scaling governor, available in kernels from 2.6.10. See [[#Using Frequency Scaling Governors|above]].}}
  
 
Don't forget to enable the userspace governor to have a userspace daemon do the frequency scaling. If it is built as module, load it as <tt>cpufreq-userspace</tt>.
 
Don't forget to enable the userspace governor to have a userspace daemon do the frequency scaling. If it is built as module, load it as <tt>cpufreq-userspace</tt>.
Note that since 2.6.10, there is also the ondemand governor in the kernel, which replaces any userspace daemon for cpu scaling and works very well.
 
  
 
There are plenty of userspace frequency scaling daemons available:
 
There are plenty of userspace frequency scaling daemons available:

Revision as of 10:37, 23 July 2005

General

Linux supports Dynamic Frequency Scaling for ThinkPads with mobile Pentium III, Pentium 4 and Pentium M processors.

Configuring the Kernel

2.4 Kernels

There were various frequency scaling implementations in the 2.4 series of kernels. They all were preliminary and a standard was rised with the introduction of the sysfs filesystem in 2.6 kernels. It is recommended to use a 2.6 kernel, if possible.

2.6 Kernels

You need to enable the cpu frequency scaling for your kernel (usually your distros kernel will have this enabled):

CONFIG_CPU_FREQ=y

You need to load enable governors, if not already done in your distros default kernel:

CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y

Since 2.6.10 there is the ondemand governor that does cpu frequency scaling in kernel so you dont need userspace programs like powernowd etc. It can be enabled with:

CONFIG_CPU_FREQ_GOV_ONDEMAND=y 
  • If you have a Coppermine-piix-smi based Thinkpads like from the A2x, X2x and T2x series you need to enable the speedstep-ich driver in the kernel and load it if it's built as module. You might want to look at this page.
  • If you have a p4-class celeron based Thinkpad like the R40e you might want to look at this page

Using the Sys Interface

The files in /sys/devices/system/cpu/cpu0/cpufreq/ provide information and a means of controlling the frequency scaling subsystem. Seed values are given in Khz. You need to be root to access the /sys filesystem.

Your max speed is at /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
700000

Your min speed is at /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq.

# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
500000

You can write to /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed to change the current speed.

# echo 700000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
# cat /proc/cpuinfo
cpu MHz  : 697.252
# echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
# cat /proc/cpuinfo
cpu MHz  : 976.152

Using Frequency Scaling Governors

You can compile the scaling gouvernours into your kernel or compile it as module. You'll find the gouvernors with 'make menuconfig' here:

Power managemant options (ACPI, APM) --->
CPU Frequency scaling --->

After booting the new kernel you can get a list of available governors with (as root):

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand powersave userspace performance

A Short Overview over the available governors:

ondemand
This driver is a dynamic cpufreq policy governor. It changes frequency based on the processor load.
conservative
New since 2.6.12. Similar to ondemand. Optimized for battery powered environments and AMD64.
powersafe
Like the name says, your battery would choose this one ;). It sets the Frequency always to the lowest available.
userspace
You have to choose this one, if a frequency scaling daemon should manage your CPU frequency or you want to do it manually.
performance
This gouvernour sets your Frequency always to the highest available.

Now we set our governor: What is our current governor?

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
userspace

Set new governor and watch if it has changed

# echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
conservative

Congrats! Your governor is active.

You may set the governor in your rc.local, to make it used on every boot.

Using Frequency Scaling Daemons

NOTE!
It is recommended to use the ondemand frequency scaling governor, available in kernels from 2.6.10. See above.

Don't forget to enable the userspace governor to have a userspace daemon do the frequency scaling. If it is built as module, load it as cpufreq-userspace.

There are plenty of userspace frequency scaling daemons available: