[APP][Jul 20th][1.28.2] "NoFrills" CPU Control: configure cpu frequencies & governor
I've made a very simple application which can be used to set cpu scaling frequencies and governor. Yeah, imagine SetCPU without profiles, minimal use of RAM, released as open source, and requiring CyanogenMod (or any sysfs-enabled ROM). "No frills" is the right description for it. Source is released under the Apache License, version 2.0
, but the resources (i.e.: icons) are released under their original license. The notification icon is mine and is proprietary. This should avoid further market scams.
I've been using it on my Dream and from the start I wanted to "give back" to the community. I asked in CyanogenMod's forum if there was interest for an inclusion into the official Mod
, but I got no answers from the team.
, NLJ has been working on a CMPart page for the CPU settings for CM7, so does this put the final nail in the coffin of this app?
I guess it depends on whether CM6 (and lower) will get the CPU settings page and whether people find it useful.
Looks like some people are finding it useful.
Problem is: I'm currently calling it "CyanogenMod CPU Governor" (yeah, boring) and I'm using CyanogenMod icon for it. Since it won't be included I feel like I should find a different name and icon, and this is where the community could give back :P... or get a plain "Market" icon and "GUI for cpufreq settings" name.
(2.1+, ICS look & feel)
No-frills CPU CLASSIC
(1.6+, simple/plain look & feel)
If you don't want to use (or can't use) Google's Play Store, it's available through F-Droid.org
It's now available on GitHub
- Easy GUI to set frequencies and governor.
- "safety valve" to avoid boot-loops in case of unsafe settings (more info in the FAQ)
- Stats screen to see the effective usage of frequencies
Translations & Localization
Translations are welcome and they are now handled through GetLocalization
! It'l make it way
easier for people to translate it and for me to update them. I cannot stress enough how I am grateful for the following people, who originally translated this app. Thank you guys! (and keep translating by creating an account on GetLocalization, please!
hrk (Italian), jdb78 (German), kallt_kaffe (Swedish), David Kejzlar (Czech), Ryunosuke Tanaka (Japanese), Charlie Cheung (Traditional and Simplified Chinese), dxdiag32 (Traditional and Simplified Chinese), Corentin Garcia (French), Carlos Camacho (Spanish), dancer_69 (Greek), TorbenKB (Danish), Chris (Brazilian Portuguese), FellowWings (Hungarian), Spaar (Dutch), prescott66 (Slovakian), Marco Bizarro (Portuguese), Cristian Silaghi (Romanian), Cenk H. Uzunboy (Turkish) ... all the other translators can be found on GetLocalization
Q: What files do I need?
A: Download the .apk and install it the way you prefer. The .zip is not a flashable zip and is meant for other developers.
Q: I am a ROM cook, can I put your app in my ROM?
A: Sure do! Just contact me and I'll send you the latest .apk. Be sure to make it so that people will get market updates.
Q: Do you plan on adding profiles? I'd love to select a different profile for when my screen is off!
A: Short answer is "No". I think that profiles are useless, because that's what governors are already: a profile for your CPU to follow while changing frequencies.
Adding profiles would mean adding the need for more memory, the need to run more often, check if something is happening (screen on, screen off and so on)... all of this without a real benefit.
Q: What is the safety valve you added in 1.3?
A: If you enable "Apply on boot", the "safety valve" works this way: the app checks if your phone didn't shut down properly or either a file named /data/.nocpu or /sd-ext/.nocpu exists.
If this is the case, the values are not applied to avoid a "reboot-loop".
Please note that there are some apps on the market which claim to perform a faster reboot but what they do is like pulling out the battery! Now... do you think it's a proper shut down?
I guessed so...
Q: Wait, what about those /data/.nocpu /sd-ext/.nocpu files?!
A: They are empty files which were chosen by NameLessJedi as "safety valve" for his own CMPart inside of CyanogenMod7 (remember the history of this app?
). We decided to cooperate, so I added support for the files and gave him the code to detect an improper shutdown at boot, which he added to his tool. Open source wins!
Q: What are governors and which one should I choose?
A: CPU frequency scaling allows you to change the clock speed of CPUs on the fly. This can save power, because the lower the CPU clock speed, the less power the CPU consumes. Governors are different policies to scale frequency.
- powersave will always set the "min" and never change it
- performance will always set the "max" and never change it
- ondemand (usually the default) will raise the value by a step up when the cpu is used, and lower the value by a step down when the cpu is not (much) used.
- conservative is like ondemand but will be slower when changing frequencies
- interactive is (conceptually) like ondemand but will be quicker when changing frequencies.
- smartass is (conceptually) like interactive, but I haven't understood yet why it's so much smart and loved by users.
- userspace will do nothing at all, so don't choose it. I may hide it in a future release to avoid confusion
For a fine grained explanation, check this post!
Q: And what about the I/O scheduler option?
A: I/O means Input/Output and it deals on how read and writes are performed on the internal NAND (not the external card!).
Thanks to roccoadam32
, here is a description of the different schedulers:
The Completely Fair Queuing (CFQ) scheduler is the default algorthim in Red Hat Enterprise Linux 4. As the name implies, CFQ maintains a scalable per-process I/O queue and attempts to distribute the available I/O bandwidth equally among all I/O requests. CFQ is well suited for mid-to-large multi-processor systems and for systems which require balanced I/O performance over multiple LUNs and I/O controllers.
The Deadline elevator uses a deadline algorithm to minimize I/O latency for a given I/O request. The scheduler provides near real-time behavior and uses a round robin policy to attempt to be fair among multiple I/O requests and to avoid process starvation. Using five I/O queues, this scheduler will aggressively re-order requests to improve I/O performance.
The NOOP scheduler is a simple FIFO queue and uses the minimal amount of CPU/instructions per I/O to accomplish the basic merging and sorting functionality to complete the I/O. It assumes performance of the I/O has been or will be optimized at the block device (memory-disk) or with an intelligent HBA or externally attached controller.
The Anticipatory elevator introduces a controlled delay before dispatching the I/O to attempt to aggregate and/or re-order requests improving locality and reducing disk seek operations. This algorithm is intended to optimize systems with small or slow disk subsystems. One artifact of using the AS scheduler can be higher I/O latency.
In this new version, the app tries to set the I/O scheduler on every block device except for loopN and zramN, so it will match mmcblkN, mtdN (should it matter) and stlN. If you have a device with a different name, curse your manufacturer and kernel author, but it should work provided you at least have mmcblk0 to read supported schedulers. Yeah, it's not perfect but should be more than enough.
For a fine grained explanation, check this post!
Q: ... can you translate it into layman terms?
CFQ: good if you have a multi processor (we're not talking dual core... much many more cores...), multi "card" system. We don't. 'nuff said.
Deadline: fast, fast, fast, but maybe one of your services will "clog" all the writes while your gmail is waiting to open that email you want to read. And maybe not.
NOOP: who said Deadline was fast? NOOP is "the fast". (NOOP = NO OPeration = nuthin' to do... ). Good if the optimization is done at the hardware level. 99% of our devices do.
Anticipatory: surely our devices have small and slow "disk" subsystems, so maybe it's worth a shot.
Requested features and roadmap
Support for different settings in dual-core devices: investigating if it is even possible.It looks like it's possible!
It looks like it's useless.
Sort statistics in order of cpu%
Add "deep sleep time" to stats
Charts in stats
- A bigger widget: just send me mock-ups, I'll think about it
Silent notification on boot
A setting to disable the safety valve on unsafe shutdown: with a big fat warning of "Don't complain to me", ok.
Fix the dual core bug, it's the first request! For crying out loud!
There's no bug!
2013-07-20 - 1.28.2
- r2: Fixed crash when opening About screen.
- r1: Added explicit ACCESS_SUPERUSER permission for transparency.
- Fixed I/O scheduler setting for special devices (e.g.: Minix X5, thanks to DaPa)
- Fixed wrong count of CPUs (thanks to DaPa).
- Updated current translations. If you spot an error, you can fix it at [uri]http://getLocalization.com/noFrillsCPU[/uri]
2013-03-31 - 1.27
- Ability to reset frequency stats.
- Nicer widget layout, especially for low density devices.
- Updated current translations and added Arabic, partial Hindi and Sinhala translation. If you spot an error, you can fix it at http://getLocalization.com/noFrillsCPU
2012-09-01 - 1.26
- Added Themes! Dark, Light, Light & Dark.
- UI improvements.
- Fix FC in Stats screen.
- Updated translations: Czech, German, Spanish, Finnish, French, Croaian, Hungarian, Italian, Japanese, Georgian, Polish, Portuguese (Brazil and Portugal), Romanian, Russian, Swedish, Chinese.
- New translations: Estonian, Western Farsi, Korean, Lithuanian, Latvian, Serbian.
2012-07-07 - 1.25
- New setting: automatically update current frequency in the stats screen.
- New setting: prevent other apps from interfering with frequencies (required for Jelly Bean and some HTC devices).
- Fix: "double sort" issue on stats screen for certain devices.
- Updated translations: Catalan, Chinese (Simplified & Traditional), Czech, German, Greek, French, Hungarian, Italian, Japanese, Polish, Romanian, Russian, Slovak, Spanish, Swedish and Turkish.
- New translations: Croatian, Finnish, Georgian, Indonesian.
2012-05-20 - 1.24
- Updated to latest Google support code.
- Updated German, Spanish, Dutch and Chinese translation.
- Added Polish, Turkish and Malay translation.
2012-04-21 - 1.23
- Minor performance improvements.
- Updated Hungarian, Ukrainian, Russian, Greek (Retrosid) and Japanese translations.
- Added Romanian (Cristian Silaghi), Norwegian (Rezern) and Catalan (Ferran Riu) translations.
- Added a "Donate" button in About > Info. You can donate if you like this app!
2012-03-18 - 1.22
- Hopefully fixed crash when refreshing stats on some devices. If you still get a crash, please contact the developer through email to help him fix this issue!
- Updated Hungarian translation
- Added Ukrainian and Russian translation
2012-03-11 - 1.21
- Android 4.0 Ice Cream Sandwich look & feel on Android 2.1 and above!
- Android 1.6 and Android 2.0 users can use the new app "No-frills CPU Control CLASSIC" which has the old look & feel AND all the features of the regular app.
- Ability to disable safety-valve. Use with caution!
- Changed kernel detection in CPU data. Please send your CPU data again, if you can.
2012-01-23 - 1.20
- Fixed bug: I/O scheduler wasn't applied to all applicable block devices.
- Updated Portuguese translation by Marco Bizarro.
2012-01-15 - 1.19
- New "Settings" screen.
- Ability to select a custom (or silent) ringtone.
- Ability to select a custom vibration pattern or disable vibration entirely.
- Display deep sleep in stats (optional).
- Sort stats by frequency, percentage, partial percentage.
- Graphical representation of percentage in stats.
- Updated Chinese translation by dxdiag32.
2011-12-31 - 1.18.4
- New Portuguese translation by Marco Bizarro
2011-12-28 - 1.18.3
- New Slovakian translation by prescott66.
2011-11-14 - 1.18.2
- New Dutch translation by Spaar
2011-11-12 - 1.18.1
- New Hungarian translation by FellowWings
2011-11-05 - 1.18
- Fixed "black screen" issue with HTC Sensation, HTC EVO 3D and (possibly) other devices. Note: as with other devices, for best results you need a custom kernel, stock HTC will not allow frequency scaling even if you have root.
2011-11-02 - 1.17
- Fix bug on kernels with broken i/o schedulers which caused FC in 1.16
2011-10-31 - 1.16
- Avoid lockup/reboot on particular devices when setting frequencies (Thanks to JoPhj).
- Sort frequencies on particular Samsung devices which have them backwards (Thanks to JoPhj).
- Prevent FC on homescreen widget for devices without root.
- Fix crash when no governors were available.
- Updated japanese translation.
2011-10-10 - 1.15
- Fixed the stupid bug I introduced when changing "unclean shutdown" check... sorry people!
2011-10-10 - 1.14
- Changed the "unclean shutdown" check to support apps such as LCD-Density changer and such
- First release of an homescreen widget
- After updating, clear app data then set again options (only this one time)
2011-09-23 - 1.13.2
- New Brazilian Portuguese translation by Chris
2011-08-28 - 1.13.1
- Fixed danish and czech translations not appeaing for respective users, sorry for the inconvenience!
2011-08-27 - 1.13
- Fixed FC reported to Market when governor wasn't available
- Fixed bug of missing VIBRATE permission reported to Market
- New danish translation by TorbenKB
2011-07-10 - 1.12.1
- New greek translation by dancer_69
2011-07-10 - 1.12
- New french translation by Corentin Garcia
- New spanish translation by Carlos Camacho
- Fixed landscape layout (broken in 1.11 with the new I/O scheduler option) and changed portrait layout accordingly
2011-07-09 - 1.11.2
- Fixes to the chinese translation
- Updates to the japanese translation
2011-07-07 - 1.11.1
- New chinese translation (Simplified and Traditional) by Charlie Cheung
2011-07-04 - v 1.11 (btw, happy 4th of july to da peeps in the us!)
- Initial support for dual core devices (LG G2X/Optimus Dual, Samsung Intercept, ...). Please report any issues you may have. There shouldn't be any, though...
- Added i/o scheduler selection for internal storage memory
- Rewritten detection code to support more non-standard* kernels
- New german translation, many thanks to jdb78. Man, thanks and sorry for taking so long to publish your translation!
2011-05-28 - v 1.10.1
- Fixed english typos in the About screen
- New japanese translation, thanks to Aozora Genei
2011-05-22 - v 1.10
- New about screen added, with changelog, FAQ and license. App now looks like a real one.
- Awesome new icon, courtesy of Anil K Solanki Design (www.thisiswhatwedo.com)
. Thanks Anil! Little easter egg: if you want to see the old icon, "tap" the new one in the about dialog.
- Fixed FC when trying to send CPU data with no email client installed (d'uh!)
2011-04-29 - v 1.9.3
- Added czech translation by David Kejzlar
- Added "quick check" informations on top of CPU data email
2011-04-10 - v 1.9.2
- Fixed usage on horizontal layout
- Added an initial root check
- Other small code fixes
2011-03-23 - v 1.9.1
- New swedish translation by kallt_kaffe
2011-03-22 - v 1.9
- New option to show a notification on boot
- Bugfix: FC when screen was rotated while progressbar was on screen
2011-03-19 - v 1.8
- New refresh icon (2.2- and 2.3+)
- Added current frequency to the stats screen
- Little GUI improvements
- Improved first screen when run on nonworking devices
2011-03-14 - v 1.7
- First Android Market release. The app is the same as 1.6.1 but with a different package name due to the "BrinkDroid incident". Binary package has been removed from this post in order to avoid duplication, but don't worry: the app is still free and it will always be both free and open source
Please, manually uninstall the app from the phone and then install through market, this will help you stay up to date with my releases.
But I already know that if you are reading this, you're someone who is already keeping up to date...
adb uninstall it.sineo.android.cpu
2011-03-06 - v 1.6.1
- Reworked from scratch notification icon w/ a Gingerbread version too.
2011-03-04 - v 1.6
- Added "View stats" to see the percentage of usage for each available frequency. Refresh icon is courtesy of Joseph Wain / glyphish.com
- Slight changes in the code.
- Some new texts for translators! Whee!
2011-02-26 - v 1.5 "Why do I have only two frequencies?!?"
- Added support for weird kernels which don't expose the available frequencies as they should
. This should fix the issue for people having only two frequencies to choose. Let me know how it goes.
2011-02-25 - v 1.4
- Governor is now applied first, frequencies last. This may or may not fix smartass. It's not so smart from the reports I've got.
- Added german translation (thanks to zantekk
- Thanks to everybody who sent his data and hasn't got a personal answer. I appreciated it! 1.4 adds kernel and rom information to the sent data, which should have been there in the first place...
2011-02-05 - v 1.3
- Added safety valves on boot: if unclean shutdown is detected or /data/.nocpu or /sd-ext/.nocpu exist, the frequencies will not be updated.
- Added a menu with an option to send me CPU data. No more logcat needed! Horray!
- GUI: configuration screen shows both current and desired values. You'll know if the app is working.
- i18n: added some new strings, translators please send me your new files and thank you for your work!
2011-01-22 - v 1.2.3 EXPERIMENTAL
- Experimental version for Wildfire and Galaxy Tab (and all the devices which didn't work). Please, download and send me a logcat of the app.
- Removed source package due to misunderstandings. No panic, it's still open source and I'll add it back later.
2011-01-15 - v 1.2.2
- Went for the name "No Frills CPU Control"
- Added translations for it (myself) and es (jrsoft)
- Added LICENSE.txt
- Minor GUI changes
2011-01-14 - v 1.2.1
- Fix the "1 GHz" issue
- Small code fixes
, kept just in case...
Latest compatibility report: (Please, not that I am not keeping this up to date anymore, so there may lots more devices which work)
Advent Vega - ? - chris4500uk
Archos 43 IT - stock+root - daveid
Huawei U8220 - CM 6.1 - veloo
HTC Aria - CM 6.1 - the_hatter, CallMeAria
HTC Aria - CM7 - CallMeAria
HTC Desire GSM (lcd screen) - CM7 - D4nt35
HTC Desire HD - CM7 - kiwiboy_1978
HTC Desire HD - Buzz 1.2.2 kernel - mancman
HTC Desire Z / Vision / G2 - CM 6.1.1 - sundar2012, TimD123, Pickx, Azrael.arach
HTC Desire Z / Vision / G2 - CM 7 - adam18488
HTC Dream / G1- CM6.1 - hrk
HTC Dream / G1 - ? - MrFrankfromCM
HTC Dream / G1 - Froyo For Trout - kaabob
HTC Evo 4G - MikFroyo + King Kernel 126.96.36.199 - ccaudio1
HTC Evo 4G - latest Fresh Rom - mprunty
HTC HD2 - Cope's SD Gingerbread - shamez23
HTC Hero CDMA - CM 7 - dburg84
HTC Hero - CM 6.1 and flykernel 12a - nfcarvalho
HTC Incedible - Chad0989 Kernel - ilhe1s
HTC Nexus One - CM7 - jrsoft
HTC Nexus One - MicroMod777 Gingerbread v.20 ROM - masterpfa
HTC MyTouch 4G - CM - bobsbbq
LG Optimus V - CM7 - dburg84
Motorola Droid 2 - Fission ROM - Spitemare
Motorola Milestone - Chronos 1.7 - PsyCl0ne
Motorola xt720 - 2.1 ROMA - dateno1
? - ? - RayearthX
Nook Color - both STOCK and Nookie Froyo - camwinnn
Nook Color - ? - 12paq
Nook Color - rooted on 1.0.1update - hondaxtc
Droid - ? - CJM01
Not working: (please send a logcat so I can try to fix it or try latest again)
Galaxy Vibrant - Nero - lotherius
Epic 4G - ? - mikeschevelle
HTC Hero - CM 6.1 - funkyboy1281
HTC HD2 - android builds? - dohclude
HTC Wildfire - CM 6.1 - patrask
Samsung Galaxy S I9000 - darky's mod v8.0 - ValkyrieSB9
Samsung Galaxy Tab - ? - z3120
Sony X10 - 2.2.1 rom - DaKidSlim
GT 540 - CM 6.1.1 - markbusa
GT 540 - Optimus 2.1 - arvind92
MARCH 12TH 2011:
MARKET FRAUD ALERT! Somebody called "BrinkDroid" has published an old release of this app on the Android Market, selling it for $1.99. This is NOT endorsed or approved by me at all, and a DMCA infringement notice has been sent by Google. With "BrinkDroid" releasing my app on the market, I cannot release it anymore until Google fixes this.
Please, look for "nofrills" on your phone Market app, then report a violation, choosing "Other" and putting this text:
App is a scam/stolen from other developer, proof is here: http://forum.xda-developers.com/showthread.php?t=911917
MARCH 14TH 2011: Yesterday BrinkDroid contacted me and he agreed to remove the application from the Android Market. Unfortunately, the package name is now "owned" by him and I cannot use it anymore. For this reason I have released a 1.7 release which is identical to 1.6.1 but with a new package name (it.sineo.android.cpu -> it.sineo.android.noFrillsCPU). In order to avoid further scams, I have released the app on the Market, see the QR code.
Thank you all for your support.