[XPERIA X10 Android Development] DooMLoRD:
Information on cpu governors

2. Governors In the Linux Kernel

================================

2.1 Performance

------------------------------

The CPUfreq governor "performance" sets the CPU statically to the

highest frequency within the borders of scaling_min_freq and

scaling_max_freq.

2.2 Powersave

----------------------------

The CPUfreq governor "powersave" sets the CPU statically to the

lowest frequency within the borders of scaling_min_freq and

scaling_max_freq.

2.3 Userspace

----------------------------

The CPUfreq governor "userspace" allows the user, or any userspace

program running with UID "root", to set the CPU to a specific frequency

by making a sysfs file "scaling_setspeed" available in the CPU-device

directory.

2.4 Ondemand

---------------------------

The CPUfreq governor "ondemand" sets the CPU depending on the

current usage. To do this the CPU must have the capability to

switch the frequency very quickly. There are a number of sysfs file

accessible parameters:

sampling_rate: measured in uS (10^-6 seconds), this is how often you

want the kernel to look at the CPU usage and to make decisions on

what to do about the frequency. Typically this is set to values of

around '10000' or more.

show_sampling_rate_(min|max): the minimum and maximum sampling rates

available that you may set 'sampling_rate' to.

up_threshold: defines what the average CPU usage between the samplings

of 'sampling_rate' needs to be for the kernel to make a decision on

whether it should increase the frequency. For example when it is set

to its default value of '80' it means that between the checking

intervals the CPU needs to be on average more than 80% in use to then

decide that the CPU frequency needs to be increased.

ignore_nice_load: this parameter takes a value of '0' or '1'. When

set to '0' (its default), all processes are counted towards the

'cpu utilisation' value. When set to '1', the processes that are

run with a 'nice' value will not count (and thus be ignored) in the

overall usage calculation. This is useful if you are running a CPU

intensive calculation on your laptop that you do not care how long it

takes to complete as you can 'nice' it and prevent it from taking part

in the deciding process of whether to increase your CPU frequency.

2.5 Conservative

-------------------------------

The CPUfreq governor "conservative", much like the "ondemand"

governor, sets the CPU depending on the current usage. It differs in

behaviour in that it gracefully increases and decreases the CPU speed

rather than jumping to max speed the moment there is any load on the

CPU. This behaviour more suitable in a battery powered environment.

The governor is tweaked in the same manner as the "ondemand" governor

through sysfs with the addition of:

freq_step: this describes what percentage steps the cpu freq should be

increased and decreased smoothly by. By default the cpu frequency will

increase in 5% chunks of your maximum cpu frequency. You can change this

value to anywhere between 0 and 100 where '0' will effectively lock your

CPU at a speed regardless of its load whilst '100' will, in theory, make

it behave identically to the "ondemand" governor.

down_threshold: same as the 'up_threshold' found for the "ondemand"

governor but for the opposite direction. For example when set to its

default value of '20' it means that if the CPU usage needs to be below

20% between samples to have the frequency decreased.

2.6 Interactive

------------------------------

The CPUfreq governor "interactive" is designed for low latency,

interactive workloads. This governor sets the CPU speed depending on

usage, similar to "ondemand" and "conservative" governors. However

there is no polling, or 'sample_rate' required to scale the CPU up.

Sampling CPU load every X ms can lead to under powering the CPU

for X ms, leading to dropped framerate, stuttering UI etc..

Scaling the CPU up is done when coming out of idle, and like "ondemand"

scaling up will always go to MAX, then step down based off of cpu load.

There is only one tuneable value for this governor:

min_sample_time: The ammount of time the CPU must spend (in uS)

at the current frequency before scaling DOWN. This is done to

more accurately determine the cpu workload and the best speed for that

workload. The default is 50ms.

2.7 MinMax

------------------------------

The CPUfreq governor "maxmin" tries to minimize the frequency jumps by limiting

the selected frequencies to only two frequencies: either the min or the max

frequency of the current policy. The frequency is raised or lowered according

to the current load and the 'up_threshold' and 'down_threshold'.

Its parameters and implementation are similar to that of conservative.

It does not have the freq_step parameter as it jumps right from min to max

and vice-versa.

The sampling_down_factor, unlike conservative, will count the minimal number

of samplings since the last time we saw the 'up_threshold' load on the CPU.

Hence it is set to higher default and acts as a limiter not to do too many

frequency jumps without hurting the performance.