SetCPU QR barcode

SetCPU

SetCPU for Root Users

Droid users: ROMs and kernels with faster CPU speeds enabled can be found at Alldroid and Sholes.info. Always exercise caution when clocking beyond manufacturer specifications.

SetCPU is an application for Android that is specifically designed for changing the CPU speed on Android devices with root access. It is currently compatible with many devices, including the HTC Dream, HTC Magic 32B, Motorola Droid, Nexus One, Samsung Galaxy, and several other devices. In addition to setting CPU speeds, SetCPU can also show the user information about the device's CPU, set speeds automatically upon system boot, set custom profiles based on the phone's sleep, charge, battery, or temperature states, and run a quick benchmark testing the CPU's floating point capabilities. Because of its nature, SetCPU can only be used with phones with root access running Android 1.5 and above. Because SetCPU changes the device's clock speed, possibly running the phone out of manufacturer specifications, use of this application may potentially damage your device. Use it at your own risk.

SetCPU is available in the Android Market and the SlideME Market now.

Getting Started

When you first start the application, you will see a welcome message. Read through all of it as it contains some important information. Then, select your device at the bottom of the menu to proceed to the application's interface. Make sure you choose your device properly - if you don't choose the right device, you can choose another device later. Give SetCPU root permission, hit the Menu button while in SetCPU to go back to the welcome screen, and choose your device again. If you're running a custom kernel with higher or different frequencies enabled (such as Droid overclocking kernels), don't pick your device here: instead, pick the "autodetect" device near the bottom. If that doesn't work, you can define custom frequencies (see below). At this point, SetCPU will attempt to request root access. On most custom builds, you'll have to press the "Allow Always" or check the "Remember" button before proceeding.

Basic Usage (Android 1.5/1.6/2.0/2.1) [Cupcake/Donut/Eclair]

You'll notice that there is a "maximum" and a "minimum" frequency you can set. Simply choose the frequencies you want for each. The phone will scale between the frequencies automatically based on CPU load. Keep in mind that you can't set the maximum frequency lower than the minimum.It will stay constant if you set the maximum and minimum frequencies to the same value. Sometimes, the current frequency reading won't update in time. If this happens, press "refresh" to see the new frequency.

To display detailed information about the phone's CPU, memory, battery temperature, and kernel, press the "System Info" button. On most devices, the "BogoMIPS" line here displays a rough indicator of the phone's true CPU speed in megahertz. On other devices, the BogoMIPS line will roughly be a constant multiple of the current CPU frequency.

SetCPU can set your current speeds automatically when the phone boots. Just check the "Set on Boot" checkbox if you want this to happen.

The CPU Governor drop down box contains a list of CPU "governors" that the phone can use. Available governors will vary with your specific device and kernel. The Performance governor, called "Always Max" on previous versions of SetCPU, allows your phone to run at maximum speed, ignoring all power saving functions. The "ondemand" setting is default, and scales the phone between the maximum and minimum speeds. On some kernels, the "conservative" governor is also available. The "conservative" governor ramps up the CPU more slowly than the "ondemand" governor, leading to slower responsiveness but better battery performance.

