The CPUfreq governor is responsible for switching between the different CPU frequencies the processor supports. It thus has a critical impact on both the battery runtime as well as the responsiveness of the device.
The two most popular governors which allow a dynamic frequency switching based on the current processor load are 'ondemand' and 'interactive' and I tested both for a few days to compare their performance in different scenarios: While ondemand appears to offer the best battery runtime, the responsiveness is not great which leads to problems during media playback (cracks and stuttering while playing FLACs with stock music app and watching XviD videos with MoboPlayer). On the other hand, with interactive the responsiveness is better, however the frequency scaling appears to be a bit erratic to me and it seems to spend more time in the high frequency states than actually necessary which leads to an increased battery drain. So it seems, both ondemand and interactive each have their own drawbacks and neither one shows a satisfying performance in all scenarios.
Thus I wrote a new governor called 'snappy' based on ondemand implementing the following two improvements: First, instead of using a static sampling rate, the sampling rate is dynamically adjusted depending on the current load; for a uniform load the sampling rate is set to a high value, while for a non-uniform load the time between two samples is decreased. Second, switching to lower frequency states is deferred, which on average allows the CPU to stay in its current state for longer and thus reduces the rate of frequency changes.
The governor can be tuned using three files in the cpufreq sysfs interface 'up_threshold' (default 95), 'down_threshold' (default 40) and 'sampling_rate_max' (default 100000). The current sampling rate is shown in 'sampling_rate_current'.
Changes to the source: http://www.pastie.org/2570142
The sampling rate is decreased in 2% steps while it is increased in 1% steps (this should make the sampling rate adjustment more dynamic). Also, the default for the maximum sampling rate is set to 50000.
Bug fix: http://www.pastie.org/2570778
I wrote this governor yesterday and so I did not have much time for testing. Thus your feedback is highly appreciated. Also, I did not play around much with the three parameters - so there is probably much room for improvement.
I do not accept donations and since I reached my 50GB limit of free space on SpiderOak, thanks to all of you kind people who got an account using my referral link, I could not ask for more.
Instead if you really want to donate your hard earned money to someone who deserves and needs it, consider donating to the Free Software Foundation at fsf.org: These guys are at the frontline when it comes to keeping Linux free and fighting these greedy bastards who think they are entitled to collect royalties and other fees from Linux users due to some silly patents - and if Linux falls, Android will be next.
*** This project is dead! ***