• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Root SetCPU Guide


Android Enthusiast
Jul 2, 2010
Houston, TX
There has been alot of confusion how how to properly use SetCPU.
Here is a guide that i found that is very useful and clears alot of things up. Hope this helps some of you.

SetCPU for Root Users
SetCPU for Root Users allows you to manage the CPU frequency settings of your Android device. It works with most commercial Android devices that have root access enabled for applications. Combined with custom profiles, SetCPU can help you manage your CPU settings to optimize performance and battery life. On many phones, oftentimes with the help of custom kernels, SetCPU can also manage overclocking on your device. SetCPU is currently available on the Android Market and the SlideME Market.
SetCPU works on most devices running Android 1.5 to Android 2.2, with Android 1.6 and above recommended. If you have an HTC device, you may need to disable perflock (see 10) depending on your kernel.

1. Benefits
The CPU drains more power if it is running at a higher frequency. If the processor is running faster, the phone will be faster and more responsive, but the battery may drain more quickly. If the processor is running more slowly, the phone will be less responsive and take longer to complete tasks, but battery life will be increased. With SetCPU, you can set up profiles to manage the CPU speed based on certain conditions.
2. Main Tab and Basic Usage
To get started with SetCPU, start the app, read the introduction, and pick "autodetect frequencies." If you ever need to access this screen again, press the Menu button in SetCPU's Main tab, then choose Device Selection.
If your kernel doesn't support autodetect, you won't see it choose the device that best matches your phone from the list. After you've passed the introduction screen, you may get a request from Superuser Permissions. Depending on your version of Superuser Permissions, either check the box for "remember" and press "allow" or press the "always allow" button.
The sliders here allow you to manually control the CPU scaling bounds. The CPU frequency will always be between these two values. By default, the CPU should scale between the max and min frequencies based on need. The sliders also control the "main" profile as explained later.
The "scaling" drop-down list is an advanced feature that allows you to control the behavior of the CPU scaling mechanism. See explanations for the different governors in the CPU Scaling Governors section.
SetCPU also includes a widget for your home screen. Add SetCPU's widget like you would any other widget: long press on your home screen, select Widgets, and select the SetCPU widget. A screen will pop up so you can configure the widget's appearance. If you would like it to show current CPU speed, set the Active Refresh Interval to something other than "Passive," though a passive refresh interval is recommended to save battery.
HTC device users: If the green "current" display doesn't change as you change the sliders, you may be using an incompatible HTC kernel with a driver called "perflock" that prevents SetCPU from changing frequencies. To enable SetCPU, press the "Menu" button in SetCPU's main tab and select "disable perflock." Read through the notice and then press the button in the dialog. If successful, you should be able to change the frequency with SetCPU. If this process fails, please e-mail the developer with your kernel version and device so support can be added. For more details, see the perflock section below.

3. Profiles
Profiles allow you to configure SetCPU to set your CPU speed under certain conditions. This is useful to manage battery savings. To get started with profiles, check the "Enable" button in the Profiles tab and press "Add Profile" to add your first profile.

Your profile settings will be triggered if the condition you set in the profile is met. For example, if you choose "Screen Off," the profile settings will be set when the screen is off. If no profiles are met, SetCPU reverts to the default profile specified in the Main tab. Several conditions are available:
  • Charging/Full - Set when the phone is charging from any source and when the battery is full while charging.
  • Charging AC/Full - Set only when the phone is charging from a wall plug (AC adapter) and when the battery is full while charging from a wall plug.
  • Charging USB/Full - Set only when the phone is charging from a computer (USB port) and when the battery is full while charging from the USB port.
  • Screen Off - Set when the phone's screen is turned off.
  • Battery < - Set when the battery falls below a certain point. You will also be able to specifiy battery level for this profile.
  • Temp > - Set when the battery or system temperature rises above a certain point. SetCPU will notify you with a ringtone notification if you check the "Audible Warning" checkbox here. You will also be able to specify a temperature for this profile.
  • CPU Temp > - Limited to phones whose hardware and kernels support it. Set when the CPU temperature rises above a certain point. SetCPU will notify you with a ringtone notification if you check the "Audible Warning" checkbox here. You will also be able to specify a temperature for this profile.
