[Module] | X8 | X10 mini/pro | AX8_SMARTASS v002 | 'smartass' governor | [2011-07-19]
Differences between this module and the others:
- allows to set max CPU freq when screen is off (to save battery),
- allows to set starting CPU freq when phone awakes (to speed up awake process),
- allows set/change almost all aspects of governor (to suite needs),
- should be a bit more responsive when parameters are well chosen.
Note: Don't use DSP Manager when this governor is enabled (it consumes more CPU then player itself). When screen goes off - sound will be distorted. Use player with equalizer build-in instead.
Governor have some predefinied values - more info in "Available settings".
The goal was bring 'smartass' governor to work with X8 and also make some improvements.
What Is A CPUFreq Governor?
Most cpufreq drivers (in fact, all except one, longrun) or even most
cpu frequency scaling algorithms only offer the CPU to be set to one
frequency. In order to offer dynamic frequency scaling, the cpufreq
core must be able to tell these drivers of a "target frequency". So
these specific drivers will be transformed to offer a "->target"
call instead of the existing "->setpolicy" call. For "longrun", all
stays the same, though.
How to decide what frequency within the CPUfreq policy should be used?
That's done using "cpufreq governors". Two are already in this patch
-- they're the already existing "powersave" and "performance" which
set the frequency statically to the lowest or highest frequency,
respectively. At least two more such governors will be ready for
addition in the near future, but likely many more as there are various
different theories and models about dynamic frequency scaling
around. Using such a generic interface as cpufreq offers to scaling
governors, these can be tested extensively, and the best one can be
selected for each specific use.
SMARTASS GOVERNOR - 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 245Mhz (or if your min frequency is higher than 245 - why?! - it will cap it to your min frequency). Lets take for example the 600/245 kernel, it will sleep at 245. No need for sleep profiles any more!
- information about governors is here
- more information about 'smartass' governor is here
- how different governors work is explained here: [Q] SetCPU governors (explained)
- Baseband x15
- desire to replace SetCPU - when used only for 'ScreenOff' profile.
- push ax8_smartass.ko to /system/lib/modules
- run the following command
Note: there is no need to add following commands without changed value. The values are already implemented in module
echo "smartass" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
The minimum amount of time to spend at a frequency before we can ramp up.
echo "24000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/up_rate_us
The minimum amount of time to spend at a frequency before we can ramp down. Default value:
echo "49000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/down_rate_us
When ramping up frequency with no idle cycles jump to at least this frequency.
Zero disables. Set a very high value to jump to policy max freqeuncy.
echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/up_min_freq
When sleep_max_freq>0 the frequency when suspended will be capped by this frequency. Also will wake up at max frequency of policy to minimize wakeup issues.
Set sleep_max_freq=0 to disable this behavior.
echo "122880" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/sleep_max_freq
The frequency to set when waking up from sleep.
When sleep_max_freq=0 this will have no effect.
echo "600000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/sleep_wakeup_freq
: When awake_min_freq>0 the frequency when not suspended will not go below this frequency.
Set awake_min_freq=0 to disable this behavior.
echo "0" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/awake_min_freq
Sampling rate, I highly recommend to leave it at 2.
Freqeuncy delta when ramping up.
zero disables and causes to always jump straight to max frequency.
echo "220000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/ramp_up_step
Freqeuncy delta when ramping down.
zero disables and will calculate ramp down according to load heuristic.
echo "160000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/ramp_down_step
CPU freq will be increased if measured load > max_cpu_load.
echo "75" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/max_cpu_load
: CPU freq will be decreased if measured load < min_cpu_load.
echo "25" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/min_cpu_load
: Sleep rate when screen is off
echo "500000" > /sys/devices/system/cpu/cpu0/cpufreq/smartass/sleep_rate_us
set to 122880 - more battery saving,
q set to 600000 - faster wake up,
p set to 160000 - to slow down decreasing CPU freq,
- when screen is off - governor acts like its 'conservative' version, just checks CPU loads using 500ms rate,
- added sleep_rate_us
parameter - sleep rate when screen is off can be changed using this parameter.
- just initial version fixed to work with X8.
Sources at: GitHub