All about CPU Governors and GPU governors
28 Jan 2015
Applications needed for using these features:
1. SetCPU
2. No-frills CPU Control
3. Inbuilt Performance Settings (Only in custom roms, Free)
4. Trickster Mod
What is a CPU governor?
A CPU governor in Android controls how the CPU raises and lowers its frequency in response to the demands the user is placing on their device. Governors are especially important in smartphones and tablets because they have a large impact on the apparent fluidity of the interface and the battery life of the device over a charge.
NOTE: You cannot change your CPU governor unless your phone is rooted and you have a ROM or app that lets you make a change. Also, different kernels (the intermediary software between your phone's hardware and the operating system) offer different sets of governors.
Available CPU governors:
1.
OnDemand
Governor:
This governor has a hair trigger for boosting clockspeed to the maximum
speed
set by the user. If the CPU load placed by the user abates, the
OnDemand
governor will slowly step back down through the kernel's frequency
steppings
until it settles at the lowest possible frequency, or the user executes
another
task to demand a ramp.
OnDemand has excellent interface fluidity because of its high-frequency
bias,
but it can also have a relatively negative effect on battery life
versus other
governors. OnDemand is commonly chosen by smartphone manufacturers
because it
is well-tested, reliable, and virtually guarantees the smoothest
possible
performance for the phone.
This final fact is important to know before you read about the
Interactive
governor: OnDemand scales its clockspeed in a work queue context. In
other
words, once the task that triggered the clockspeed ramp is finished,
OnDemand
will attempt to move the clockspeed back to minimum. If the user
executes
another task that triggers OnDemand's ramp, the clockspeed will bounce
from
minimum to maximum. This can happen especially frequently if the user
is
multi-tasking. This, too, has negative implications for battery life.
2.
OndemandX:
Basically an ondemand with suspend/wake profiles. This governor is
supposed to
be a battery friendly ondemand. When screen is off, max frequency is
capped at
500 mhz. Even though ondemand is the default governor in many kernel
and is
considered safe/stable, the support for ondemand/ondemandX depends on
CPU
capability to do fast frequency switching which are very low latency
frequency
transitions. I have read somewhere that the performance of
ondemand/ondemandx
were significantly varying for different i/o schedulers. This is not
true for
most of the other governors.
3.
Performance
Governor:
This locks the phone's CPU at maximum frequency. While this may sound
like an
ugly idea, there is growing evidence to suggest that running a phone at
its
maximum frequency at all times will allow a faster race-to-idle.
Race-to-idle
is the process by which a phone completes a given task, such as syncing
email,
and returns the CPU to the extremely efficient low-power state. This
still
requires extensive testing, and a kernel that properly implements a
given CPU's
C-states (low power states).
4.
Powersave
Governor:
The opposite of the Performance governor, the Powersave governor locks
the CPU
frequency at the lowest frequency set by the user.
5.
Conservative
Governor:
This biases the phone to prefer the lowest possible clockspeed as often
as
possible. In other words, a larger and more persistent load must be
placed on
the CPU before the conservative governor will be prompted to raise the
CPU
clockspeed. Depending on how the developer has implemented this
governor, and
the minimum clockspeed chosen by the user, the conservative governor
can
introduce choppy performance. On the other hand, it can be good for
battery
life.
The Conservative Governor is also frequently described as a "slow
OnDemand," if that helps to give you a more complete picture of its
functionality.
6.
Userspace
Governor:
This governor, exceptionally rare for the world of mobile devices,
allows any
program executed by the user to set the CPU's operating frequency. This
governor is more common amongst servers or desktop PCs where an
application
(like a power profile app) needs privileges to set the CPU clockspeed.
7.
Min
Max
well this governor makes use of only min & maximum frequency
based on
workload... no intermediate frequencies are used.
8.
Interactive
Governor:
Much like the OnDemand governor, the Interactive governor dynamically
scales
CPU clockspeed in response to the workload placed on the CPU by the
user. This
is where the similarities end. Interactive is significantly more
responsive
than OnDemand, because it's faster at scaling to maximum frequency.
Unlike OnDemand, which you'll recall scales clockspeed in the context
of a work
queue, Interactive scales the clockspeed over the course of a timer set
arbitrarily by the kernel developer. In other words, if an application
demands
a ramp to maximum clockspeed (by placing 100% load on the CPU), a user
can
execute another task before the governor starts reducing CPU frequency.
This
can eliminate the frequency bouncing discussed in the OnDemand section.
Because
of this timer, Interactive is also better prepared to utilize
intermediate
clockspeeds that fall between the minimum and maximum CPU frequencies.
This is another
pro-battery life benefit of Interactive.
However, because Interactive is permitted to spend more time at maximum
frequency than OnDemand (for device performance reasons), the
battery-saving
benefits discussed above are effectively negated. Long story short,
Interactive
offers better performance than OnDemand (some say the best performance
of any
governor) and negligibly different battery life.
Interactive also makes the assumption that a user turning the screen on
will
shortly be followed by the user interacting with some application on
their
device. Because of this, screen on triggers a ramp to maximum
clockspeed,
followed by the timer behavior described above.
9.
InteractiveX
Governor:
Created by kernel developer "Imoseyon," the InteractiveX governor is
based heavily on the Interactive governor, enhanced with tuned timer
parameters
to better balance battery vs. performance. The InteractiveX governor's
defining
feature, however, is that it locks the CPU frequency to the user's
lowest
defined speed when the screen is off.
10.
Smartass
Is based on the concept of the interactive governor.
I have always agreed that in theory the way interactive works – by
taking over
the idle loop – is very attractive. I have never managed to tweak it so
it
would behave decently in real life. Smartass is a complete rewrite of
the code
plus more. I think its a success. Performance is on par with the “old”
minmax
and I think smartass is a bit more responsive. Battery life is hard to
quantify
precisely but it does spend much more time at the lower frequencies.
Smartass will also cap the max frequency when sleeping to. Lets take
for
example the 528/176 kernel, it will sleep at 352/176. No need for sleep
profiles any more!"
11.
SmartassV2:
Version 2 of the original smartass governor from Erasmux. The governor
aim for
an "ideal frequency", and ramp up more aggressively towards this freq
and less aggressive after. It uses different ideal frequencies for
screen on
and screen off, namely awake_ideal_freq and sleep_ideal_freq. This
governor
scales down CPU very fast (to hit sleep_ideal_freq soon) while screen
is off
and scales up rapidly to awake_ideal_freq (500 mhz for GS2 by default)
when
screen is on. There's no upper limit for frequency while screen is off
(unlike
Smartass). So the entire frequency range is available for the governor
to use
during screen-on and screen-off state. The motto of this governor is a
balance
between performance and battery.
12.
Scary
A new governor wrote based on conservative with some smartass features,
it
scales accordingly to conservatives laws. So it will start from the
bottom,
take a load sample, if it's above the upthreshold, ramp up only one
speed at a
time, and ramp down one at a time. It will automatically cap the off
screen
speeds to 245Mhz, and if your min freq is higher than 245mhz, it will
reset the
min to 120mhz while screen is off and restore it upon screen awakening,
and
still scale accordingly to conservatives laws. So it spends most of its
time at
lower frequencies. The goal of this is to get the best battery life
with decent
performance. It will give the same performance as conservative right
now, it
will get tweaked over time.
13.
Lagfree:
Lagfree is similar to ondemand. Main difference is it's optimization to
become
more battery friendly. Frequency is gracefully decreased and increased,
unlike
ondemand which jumps to 100% too often. Lagfree does not skip any
frequency
step while scaling up or down. Remember that if there's a requirement
for
sudden burst of power, lagfree can not satisfy that since it has to
raise cpu
through each higher frequency step from current. Some users report that
video
playback using lagfree stutters a little.
14.
Smoothass:
The same as the Smartass “governor” But MUCH more aggressive &
across the
board this one has a better battery life that is about a third better
than
stock KERNEL
15.
Brazilianwax:
Similar to smartassV2. More aggressive ramping, so more performance,
less
battery
16.
SavagedZen:
Another smartassV2 based governor. Achieves good balance between
performance
& battery as compared to brazilianwax.
17.
Lazy:
This governor from Ezekeel is basically an ondemand with an additional
parameter min_time_state to specify the minimum time CPU stays on a
frequency
before scaling up/down. The Idea here is to eliminate any instabilities
caused
by fast frequency switching by ondemand. Lazy governor polls more often
than
ondemand, but changes frequency only after completing min_time_state on
a step
overriding sampling interval. Lazy also has a screenoff_maxfreq
parameter which
when enabled will cause the governor to always select the maximum
frequency
while the screen is off.
18.
Lionheart:
Lionheart is a conservative-based governor which is based on samsung's
update3
source.
The tunables (such as the thresholds and sampling rate) were changed so
the
governor behaves more like the performance one, at the cost of battery
as the
scaling is very aggressive.
19.
LionheartX
LionheartX is based on Lionheart but has a few changes on the tunables
and
features a suspend profile based on Smartass governor.
20.
Intellidemand:
Intellidemand aka Intelligent Ondemand from Faux is yet another
governor that's
based on ondemand. Unlike what some users believe, this governor is not
the
replacement for OC Daemon (Having different governors for sleep and
awake). The
original intellidemand behaves differently according to GPU usage. When
GPU is
really busy (gaming, maps, benchmarking, etc) intellidemand behaves
like
ondemand. When GPU is 'idling' (or moderately busy), intellidemand
limits max
frequency to a step depending on frequencies available in your
device/kernel
for saving battery. This is called browsing mode. We can see some
'traces' of
interactive governor here. Frequency scale-up decision is made based on
idling
time of CPU. Lower idling time (<20%) causes CPU to scale-up
from current
frequency. Frequency scale-down happens at steps=5% of max frequency.
(This
parameter is tunable only in conservative, among the popular governors)
To sum up, this is an intelligent ondemand that enters browsing mode to
limit
max frequency when GPU is idling, and (exits browsing mode) behaves
like
ondemand when GPU is busy; to deliver performance for gaming and such.
Intellidemand does not jump to highest frequency when screen is off.
21.
Hotplug
Governor:
The Hotplug governor performs very similarly to the OnDemand governor,
with the
added benefit of being more precise about how it steps down through the
kernel's frequency table as the governor measures the user's CPU load.
However,
the Hotplug governor's defining feature is its ability to turn unused
CPU cores
off during periods of low CPU utilization. This is known as
"hotplugging."
22.
BadAss
Goveronor:
Badass removes all of this "fast peaking" to the max frequency. To
trigger a frequency increase, the system must run a bit with high load,
then
the frequency is bumped. If that is still not enough the governor gives
you
full throttle. (this transition should not take longer than 1-2
seconds,
depending on the load your system is experiencing)
Badass will also take the gpu load into consideration. If the gpu is
moderately
busy it will bypass the above check and clock the cpu with 1188Mhz. If
the gpu
is crushed under load, badass will lift the restrictions to the cpu.
23.
Wheatley:
Building on the classic 'ondemand' governor is implemented Wheatley
governor.
The governor has two additional parameters. Wheatley works as planned
and does
not hinder the proper C4 usage for task where the C4 can be used
properly. So
the results show that Wheatley works as intended and ensures that the
C4 state
is used whenever the task allows a proper efficient usage of the C4
state. For
more demanding tasks which cause a large number of wakeups and prevent
the
efficient usage of the C4 state, the governor resorts to the next best
power
saving mechanism and scales down the frequency. So with the new
highly-flexible
Wheatley governor one can have the best of both worlds.
Obviously, this governor is only available on multi-core devices.
24.
Lulzactive:
It's based on Interactive & Smartass governors.
Old Version: When workload is greater than or equal to 60%, the
governor scales
up CPU to next higher step. When workload is less than 60%, governor
scales
down CPU to next lower step. When screen is off, frequency is locked to
global
scaling minimum frequency.
New Version: Three more user configurable parameters: inc_cpu_load,
pump_up_step, pump_down_step. Unlike older version, this one gives more
control
for the user. We can set the threshold at which governor decides to
scale
up/down. We can also set number of frequency steps to be skipped while
polling
up and down.
When workload greater than or equal to inc_cpu_load, governor scales
CPU
pump_up_step steps up. When workload is less than inc_cpu_load,
governor scales
CPU down pump_down_step steps down.
25.
Pegasusq/Pegasusd
The Pegasus-q / d is a multi-core based on the Ondemand governor and
governor
with integrated hot-plugging. It is quite stable and has the same
battery life
as ondemand. However, it is less stable than HYPER on some devices like
the S2
(before the PegasusQ governor was updated).
Ongoing processes in the queue, we know that multiple processes can run
simultaneously on. These processes are active in an array, which is a
field
called "Run Queue" queue that is ongoing, with their priority values
arranged (priority will be used by the task scheduler, which then
decides
which process to run next).
To ensure that each process has its fair share of resources, each
running for a
certain period and will eventually stop and then again placed in the
queue
until it is your turn again. If a program is terminated, so that others
can run
the program with the highest priority in the current queue is executed.
26.
Hotplugx
It's a modified version of Hotplug and optimized for the suspension in
off-screen
27.
AbyssPlug
It's a Governor derived from hotplug, it works the same way, but with
the
changes in savings for a better battery.
28.
MSM
DCVS
A very efficient and wide range of Dynamic Clock and Voltage Scaling
(DCVS)
which addresses usage models from active standby to mid and high level
processing requirements. It makes the phone's CPU smoothly scale from
low
power, from low leakage mode to blazingly fast performance.Only to be
used by
Qualcomm CPUs.
MSM is the prefix for the SOC (MSM8960) and DCVS is Dynamic Clock and
Voltage
Scaling. Makes sense, MSM-DCVS
29.
IntelliActive
Based off Google's Interactive governor with the following enhancements:
1. self-boost capability from input drivers (no need for PowerHAL
assist)
2. two phase scheduling (idle/busy phases to prevent from jumping
directly to
max freq
3. Checks for offline cpus and short circuits some unnecessary checks
to
improve code execution paths. Therefore, it avoids CPU hotplugging.
30.
Adaptive
This driver adds a dynamic cpufreq policy governor designed for
latency-sensitive workloads and also for demanding performance.
This governor attempts to reduce the latency of clock so that the
system is
more responsive to interactive workloads in lowest steady-state but to
reduce
power consumption in middle operation level, level up will be done in
step by
step to prohibit system from going to
max operation level.
31.
Nightmare
A PegasusQ modified, less aggressive and more stable. A good compromise
between
performance and battery. In addition to the SoD is a prevention because
it
usually does not hotplug.
32.
ZZmove
The ZZmove Governor by ZaneZam is optimized for low power consumption
when the
screen off, with particular attention to the limitation of consumption
applications in the background with the screen off, such as listening
to music.
ZZmoove is not a good gaming governor as it aims to save battery. This
governor
is still a WIP as the developer is constantly giving updates! Here are
the available
profiles:
for Default (set governor defaults)
for Yank Battery -> old untouched setting (a very good
battery/performance
balanced setting DEV-NOTE: highly recommended!)
for Yank Battery Extreme -> old untouched setting (like yank
battery but
focus on battery saving)
for ZaneZam Battery -> old untouched setting (a more 'harsh'
setting
strictly focused on battery saving DEV-NOTE: might give some lags!)
for ZaneZam Battery Plus -> NEW! reworked 'faster' battery
setting
(DEV-NOTE: recommended too! )
for ZaneZam Optimized -> old untouched setting (balanced setting
with no
focus in any direction DEV-NOTE: relict from back in the days, even
though some
people still like it!)
for ZaneZam Moderate -> NEW! setting based on 'zzopt' which has
mainly (but
not strictly only!) 2 cores online
for ZaneZam Performance -> old untouched setting (all you can
get from
zzmoove in terms of performance but still has the fast down
scaling/hotplugging
behaving)
for ZaneZam InZane -> NEW! based on performance with new auto
fast scaling
active. a new experience!
for ZaneZam Gaming -> NEW! based on performance with new scaling
block
enabled to avoid cpu overheating during gameplay
(since version 0.9 beta4: cpu temperature threshold of 65°C enabled if
exynos4
cpu temperature reading support was compiled with the governor)
33.
Sleepy
The Sleepy (formerly known as Solo) is an attempt to strike a balance
between
performance and battery power to create. It is based on Ondemand. It
includes
some tweaks like the Down_sampling variable and other features that set
by the
user through the sysfs of "echo" call. Sleepy is quite similar to
Ondemandx.
34.
Hyper
The Hyper (formerly known as kenobi) is an aggressive smart and
smooth,based on
the Ondemand and is equipped with several features of Ondemandx suspend
profiles. (Added by sysfs, the settings suspend_freq and suspend
Imoseyon's
code) is the behavior of the HYPER. It also has the fast_start
deep_sleep
variable and detection features. In addition, the maximum frequency is
in
suspend mode 500Mhz.
35.
SmartassH3
The SmartassH3 governor is designed for battery saving and not pushing
the
phones performance, since doing that drains battery and that's the one
thing
people keep asking for more of. Based on SmartassV2.
36.
SLP
It is a mix of pegasusq and ondemand. Therefore, it has a balance
between
battery savings and performance.
37.
NeoX
An optimized version of the pegasusq governor but with some extra
tweaks for
better performance. This means more battery drainage than the original
PegasusQ.
38.
ZZmanx
ZZmanx is exactly the same as ZZmove, but it has been renamed because
DorimanX
made it into his own version (possibly better performance) . However,
it still
suffers from below average gaming performance. (Refer to ZZmoove
description for
guide on profiles)
39.
OnDemandPlus
A governor based off of OnDemand and Interactive. It provides a balance
between
performance, and saving battery.
40.
DynInteractive
A dynamic interactive Governor. This Governor dynamically adapts it's
own CPU
frequencies within your parameters based off the system(s) load.
41.
Smartmax
This is a new governor which is a mix between ondemand and smartassv2.
By
default this is configured for battery saving,so this is NOT a gamer
governor!
This is still WIP!
42.
Ktoonservative\KtoonservativeQ
A combination of ondemand and conservative. Ktoonservative contains a
hotplugging variable which determines when the second core comes
online. The
governor shuts the core off when it returns to the second lowest
frequency thus
giving us a handle on the second performance factor in our CPUs
behavior.
43.
Performance
may cry (PMC)
A governor based on Smartmax except it's heavily tweaked for better and
maximum
battery life. This is not a gaming governor!
44.
Dance
Dance
Based on conservative with some smartass features, it scales
accordingly to
conservatives laws. So it will start from the bottom, take a load
sample, if
it's above the upthreshold, ramp up only one speed at a time, and ramp
down one
at a time. It will automatically cap the off screen speeds to 245Mhz,
and if
your min freq is higher than 245mhz, it will reset the min to 120mhz
while
screen is off and restore it upon screen awakening, and still scale
accordingly
to conservatives laws. So it spends most of its time at lower
frequencies. The
goal of this is to get the best battery life with decent performance.
It will
give the same performance as conservative right now, it will get
tweaked over
time.
45.
AbyssPlugv2
AbyssPlugv2 is a rewrite of the original CPU governor. It also fixes
the
problem where the governor is set only for the first core, but now
governs all
cores right from whatever utility you use. There have been comments on
the lack
of stability with this governor.
46.
IntelliMM
A rewrite of the old Min Max governor and has 3 cpu states: Idle, UI
and Max.
Pretty much a smarter Min Max governor.
47.
Interactive
Pro
A newer (modified) version of interactive which is optimized for
devices such
as the One Plus One. It is a more efficient than the original
Interactive
because it continuously re-evaluates the load of each CPU therefore
allowing
the CPU to scale efficiently.
48.
Slim
A new governor from the cm branch and the slimrom project. A
performance
optimized governor. Found on newer devices only such as the One Plus
One. This
CPU governor will fall back to be the performance governor if very high
load is
detected
49.
Ondemand
EPS
Once again, a modified version of Ondemand and is optimized for newer
devices.
It is based on the Semaphore Kernel's Ondemand which is more optimized
for
battery life and better performance than the traditional ondemand
governor.
50.
Smartmax
EPS
A newer smartmax governor that has been slightly optimized for newer
devices.
51.
Uberdemand
Uberdemand is Ondemand with 2-phase feature meaning it has a soft cap
at 1728
MHz so your cpu won't always go directly to max, made by Chet Kener.
52.
Yankactive
A slightly modified interactive based governor by Yank555.lu. Possibly
better
performance or battery life.
Hotplugging drivers:
- mpdecision (Qualcomm's default hotplugging driver)
- intelliplug (Great for performance, more customization options)
- Alucard HotPlug (A great hotplugging driver by Alucard)
Custom kernels may have their own hotplugging drivers but they are
usually based
on these ones.
I recommend staying with the default hotplugging driver or keeping the
setting
on AUTO. If you want to experiment, be sure to expect better/worse
battery
life!
GPU governors
Simple: It's a new governor for the gpu frequency scaling. It will
allow a more
fine grained control over how the gpu scales up and down then the
previous
ones. This means either more performance or more battery savings
Ondemand: Much like the CPU governor, Ondemand will ramp up the
frequency when
a load is detected. A good balance between performance and battery
savings.
MSM-Adreno: The default GPU governor used by qualcomm for their adreno
GPUs. It
is more performance orientated than ondemand therefore it gives better
performance in games but less battery life.
Performance: As the name suggests, this keeps your GPU running at the
max
frequency. This is a governor if you want the best possible experience
in games
but you don't care about your battery life.
Powersave: Like the CPU governor, this keeps your GPU running at the
lowest
possible frequency. Best battery life, extreme lag in games.
Categorization:
There are four different categories CPU governors can exist as.
1) Ondemand Based:
Works on "ramp-up on high load" principle. CPU busy-time is taken
into consideration for scaling decisions. Members: Ondemand, OndemandX,
Intellidemand, Lazy, Lagfree, PegasusQ, HYPER, Wheatley, Hotplug,
HotplugX,
AbyssPlug, AbyssPlugv2, Nightmare, Sleepy.
2) Conservative Based:
Works by biasing the phone to prefer the lowest possible clockspeed as
often as
possible. Members: Conservative, Lionheart, LionheartX
3) Interactive Based:
Works on "make scaling decision when CPU comes out of idle-loop"
principle. Members: Interactive, InteractiveX, Intelliactive,
Lulzactive, Luzactiveq,
Smartass, SmartassV2, SmartassH3, Brazilianwax, SavagedZen,
Dyninteractive.
4) Unique Category:
These do not fall into any other category above and/or possess unique
attributes. Members: Userspace, Powersave, Performance, Min Max,
ZZmove, MSM DCVS
5) Hybrid Category:
These have a mix of two (or more) CPU governor behaviors. Members:
Smartmax,
Dancedance, Performance May Cry(PMC), Ktoonservative, KtoonservativeQ
Here are some CPU Governors I recommend...
Rating system:
Best - This CPU governor is simply the best (for the category), highly
recommended.
Great - This CPU governor is very good, will suit most people.
Good - This CPU governor is good, but might not suit everyone.
Requires tuning - This CPU governor requires tuning, not for beginners.
If your kernel (not the rom) doesn't have the CPU governors that has
been
marked as 'best', use the ones that have been marked as 'great'.
Also, if there is more than one governor marked as 'best', choose the
one that
is available for you. If all are available, choose any.
For performance:
Single-core:
- Performance - Best
- Min Max - Great
Multi-core:
- Performance - Best
- Min Max - Great
For battery life:
Single-core:
- Conservative - Best
- Powersave - Good
Multi-core:
- Conservative - Best
- SLP/Sleepy - Great
- Perfomance may cry (PMC) - Best
- Powersave - Good
- Ktoonservative(Q) - Great
- Smartmax - Best
For balanced battery saving and performance:
Single-core:
- Interactive/Intelliactive - Best
- Ondemand/OndemandX - Stock, Best
- SmartassV2 - Great
Multi-core:
- MSM DCSV - Great, not common
- LulzactiveQ - Requires tuning
- Intelliactive- Great
- Interactive(X) - Great
- Ondemand/OndemandX - Stock, Best
- Pegasus(q/d) - Best
- SmartassV2 - Great
- Wheatley - Good
- Hotplug/HotplugX - Good
- HYPER - Best
- ZZMove - Requires tuning
- Dancedance - Great
For gaming:
Single-core:
- Interactive(X) - Best
- Performance - Great
- Ondemand/OndemandX - Great
- SmartassV2 - Best
Multi-core:
- Lionheart/LionheartX - Best
- Dancedance - Good
- Intelliactive - Great
- SmartassV2 - Great
- Pegasus(Q/D) - Best
- Ondemand/OndemandX - Great
- Hyper - Best
- Performance - Great
- LulzactiveQ - Best
- Intellidemand - Good
Other CPU Governors not mentioned in the recommended section are either
not
used by people anymore or they are not suited for most people or have
been
removed from kernels.
XDA Forums
XDA University