The priority of each profile specifies the order in which it will be evaluated. If the conditions of two profiles are both true, the one with the higher priority will be set. For example, if you have both a Screen Off and a Charging profile and the screen is off and charging at the same time, the one with the higher priority will be set.

You can add as many profiles as you want, and selectively enable and disable profiles by using the checkbox next to them. To edit profiles, click on them, make the necessary changes, and press "save." To remove profiles, click on it to edit, and press "delete."
Some things to keep in mind: For multiple battery level profiles, assign the profiles with lower percentages higher priorities. For multiple temperature profiles, assign the profiles with higher temperatures higher priories. Generally, battery level profiles should have lower priorities than other profiles, and temperature profiles should have higher priorites than other profiles.
Check the "Notifications" box to enable a persistent notification in the top bar showing exactly which profile is currently active.



4. Advanced Tab

The Advanced menu allows you to tweak the finer aspects of certain CPU governors. It is only activated when you choose the ondemand or conservative governors.
  • Sampling Rate - An interval (in microseconds) at which the governor will poll for updates. When this happens, the governor will decide whether to scale the CPU up or down.
  • Up Threshold - Defines a percentage from 1% to 100%. When the CPU load reaches this point, the governor will scale the CPU up.
  • Down Threshold (conservative only) - Defines a percentage from 1% to 100%. When the CPU load reaches this point, the governor will scale the CPU down.
  • Ignore Nice Load - If this value is "1," the system will ignore "Nice" processes when deciding to scale up or down.
  • Powersave Bias (ondemand only) - Setting this value higher will "bias" the governor toward lower frequencies. This is a percentage, where 1000 is 100%, 100 is 10%, and 0 is 0%. The ondemand governor will scale the CPU to a frequency lower than its "target" speed according to this value.
  • Freq Step (conservative only) - Defines how much (as a percentage of the maximum CPU speed) the conservative governor will increase the CPU speed by each time the CPU load reaches the Up Threshold.
Choose the "Set on Boot" checkbox to apply advanced settings when the phone boots. This option is completely independent of the similar option in the Main tab.
5. System Info
The System Info tab allows you to view information about your kernel, CPU, battery, phone, and memory status. It also includes a few tools for benchmarking the speed of the phone.
The lower the benchmark score, the faster the phone is running. Keep in mind that this score can only be used to accurately compare different frequencies across the same ROM and kernel. The score may fluctuate between runs due to interference by background processes. For best results, use the "performance" governor.
There is also a "stress test" function. Stress testing allows you to test the stability of undervolted kernels or higher overclocks. The stress test will peg your CPU usage to 100% The phone may be somewhat unresponsive during this time. The stress test will continue forever, so you have to manually end it after some time. To do this, simply press the back button.
To copy the text of the System Info menu to the clipboard, press the Menu button on your device and press "Copy to Clipboard."
6. About
The About menu prints information about SetCPU, including the current version. You can change the theme of the Main tab from using the drop down box. Restart SetCPU to apply it.
7. CPU Scaling Governors
CPU governors control exactly how the CPU scales between your "max" and "min" set frequencies. Most kernels have "ondemand" and "performance." The availability

  • ondemand - Available in most kernels, and the default governor in most kernels. When the CPU load reaches a certain point (see "up threshold" in Advanced Settings), ondemand will rapidly scale the CPU up to meet demand, then gradually scale the CPU down when it isn't needed.
  • conservative - Available in some kernels. It is similar to the ondemand governor, but will scale the CPU up more gradually to better fit demand. Conservative provides a less responsive experience than ondemand, but can save battery.
  • performance - Available in most kernels. It will keep the CPU running at the "max" set value at all times. This is a bit more efficient than simply setting "max" and "min" to the same value and using ondemand because the system will not waste resources scanning for the CPU load. This governor is recommended for stable benchmarking.
  • powersave - Available in some kernels. It will keep the CPU running at the "min" set value at all times.
  • userspace- A method for controlling the CPU speed that isn't currently used by SetCPU. For best results, do not use the userspace governor.
