Sunday, March 13, 2011

Android Kernel Undervolting: Benefits and Pitfalls

Android is rapidly gaining steam as one of the most common mobile operating systems on the market, and for good reason: it’s a solid, elegant, and stable OS that’s very well-suited to its job. For me and a great many others, however, there is one unique feature of Android that we place up on a pedestal: its customizability. You can change everything to your heart’s content: radio firmware, kernels, wireless drivers, launchers, keyboards, the whole gamut of core operating system features. For someone technologically inclined, Android is like a playground; one could spend hours tinkering with wireless drivers and radio firmware. Today’s topic concerns the kernel, however; specifically, kernel undervolting and its pros and cons.
Before I begin, two caveats. The first: this article assumes you already have your Android phone rooted. If not, I’m afraid I can’t go into it here: the method is different for each phone, but you can find fantastic resources online: www.cyanogenmod.com is my go-to resource for any problems I have, and they have excellent guides for rooting the Dream, Desire, Droid, and others should you need them.

The second caveat is that I own a Nexus One, and as such all examples in this article (standard voltages, profiles, kernel versions, etc.) will be examples from a Nexus One. The examples are still valid, but I warn you so that you don’t mistakenly use my numbers in your own undervolting adventures: each phone is different, and you must take into account your own phone specs when installing an undervolted kernel (or any kernel, for that matter).

Now that we’ve gotten that out of the way: Let’s go!

What Is Kernel Undervolting?

Kernel undervolting is the practice of modding an Android kernel to run at a lower voltage than the stock kernel. In the case of a Nexus One, the stock voltage is 1275mV; over time, it was discovered that this stock voltage was more than sufficient to power the Nexus One at its default clock speed of 1GHz. The idea behind kernel undervolting is to reduce that stock voltage to the bare minimum required to run the phone at factory settings. Many undervolt kernels typically scale back the voltage to 1050mV, and some even further; I am using, at the moment, a Pershoot kernel undervolted to 950mV. Like CPU underclocking, the logic behind undervolting is simple; by reducing the amount of power the kernel is drawing, the phone both runs cooler and saves battery life.

Pros and Cons of Undervolting An Android Kernel

Pros

The pros, as mentioned before, are increased battery life and cooler temperatures. It should be noted at this juncture that there is controversy regarding whether or not undervolting a kernel truly provides increased battery life; there are those that believe it makes no difference, and unfortunately much of the evidence to or for is circumstantial or based on hearsay, since usage patterns, rogue apps, and any number of other factors can contribute to a perceived difference in battery drain or conservation. The only study to this end was conducted here: http://forum.xda-developers.com/showthread.php?t=672144, by kernel developer kmobs. Using a control kernel and three different test kernels, he concluded that undervolting does help battery life, up to a point, although once the voltage drops below a certain threshold (around 925mV in his test) the battery life actually suffers due to errors caused by the baseband radio not getting enough power. Suffice it to say, however, that kmobs’ study can be safely taken to mean that undervolting a kernel does in fact provide better battery life than a stock 1275mV kernel.

Cons

On the flip side, kernel undervolting has its pitfalls. Undervolting a phone too much can cause serious errors to appear as the power-starved processor starts to error out. The radio from above is a perfect example, but there have also been numerous other errors that result from extreme undervolting. While some undervolters have been able to get as low as 800mV without incident, a great many others who push that margin will find random and mysterious errors beginning to happen. These errors can range from random reboots to the phone locking up when the wifi is turned on, and quite often there is no indication that the undervolted kernel is the cause. The very worst case scenario for undervolting the Android kernel is that you may in fact brick the phone; the lack of voltage during boot could conceivably corrupt the phone’s firmware, leaving the phone unusable. Generally speaking, 950mV has worked for the majority of users, and so custom Nexus One kernels generally come in flavors ranging from 950mV to the stock kernel voltage of 1275mV.

How to Install an Undervolted Kernel

Note: The process to install an undervolted kernel is not at all different from a regular custom kernel install, and this walkthrough can also be used for other kernel installations, undervolted or not.

After rooting your phone, the easiest way to install a custom kernel is using the ROM Manager app, which can be downloaded from the Android Market. ROM Manager is a great utility for managing custom ROMs and kernels, eliminating the need to use fastboot or adb and letting you modify your system wherever you like!
  1. Download an undervolted kernel. Pershoot’s undervolted kernels can be found here: http://droidbasement.com/db-blog/ as an example, though there are others.
Read more: Good Networking