linux/Documentation/cpu-freq/governors.txt
<<
>>
Prefs
   1     CPU frequency and voltage scaling code in the Linux(TM) kernel
   2
   3
   4                         L i n u x    C P U F r e q
   5
   6                      C P U F r e q   G o v e r n o r s
   7
   8                   - information for users and developers -
   9
  10
  11                    Dominik Brodowski  <linux@brodo.de>
  12            some additions and corrections by Nico Golde <nico@ngolde.de>
  13
  14
  15
  16   Clock scaling allows you to change the clock speed of the CPUs on the
  17    fly. This is a nice method to save battery power, because the lower
  18            the clock speed, the less power the CPU consumes.
  19
  20
  21Contents:
  22---------
  231.   What is a CPUFreq Governor?
  24
  252.   Governors In the Linux Kernel
  262.1  Performance
  272.2  Powersave
  282.3  Userspace
  292.4  Ondemand
  302.5  Conservative
  31
  323.   The Governor Interface in the CPUfreq Core
  33
  34
  35
  361. What Is A CPUFreq Governor?
  37==============================
  38
  39Most cpufreq drivers (in fact, all except one, longrun) or even most
  40cpu frequency scaling algorithms only offer the CPU to be set to one
  41frequency. In order to offer dynamic frequency scaling, the cpufreq
  42core must be able to tell these drivers of a "target frequency". So
  43these specific drivers will be transformed to offer a "->target"
  44call instead of the existing "->setpolicy" call. For "longrun", all
  45stays the same, though.
  46
  47How to decide what frequency within the CPUfreq policy should be used?
  48That's done using "cpufreq governors". Two are already in this patch
  49-- they're the already existing "powersave" and "performance" which
  50set the frequency statically to the lowest or highest frequency,
  51respectively. At least two more such governors will be ready for
  52addition in the near future, but likely many more as there are various
  53different theories and models about dynamic frequency scaling
  54around. Using such a generic interface as cpufreq offers to scaling
  55governors, these can be tested extensively, and the best one can be
  56selected for each specific use.
  57
  58Basically, it's the following flow graph:
  59
  60CPU can be set to switch independently   |         CPU can only be set
  61      within specific "limits"           |       to specific frequencies
  62
  63                                 "CPUfreq policy"
  64                consists of frequency limits (policy->{min,max})
  65                     and CPUfreq governor to be used
  66                         /                    \
  67                        /                      \
  68                       /                       the cpufreq governor decides
  69                      /                        (dynamically or statically)
  70                     /                         what target_freq to set within
  71                    /                          the limits of policy->{min,max}
  72                   /                                \
  73                  /                                  \
  74        Using the ->setpolicy call,              Using the ->target call,
  75            the limits and the                    the frequency closest
  76             "policy" is set.                     to target_freq is set.
  77                                                  It is assured that it
  78                                                  is within policy->{min,max}
  79
  80
  812. Governors In the Linux Kernel
  82================================
  83
  842.1 Performance
  85---------------
  86
  87The CPUfreq governor "performance" sets the CPU statically to the
  88highest frequency within the borders of scaling_min_freq and
  89scaling_max_freq.
  90
  91
  922.2 Powersave
  93-------------
  94
  95The CPUfreq governor "powersave" sets the CPU statically to the
  96lowest frequency within the borders of scaling_min_freq and
  97scaling_max_freq.
  98
  99
 1002.3 Userspace
 101-------------
 102
 103The CPUfreq governor "userspace" allows the user, or any userspace
 104program running with UID "root", to set the CPU to a specific frequency
 105by making a sysfs file "scaling_setspeed" available in the CPU-device
 106directory.
 107
 108
 1092.4 Ondemand
 110------------
 111
 112The CPUfreq governor "ondemand" sets the CPU depending on the
 113current usage. To do this the CPU must have the capability to
 114switch the frequency very quickly.  There are a number of sysfs file
 115accessible parameters:
 116
 117sampling_rate: measured in uS (10^-6 seconds), this is how often you
 118want the kernel to look at the CPU usage and to make decisions on
 119what to do about the frequency.  Typically this is set to values of
 120around '10000' or more. It's default value is (cmp. with users-guide.txt):
 121transition_latency * 1000
 122Be aware that transition latency is in ns and sampling_rate is in us, so you
 123get the same sysfs value by default.
 124Sampling rate should always get adjusted considering the transition latency
 125To set the sampling rate 750 times as high as the transition latency
 126in the bash (as said, 1000 is default), do:
 127echo `$(($(cat cpuinfo_transition_latency) * 750 / 1000)) \
 128    >ondemand/sampling_rate
 129
 130sampling_rate_min:
 131The sampling rate is limited by the HW transition latency:
 132transition_latency * 100
 133Or by kernel restrictions:
 134If CONFIG_NO_HZ is set, the limit is 10ms fixed.
 135If CONFIG_NO_HZ is not set or nohz=off boot parameter is used, the
 136limits depend on the CONFIG_HZ option:
 137HZ=1000: min=20000us  (20ms)
 138HZ=250:  min=80000us  (80ms)
 139HZ=100:  min=200000us (200ms)
 140The highest value of kernel and HW latency restrictions is shown and
 141used as the minimum sampling rate.
 142
 143up_threshold: defines what the average CPU usage between the samplings
 144of 'sampling_rate' needs to be for the kernel to make a decision on
 145whether it should increase the frequency.  For example when it is set
 146to its default value of '95' it means that between the checking
 147intervals the CPU needs to be on average more than 95% in use to then
 148decide that the CPU frequency needs to be increased.  
 149
 150ignore_nice_load: this parameter takes a value of '0' or '1'. When
 151set to '0' (its default), all processes are counted towards the
 152'cpu utilisation' value.  When set to '1', the processes that are
 153run with a 'nice' value will not count (and thus be ignored) in the
 154overall usage calculation.  This is useful if you are running a CPU
 155intensive calculation on your laptop that you do not care how long it
 156takes to complete as you can 'nice' it and prevent it from taking part
 157in the deciding process of whether to increase your CPU frequency.
 158
 159sampling_down_factor: this parameter controls the rate at which the
 160kernel makes a decision on when to decrease the frequency while running
 161at top speed. When set to 1 (the default) decisions to reevaluate load
 162are made at the same interval regardless of current clock speed. But
 163when set to greater than 1 (e.g. 100) it acts as a multiplier for the
 164scheduling interval for reevaluating load when the CPU is at its top
 165speed due to high load. This improves performance by reducing the overhead
 166of load evaluation and helping the CPU stay at its top speed when truly
 167busy, rather than shifting back and forth in speed. This tunable has no
 168effect on behavior at lower speeds/lower CPU loads.
 169
 170
 1712.5 Conservative
 172----------------
 173
 174The CPUfreq governor "conservative", much like the "ondemand"
 175governor, sets the CPU depending on the current usage.  It differs in
 176behaviour in that it gracefully increases and decreases the CPU speed
 177rather than jumping to max speed the moment there is any load on the
 178CPU.  This behaviour more suitable in a battery powered environment.
 179The governor is tweaked in the same manner as the "ondemand" governor
 180through sysfs with the addition of:
 181
 182freq_step: this describes what percentage steps the cpu freq should be
 183increased and decreased smoothly by.  By default the cpu frequency will
 184increase in 5% chunks of your maximum cpu frequency.  You can change this
 185value to anywhere between 0 and 100 where '0' will effectively lock your
 186CPU at a speed regardless of its load whilst '100' will, in theory, make
 187it behave identically to the "ondemand" governor.
 188
 189down_threshold: same as the 'up_threshold' found for the "ondemand"
 190governor but for the opposite direction.  For example when set to its
 191default value of '20' it means that if the CPU usage needs to be below
 19220% between samples to have the frequency decreased.
 193
 1943. The Governor Interface in the CPUfreq Core
 195=============================================
 196
 197A new governor must register itself with the CPUfreq core using
 198"cpufreq_register_governor". The struct cpufreq_governor, which has to
 199be passed to that function, must contain the following values:
 200
 201governor->name -            A unique name for this governor
 202governor->governor -        The governor callback function
 203governor->owner -           .THIS_MODULE for the governor module (if 
 204                            appropriate)
 205
 206The governor->governor callback is called with the current (or to-be-set)
 207cpufreq_policy struct for that CPU, and an unsigned int event. The
 208following events are currently defined:
 209
 210CPUFREQ_GOV_START:   This governor shall start its duty for the CPU
 211                     policy->cpu
 212CPUFREQ_GOV_STOP:    This governor shall end its duty for the CPU
 213                     policy->cpu
 214CPUFREQ_GOV_LIMITS:  The limits for CPU policy->cpu have changed to
 215                     policy->min and policy->max.
 216
 217If you need other "events" externally of your driver, _only_ use the
 218cpufreq_governor_l(unsigned int cpu, unsigned int event) call to the
 219CPUfreq core to ensure proper locking.
 220
 221
 222The CPUfreq governor may call the CPU processor driver using one of
 223these two functions:
 224
 225int cpufreq_driver_target(struct cpufreq_policy *policy,
 226                                 unsigned int target_freq,
 227                                 unsigned int relation);
 228
 229int __cpufreq_driver_target(struct cpufreq_policy *policy,
 230                                   unsigned int target_freq,
 231                                   unsigned int relation);
 232
 233target_freq must be within policy->min and policy->max, of course.
 234What's the difference between these two functions? When your governor
 235still is in a direct code path of a call to governor->governor, the
 236per-CPU cpufreq lock is still held in the cpufreq core, and there's
 237no need to lock it again (in fact, this would cause a deadlock). So
 238use __cpufreq_driver_target only in these cases. In all other cases 
 239(for example, when there's a "daemonized" function that wakes up 
 240every second), use cpufreq_driver_target to lock the cpufreq per-CPU
 241lock before the command is passed to the cpufreq processor driver.
 242
 243
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.