8. Custom Frequency Config
In rare situations and in older kernels, SetCPU may not be able to autodetect the full range of speeds supported by the kernel. If this is the case, you can configure SetCPU to use custom frequencies. To get started, you'll need the list of frequencies your kernel can support in kHz (not MHz!). Only certain frequencies work, so be sure you know which speeds your kernel supports before using the custom option.
Create a plain text file called "setcpu.txt" and place it on the root directory of your SD card or on your SD card's ext partition (/sdcard/ or /system/sd/). The text files should sort the frequencies on one line by comma, from lowest to highest. For example, the following is a valid config file for some Motorola Droid kernels:
To store the custom frequency list on your phone, save it as "setcpu" with no extension and put it in /data/local/. SetCPU reads from the SD card first and uses that text file if present, then tries to read from /data/local/.
To configure SetCPU to read your custom frequencies, go back to the device selection screen (in the Main tab, press Menu > Device Selection), choose "show other frequencies" if necessary, and choose the custom config option at the very bottom.

9. Task Managers
SetCPU does not run a background service unless profiles or the widget are enabled. Due to how multitasking works on Android, the Android system will automatically free up SetCPU if memory is needed and SetCPU isn't being used.
If either profiles or the widget are enabled, SetCPU does run background processes that keep them running. It's important that you add SetCPU to your task manager's "ignore" list, or otherwise avoid disabling the SetCPU process, if you have either profiles or the widget enabled. You should not have to use task managers to disable SetCPU at any time.
To disable all SetCPU background processes, remove the widget from the home screen and uncheck the "enable" box in the profiles menu. Anything else should be taken care of the Android system when memory is needed, just like any other app. Note that SetCPU briefly runs (and then immediately disables) a service upon startup to perform its "start on boot" duties. This is normal and should not add to memory usage.
10. Disabling Perflock
On most stock HTC kernels and some custom kernels, HTC has enabled a driver called "perflock" that constantly resets SetCPU's Max and Min settings. This does not apply to mostly "Google experience" HTC devices such as the T-Mobile G1, the myTouch 3G, any Google development device, or the Nexus One. It does, however, apply to "HTC Sense" devices such as the HTC Hero, Droid Eris, HTC Desire, HTC Incredible, EVO 4G, and myTouch Slide. Non-HTC devices never have perflock enabled.
SetCPU can disable perflock on newer HTC kernels, giving you control of the Max and Min settings of the CPU. To do this, press the Menu button on your device in the Main tab and choose "Disable Perflock." Read through the notice and then press the button in the dialog. If successful, you should be able to change the frequency with SetCPU. If this process fails, please e-mail the developer with your kernel version and device so support can be added.
Keep in mind that disabling perflock does not enable overclocking, though some overclocked kernels may require perflock to be disabled. Overclocking, in most cases, requires a custom kernel.

11. Changelog
1.4.0: Revamped the main interface quite a bit, and fixed a few minor bugs.

1.4.0a: fixed a bug where 122MHz was being called 128MHz.

1.4.1: * Using Eclair API. Will work on QVGA devices (Tattoo) and WVGA devices (Sholes)
* Major performance enhancements - setting frequencies should be much faster in every situation (in the main application, profiles, upon startup, etc.).
* Added a small home screen widget that shows the current maximum and minimum frequencies. Clicking this widget launches SetCPU.
* Frequency lists for Snapdragon devices, Samsung Galaxy, Motorola Cliq, and HTC Tattoo have been included, though support for these devices is experimental. The device can be selected on the introduction screen.
* Custom frequency lists are now supported. To enable custom frequencies, place a file called setcpu.txt on /sdcard/ or /system/sd/, sorting frequencies in kHz, separated by comma, from lowest to highest, then select the corresponding option on the introduction screen.
* There is no longer a "set" button - changing the seekbar positions will immediately set the frequency. As a result, all seekbars in the application will now snap back if the user attempts to place the maximum frequency below minimum.
* Instead of refusing to work at all, SetCPU will now operate in a read-only mode if root access is not detected.