The System Info interface includes one other feature. The "Benchmark" button will perform a quick benchmark of the CPU's speed. You'll get a time in milliseconds from this benchmark. The lower this score is, the faster the CPU is running. For accurate results, leave the phone idle (don't press anything) for a few seconds before running the benchmark.

Profiles

From the 1.3.0 series on, SetCPU contains a few basic profiles for setting the CPU speed when the phone is sleeping, charging, or if the battery falls below a certain threshold. This is useful for saving battery while the phone is sleeping (when you don't need that much speed), for example. To set profiles, press the "profiles" button in the main interface, check the box for "profiles on." You can click the "modify" button in the profiles menu to set the speeds for that profile. Keep in mind that the profiles are listed in order of priority. For example, if the phone is charging and sleeping, and both of those profiles are enabled, SetCPU will use the charging profile. The "failsafe" profile can ramp the CPU speed down if the device's battery temperature reaches a certain point - this profile has the highest priority. SetCPU profiles work by running a low resource service in the background. This service is disabled when profiles are turned off. If profiles are enabled, disabling the service using a task manager could cause undesirable results.

Advanced

The Advanced menu allows you to change the "ondemand" settings of the CPU. These values control how the CPU scales up from the minimum speed to the maximum speed. They cannot be changed while the "always max" checkbox is checked. There is a "Set on Boot" checkbox at the bottom of this dialog. This setting is independent of the main SetCPU interface's "Set on Boot" checkbox.

Sampling Rate is defined in microseconds. The lower this value, the more responsive the CPU will be in scaling its speed up or down. However, a lower sampling rate will also negatively impact overall performance.
Up Threshold is defined as a percentage from 0% to 100%. The higher this value, the more CPU load it takes to make the CPU scale up.
Ignore Nice Load is a boolean (1 for true and 0 for false). This determines whether "nice" processes should make the CPU scale up.
Powersave Bias limits the CPU speed to save power. Set this higher to save battery, or lower to increase performance.

Custom Frequencies

This advanced feature allows you to define custom frequency lists for SetCPU on your SD card or system memory. This should only be used for a custom kernel that SetCPU doesn't support or for devices with processors not listed in SetCPU's device selection screen. On newer kernels, you don't need to define custom frequencies - just hit "autodetect" on SetCPU's device selection screen. On older kernels, create a text file in your favorite text editor with the frequencies listed from lowest to highest, in kHz, with each frequency separated by comma. For example, the following would be a valid frequency list for the HTC Dream:

19200,122880,128000,245760,384000,528000

If you want to place the file on your SD card, save the text file as setcpu.txt, and place it on either the fat32 partition of your SD card (/sdcard/setcpu.txt) or the ext partition of your SD card (/system/sd/setcpu.txt). You can also name the file to simply "setcpu" and place it in /system. To enable these frequencies, go back to SetCPU's device selection screen by pressing Menu and choosing the custom config option at the very bottom.

FAQ

Why doesn't the widget update with the real time speed?
In short, such a widget would have to either be too imprecise to be useful, or too much of a CPU/battery drain to be useful. From a performance standpoint, and for the sake of accuracy, it simply isn't worth it. On the "ondemand" setting, the system polls the CPU load and decides whether to scale up the CPU at an extremely fast interval (equal to the "sampling rate" value explained above, in microseconds). For example, by default, on the latest CyanogenMod, this happens once every 20,000 microseconds (that's 50 times per second!). I would have to make the widget update the speed at least this quickly in order for it to be accurate. A slower update interval (which some other CPU scaling applications use) would make the reading inaccurate - the speed could have scaled up and down at anytime during the interval. These changes would never have been detected. As you can imagine, updating 50 times a second would put a significant drain on both battery life and CPU power when the widget is visible, and such a quick polling interval could in itself cause the CPU to scale up to maximum.

SetCPU gives me the error "No root!"
SetCPU requires "root" access on your phone, which basically allows you to have full control over all aspects of its software and functionality, such as setting the CPU speed. For more information on obtaining root on your phone, please visit a community such as XDA Developers. Most devices can be rooted (the Droid Eris and HTC Tattoo are notable exceptions), but the exact procedure for rooting varies from device to device. Although stock dev phone builds (ADP1 and Google Ion) give you root access over the Android Debug Bridge (adb), they do not allow applications to gain root access. You need to install a custom ROM like CyanogenMod to have full root access.

Will using this damage my phone?
Maybe. However, to my knowledge, nobody has ever suffered irreversible damage from overclocking. The worst that has happened is a freeze. Upon reboot, the phone may hang on the Android loading screen - this has caused some users to wipe. This hanging is very easily fixed by pulling the battery out. Do not use the "Set on Boot" option on frequencies marked to be unstable.

Why aren't there more speeds to choose from?
The speeds which the CPU can run at is in part a kernel limitation and in part a hardware limitation. Attempting to set the CPU frequency to anything else won't cause any changes in CPU speed. The kernel can be modified to enable certain other frequencies. There are other speeds that would be useful, the capabilities of the processor itself often hinders which frequencies are available on a device.

I get a force close error!
If the force close error gives you the option to "wait," try clicking the wait button to allow SetCPU to finish its task. If SetCPU hangs for a long period of time, or you are not given the option to wait, please contact me.

I think I've found a bug/I have a feature suggestion/I have a question!
The quickest way to contact me and get a response is to shoot an email to coolbho3000+dev@gmail.com. I will try my best to respond to every single e-mail about SetCPU, but I don't check Market comments very often (and that way I have to guess who you are by nickname, so there is oftentimes no way for me to get back to you).

Troubleshooting

Full Changelog

1.4.6: Fixed issues with the battery profile (thanks to everyone who brought this to my attention). Included a much better icon thanks to Josh Deere (dphase).
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.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.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.3b: Fixed a widget issue on the Nexus One and other HDPI devices.
1.4.3a: Added more frequencies for the Nexus One.
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.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.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.0a: Fixed a bug where 122MHz was being called 128MHz.
1.4.0: Revamped the main interface quite a bit, and fixed a few minor bugs.
1.3.7: Added a third profile which will set the CPU to user defined levels once the battery drops below a certain point. Added clarification to the Advanced menu, and a Set on Boot option for the Advanced menu.
1.3.6: Major performance update. Loading the application, refreshing, and setting the CPU speed should be much faster. System Info now shows more information about the RAM and CPU average loads. Uses an updated icon.
1.3.5a: Fixes a force close bug with the Advanced menu.
1.3.5: Added initial landscape mode support. CPU Info is now known as "System Info," and now displays information about the kernel and RAM as well. The speed test feature is now under System Info. Added an Advanced menu to change the CPU's ondemand settings. Optimized the code a bit. Using Android SDK release 1.5r3.
1.3.0r3: Attempts to fix the Hero bug that has been afflicting some people. Also removed all Android 1.1 code, reducing the APK size slightly. If you're not having issues with force closing on certain builds, this update is not necessary.
1.3.0r2: Fixes a bug where the application wasn't setting the CPU governor on properly on startup.
1.3.0r1: Profiles have been added! You can set the CPU to run at different speeds if your phone is charging or if it's sleeping. A low resource service will run in the background and do this if the "Profiles On" checkbox is checked. Because profiles will make the current CPU speed vary, the green text in the main interface will now display the current CPU speed but the seekbars will display the stored CPU speed. Also includes other performance optimizations.
1.2.0: Changed to 1.5 API. Unfortunately, this also means 1.1 support has been dropped completely. If you're on Android 1.1, use SetCPU 1.1.8 or below. Changed drop down lists in program to sliders. Now prevents the user from setting the minimum above the maximum. Added an "Always Max" checkbox that sets the CPU governor in "performance mode." As far as I know all this does is force it to run at maximum all the time.
1.1.8: The drop down lists will now list the current CPU speed when the application starts. A new "speed test" button will perform a quick benchmark. It returns the time it took (in milliseconds) to perform a series of calculations. Here, a lower score indicates faster performance. Additionally, the program should now be slightly faster at actually setting the CPU speed.
1.1.7: Added a "set on boot" checkbox to the Cupcake overclocker. When this checkbox is selected, a service will start, set the current frequencies, then terminate itself when the phone boots. The buttons have been rearranged to make room for this. Also, Toast notifications will now show when setting and refreshing frequencies.
1.1.6a: Fixed a minor bug when some CPU settings required two presses to "Set Frequency" to set.
1.1.6: Pressing the "Menu" button allows you to read the introduction message again and choose your version of Android. 1.5 features only: Various bugfixes and enhancements. Added a green colored maximum/minimum reading to the top. Old Android version support has been kept, but this feature will no longer be supported because the 1.5 Android OS is already very widespread. Please update to Android 1.5 as the overclocking is much more stable!
1.1.5: Added portal screen for user to choose version of Android they have, and support for Android 1.5.
1.1.0: Added some frequencies
1.0.7: This fixes a minor bug where pressing any other button other than back or home would finish(); the app.
1.0.6: This disables the lock when the phone is asleep to save battery.
1.0.5: Adds checkbox to lock CPU frequency even after sleep.
1.0.1: No major changes but fixes some bugs. Plus some UI changes.
Initial Release 1.0.0: Basic overclocking interface for Android 1.0 and Android 1.1.

SetCPU and all content is (c) 2009 Michael Huang