1.4.2: Instead of choosing between performance (always max) and ondemand CPU governors, there is now a drop down list with all the available governors on the device. Thanks morfic! Added CPU scaling configurations for the OMAP3 processor of the Motorola Sholes/Droid/Milestone. This is strictly in beta. Custom frequency list now reads from /system/setcpu in addition to setcpu.txt on SD FAT or EXT.

1.4.3: Includes compatibility fixes for HDPI devices and UI enhancements. Frequency lists for the Samsung Moment (untested), the T-Mobile Pulse, and the Acer Liquid have been included. The application will no longer sometimes re-set CPU frequencies upon launch.

1.4.3a: Added more frequencies for the Nexus One.

1.4.3b: Fixed a widget issue on the Nexus One. Sorry for the rather rapid succession of updates the past few days!

1.4.3c: Adds support for 600MHz kernel patches on the Motorola Droid. On the Droid configuration. SetCPU will attempt to detect the existence of 600MHz and adjust the frequency list accordingly.

1.4.4: Adds an "autodetect" option that works on newer kernels (at the bottom of the device selection screen). This should enable the supercharged speeds in some of tasmanian_droid's newer kernels. Fixes a force close crash when selecting some frequency lists that were not compatible with the device (thanks Julian).

1.4.5: - Streamlined/refactored profiles code.
- Added "battery temperature" profile. SetCPU is now able to set a certain speed when the battery goes above a user-defined threshold. This would optimally be set to throttle the CPU lower at a high temperature. To ensure compatibility with your device, see if a valid temperature is displayed in the "System Info" menu. This profile does not take effect immediately and does not replace being cautious - it is not based on CPU core temperature, and must wait for a battery state change before reacting.
- Added an "About" button to the main screen with simple themes. Default color scheme is now "Dark"
- Adjusted the widget to display four digit speeds properly (thanks Berzerker).
- Various bugfixes and UI tweaks.

1.4.6: Fixed issues with the battery profile. Included a much better icon thanks to Josh Deere (dphase).

1.5.0: * CPU governors can now be defined in profiles.
* Included a notifications service for profiles - turn this on using the relevant checkbox in the profiles menu.
* Profiles now log which speed and governor is being set.
* Added "advanced" tweaking capability for conservative governor.
* The system info menu and profiles menu now show temperature in both Celsius and Fahrenheit, and the widget also now displays battery temperature in Celsius and Fahrenheit.
* Added a "long benchmark" option to the system info menu, which should be more consistent than the "short benchmark."
* Also added a simple stress test to the system info panel to test the stability of overclocks.
* Autodetect is now the default for devices that support it, and will be the first option in the menu if available.
* Improved I/O performance.
* Various bugfixes, especially in profiles.

1.5.0a: * Charging profile now no longer takes effect when the phone is at 100% battery and unplugged.

1.5.1: * Two more battery profiles added. Lower battery readings will always take priority (eg. under 80% will always take priority over under 100%).
* Governor will now refresh alongside the other readings. Added governor reading under current frequency reading.
* Added an auto-refresh checkbox to the main screen. If checked, SetCPU will periodically refresh the current frequency reading without the need for pressing the refresh button. This checkbox applies to the system info panel as well.
* Tweaked the widget, and attempted to fix the elusive bug where the widget did not update correctly sometimes.

1.5.1a: * Fixed widget being cut off in landscape mode.
* Fixed Fahrenheit temperature reading in profiles.

1.5.2: * Added optional failsafe notification warning system that plays a ringtone and flashes the LED red when the failsafe profile is active (thanks WootRoot!).
* Added "copy to clipboard" function for the System Info menu (press Menu).
* Added an optional "active" widget, which will refresh CPU speeds at an interval like the main interface.
* Added support for the OMAP3 temperature sensor for the Droid. If present, use of the OMAP3 temperature sensor can be enabled in the failsafe profile.
* If available, the OMAP3 temperature can also be read in the system info menu.
* CPU temperature settings will only appear if the sensor is present and support for the temperature sensor is enabled in the kernel! Right now, this is only for the Droid.
* The about menu now defaults to a "default" theme where SetCPU will not mess with any backgrounds defined in the XML layout.
* Fixed stress test failing when JIT is enabled.

1.5.2a: * Temperature sensor used in the widget for the Droid is now controlled by the failsafe setting. I will implement a proper appwidget configuration activity in a later update.
* Fixed an issue with the audible warning notification not being properly dismissed.
* Profiles optimizations.

1.5.3: * Memory/performance footprint decreased.
* Battery drain should be fixed on the Droid.

1.5.3a: * Active widget CPU usage optimized.
* Further profiles optimization for the Droid.
* Uncommon I/O force close fixed.

1.5.4: * Switched to the Android 2.2 SDK.
* Enabled external storage support (install location is automatic).
* Eliminated the distinction between the active and passive widgets, and replaced it with an appwidget configuration activity for the widget, allowing the user to choose the color of the max/min text, temperature display, temperature sensor (Droid), and refresh interval.
* Optimized the active widget refreshing.
* SetCPU will now hide non-autodetect frequencies by default on devices where autodetect is available, but hard coded frequencies and the custom option can be re-enabled with a button.
* Custom frequency list can now read from this exact file: /data/local/setcpu (in addition to the previous setcpu.txt on SD fat or ext).
* Includes various bug fixes and minor UI changes.

1.6.0: * Ported parts of the app to the NDK to improve performance.
* Fixed a bug where the widget was resetting colors upon reboot or launcher orientation change.
* Autodetect now works for all devices. It is recommended by default.

2.0.0: * User interface has been completely redesigned, and now uses tabs for switching between menus instead of buttons. Landscape mode in the main tab no longer requires scrolling down. The Advanced menu and Profiles menu have also been redesigned for a better landscape experience.
* The "auto-refresh" option and refresh button in the main interface and system info menu have been retired - SetCPU always auto-refreshes automatically.
* The profiles menu and service have been recoded from scratch, and now allows the creation of unlimited profiles with custom priorities. The "priority" meter for each profile determines the order in which it is evaluated - if two profiles apply to a given situation, the profile with the higher priority will be set. If you had profiles set before 2.0.0, you will need to set them again.
* Profiles have been further optimized for performance footprint as a result of the re-structure.
* Added "Charging AC/Full" and "Charging USB/Full" profile conditions to distinguish between fast charging and slow charging modes on some devices (thanks Julian).
* Added a beta "perflock disabler" feature that will enable frequency changing on stock HTC 2.6.29 kernels. Access the perflock disabler this by pressing Menu in the main interface. If this gives you an error, does not work, or crashes your phone, your kernel is not compatible - pull your battery to reset if necessary. E-mail me with your ROM, phone model and kernel information in "System Info" (thanks to Richard for a lot of help with the low-level stuff, and no thanks to HTC for implementing perflock in such a way . To access the perflock disabler, press Menu in SetCPU's main interface.
* Code cleanup and more.
* A big thanks to everyone who tested, especially those who gave feedback on this one, all the people who purchased SetCPU from the Android Market, as well as all my users.

2.0.0a: * Fixed a permissions error that was causing SetCPU to autodetect incorrectly and force close on some ROMs.

2.0.0b: * More fixes, sorry guys.
* Fixed an issue with profiles and custom frequency lists.
* Clarified the profiles priorities introduction.
* Fixed a bug with the Advanced menu erroneously reporting values if the governor was changed after onResume was called, and fixed a crash that sometimes occurred as a result.
* Fixed a bug where the passive widget acted like the active widget after frequencies were manually set.

2.0.0c: * Fixed issues with the Advanced menu and Advanced settings not being applied on boot.
* Fixed an issue in where temperature warnings were not being dismissed properly.
* SetCPU 2.0.0 no longer force closes on Android 1.5 devices, but the UI in some menus is flawed. I recommend that you update to a more recent version of Android if possible.
2.0.1: * Added a few widget backgrounds. Configure this when adding the widget.
* Added the ability to "swipe" to the next tab.
* Fixed various bugs.
* New documentation is up.
SetCPU and content is (c) 2009-2010 Michael Huang/coolbho3000.


Im just starting to toy around with this.. I am currently running CM6.1 with the stock kernel ( shade@toxygene #1) So I don't really have a huge interest in over clocking (should I be over clocking? If so any stable recommendations?) , but I do want to under clock to the min when the screen is off. (people say it saves battery right?) I guess I just want to confirm before I mess with all these setting, that I need to create a profile for "screen off" to take advantage of under clocking when the screen is off? And as far as scaling if Im pretty much just using SetCPU to try and squeeze a little more battery life and not performance should I it be set to On demand or conservative?

  • Like
Reactions: Ceezcat
Upvote 0
Hey, thank you for posting this. I just got this program and I'm fiddling with it and can't figure something out.

I want the CPU to go slower as the battery goes lower. For example, I have one profile that sets my EVO's CPU to 652 is the battery goes under 50% with a priority of 70, and 768 if the battery goes under 70% with a priority of 30, for example.

Currently the battery is at 61%, which I would think mean it would use the under 70% profile settings with a max at 768. However, it's sicking with the 50% profile using the max at 652.

This is all using the "ondemand" setting.

What am I doing wrong here? Any help would be appreciated. Thanks, in advance.
Upvote 0
In a sense, yes, your logic is right.

Give this a read.

But I believe that really comes down to, say, were you to convert a video; Rather than run at half speed at 10watts for 2 seconds you could do it in 1 second with 15watts.

Does this directly apply to cellphone usage? Probably in an indirect way when you're using it.

As to why I don't use setCPU anymore, it's because I had to exchange my Evo and the new one I was given has hboot 2.02 and I'm too lazy to go through the manual process of rooting it(until I may exchange this one again :p).
Upvote 0
As I basically said in the subject line already:
SetCPU widget - at least on my HTC EVO - does not show the current processor speed anymore. Instead, there's just "SetCPU" written atop (which is static). The widget only shows the Min/Max values, and that's it. - Bummer!:thinking:

This happened, so I believe, after updating to v2.10.
I recently "revived" v2.04, and that one shows the current processor speed in the widget OK - but it has other issues that keep me from using it...

Anyone experiencing the same "problem"?
Pls. let me know. - Thanks!
Upvote 0
Guess this is more in the line of a procedure question than anything else. First off, I downloaded set cpu 2.11 from the dev's thread. Something is making me curious if I got the correct version. Can't remember atm but could've sworn I saw something about the different versions. I'll need to look back and see if I can find it. Anyway it'll either work or not I would think. If I'm wrong let me know lol.. anyway, I downloaded it with the phone. Then went into astro file manager>downloads and I see what looks like my amon ra file did after I put on my SD card. (named set CPU though) Here's where I'm going with this :) does anybody know if I can I move that file from the downloads folder to the root of the card, like where I've put amon ra using the astro file manager? It says you can, but I've only used that to move pics and songs. Just wanted to know if I could do it easy like that or if I have to go through the whole move to pc, then back to card root deal? Maybe I'm just lazy, but it seems like it should work. I'm not super geek or even part geek :eek:: but when I got amon ra. I had to put it on the pc. Unzip it then put that on the root. This file looks just like that, (after it was unzipped). Just figured I'd see if somebody else had done it or had a problem etc.. before I go for or it. Safety check I guess.
Upvote 0
If it's already unzip like it seems then all I should have to do is a reboot, no flashing right? Or yes to flashing?

ok so if you look in the read me file after it is unzipped you have two ways to install it. using adb or using any file manager app you can just find the apk (2nd file that is not read me) and click on it and it should install it from there.

moving the file will not do much but just move it.
Upvote 0


We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.