[Galaxy S I9000 General] JohnnieDarko:
Undervolt Guide

Hey guys, I did undervolting tests for myself and it resulted in a stable phone with the following settings:

Step:1000- 800- 400- 200 [MHz]

ARM.	1275-1200-1050- 950 [mV] (stock Glitch ARM voltages)

ARM. 1200-1100- 975- 850 [mV] (my ARM voltages, The difference is -75, -100, -75, -100.. Not bad!)

INT.	1100-1100-1100-1100 [mV] (stock Glitch INT voltages)

INT. 1050- 975- 950- 950 [mV] (my INT voltages, the difference is -50, -125, -150, -150.. Again, not bad!)

Because every phone is different, I thought I'd better share my method with you, than to just give these settings.

UNDERVOLTING GUIDE

SETTINGS

Phone: Samsung Galaxy S GT-i9000

Rom: ICS Teamhacksung CM9 v15 (Android ICS 4.0.3.)

Kernel: Icy Glitch v14b5 Kernel

Settings: NStools

Stresstest: CFBench 1.1, GT Free+ HD //a free racing game from the market

Monitor: CPU Spy //for checking if the phone has entered deep sleep, and whether it wakes up

CPU max: 1 GHz

CPU min: 200Mhz //Motivation below in the Notes(2)

IO: FIOPS

Governor: GlitchAssV2 (= renamed SmartAssv2) Notes(3)

Wifi/3G: On/On.

DIDLE: Off. //Motivation below in the Notes(4)
​

NOTES

Some notes before we start:

1. My goal is to optimize battery life by lowering the voltages as far as possible, while still retaining full stability. No over- or underclocking is used for now, but my method can be used when overclocked as well.

2. I set the CPU Minimum to 200MHz, because the native busspeed of the phone is 200MHz. At CPU 100MHz, the busspeed is also halved, meaning that RAM and GPU also work at half speed. During screen-off, tasks will take an unproportional longer time to complete compared to 200MHz, sothe phone will spend less time in deep-sleep.

3. SmartAssV2 governor because it limits the CPU speed at screen-off to 400MHz, which will prevent rogue aps or crazy GPS from draining your phone without you noticing.

4. No DIDLE because currently (24-feb-2012) people are still messing with scripts and whatnot to get it working.

Other:

- Never change voltages with more than 25mV at a time. Even at normally stable values, changing the settings with 50mV or more often cause crashes. Crashes take valuable time to reboot, so don't use bigger steps than 25mV unless you love watching the bootanimations.

UNDERVOLTING METHOD: SHAVING THE PEAKS

We start with the ARM (CPU) voltages. After finding minimal ARM values, we repeat the method for the INT settings. The method exists out of three steps:

First part of method:

Reduce the voltagess so all voltages are equal distance apart. For example, set all steps at 100mV difference. (See Steps 1 to 3 in the EXAMPLE below).

The reason why my method tries to keep the voltages at equal distances of 100mV apart, is because large voltage jumps are a cause of crashes/hangs.

Second part of method:

Go to the lowest frequency (200MHz), and reduce the voltage with 25mV. Then do the same for 400MHz, then 800Mhz, and then 1000MHz.

It is wise to check the stability after a couple of changes. I check stability this way:

1. Run a benchmark (CF Bench)*,

2. Let the phone sleep (screen off for 5 seconds), wake it up (screen on)

3. Play a game (GT Free+ HD) with it, to check stability.

It isn't necessary, but you can use CPU-Spy to check if the phone entered deep sleep during screen-off, so you can be sure that the phone also wakes up from deep sleep.

*- If CF-Bench hangs on "Detecting System Properties", then force-close the app.

(Menu button -> Manage Apps -> All Downloaded Apps -> CF Bench -> Force Close).

If it still hangs, force-close it again. It works after a couple tries.

Third part of method:

If the phone crashes or hangs after lowering a voltage, the limit for that particular frequency has been reached. Put that particular voltage back up again by 25mV. Continue reducing the other voltages like in the previous step, but skip that particular frequency. Repeat this until all you can't lower the voltage on any step without causing an instant crash or usage instability.

You have now optimized your undervolting.

This should be easy and clear to follow, but because lots of non-native english speakers also read these forums, here's an example.

STEP-BY-STEP EXAMPLE

Below is a step-by-step example of my undervolting process for ARM voltages:

Step:	1000- 800- 400- 200 [MHz] (These are the frequency steps)

Start.	1275-1200-1050- 950 [mV] (These are the stock Glitch ARM voltages)

First part of method:

// Between 800 and 400 is the biggest jump in voltage (150mV), so reduce 800MHz with 25mV. The new settings are:

1. 1275-1175-1050- 950

// Between 800 and 400 is the biggest jump in voltage (125mV), so reduce 800MHz with 25mV. The new settings are:

2. 1275-1150-1050- 950

// Between 1000 and 800 is the biggest jump in voltage (125mV), so reduce 1000MHz with 25mV

3. 1250-1150-1050- 950

//Now all CPU voltages are 100mV apart.

===> Stability confirmed. Save current settings in NS-Tools so you can load them easily after a crash. (But DON'T tick "use at startup"!!)

Second part of method:

//Start lowering the lowest freq (200MHz) by 25mV

4. 1250-1150-1050- 925

//Lower the next freq (400MHz) by 25mV

5. 1250-1150-1025- 925

//Lower the next freq (800MHz) by 25mV

6. 1250-1125-1025- 925

//Lower the next freq (1000MHz) by 25mV

7. 1225-1125-1025- 925

===> Stability confirmed. Save current settings in NS-Tools. (But DONT tick "use at startup")

Repeat the last 4 steps. So first lower 200MHz with 25mV, then 400MHz, etc.. You

will end up with:

8. 1200-1100-1000- 900

===> Stability confirmed. Save current settings in NS-Tools. (But DONT tick "use at startup")

// Lower the lowest freq (200MHz) by 25mV

9. 1200-1100-1000- 875

// Lower the next freq (400MHz) by 25mV

10. 1200-1100- 975- 875

// Lower the next freq (800MHz) by 25mV

11. 1200-1075- 975- 875

=====> This causes a hang on my phone. So the minimum value for me on 800MHz is

Third part of method:

1100mV.

// After the reboot, I reload the latest settings in NS-Tools, and repeat steps // 9 and 10. Then, instead of lowering 800MHz (and causing another hang), I will // lower the 1000MHz step:

11b. 1175-1100- 975- 875

=====> This also causes a hang on my phone. So the minimum value for me on 1000MHz is 1200mV.

// After the reboot, I redo all the steps above until I'm at step 10 again.

// Then, instead of lowering 1000MHz (and causing another hang), I will lower the 200MHz step:

11c. 1200-1100- 975- 850

=====> After hours of use this is seems stable for me. Save current settings in NS-Tools. (But DONT tick "use at startup") Let's continue.

// Lower the next freq (400MHz) by 25mV

12. 1200-1100- 950- 850

=====> This also causes a hang on my phone. So the minimum value for me on

400MHz is 950mV. The only freqency left to lower is the 200MHz step:

12b. 1200-1100- 975- 825.

=====> This also causes a hang on my phone. So the minimum value for me on 200MHz is 850mV. So step 11c contains are the minimum settings my phone can handle.

CONCLUSION:

Compare with what we started with

Step:	1000- 800- 400- 200 [MHz]
Start.	1275-1200-1050- 950 [mV] (stock Glitch ARM voltages)
11c. 1200-1100- 975- 850 [mV] (my ARM voltages)

The difference is -75, -100, -75, -100.. Not bad!

This finishes the ARM settings. For the INT settings, continue reading:

I must note that many kernel builders (including TK-Glitch) have noted that INT voltages below 1000mV don't do much for battery life and only cause instability. Well it might be true that it doesn't change much for the battery life, I don't know. The biggest battery killers are still the Screen, 3G and GPS. Therefore it is up to you if you actually want to undervolt the INT settings, but either way, here's my method.

For the INT settings you can mostly use the same method as for the ARM settings. The difference with the INT voltages is that you definitely need to check the GPU and RAM under load, so be sure to test it with a demanding game and app (for example 'GT Free+ HD' and the Camera). Also just use your phone, swipe homescreens, browse the web, etc etc.

The problem with too low INT voltages is that your phone will not immediately hang, crash or reboot, but it will show artifacts, such as:

- the screen may be darker than usual

- the touchscreen may become unresponsive or lag

- the touchscreen may misinterpret your finger. (lets say you swipe the homescreen to the left, but instead, it will open the app that was under your finger).

INT Voltages are therefore slightly more difficult to get right. If you experience weird behavior after undervolting, raise all INT voltages with 25mV, and try again.

I ended up with:

Step:	1000- 800- 400- 200 [MHz]
Start.	1100-1100-1100-1100 [mV] (stock Glitch INT voltages)
1. 1075-1075-1075-1075
2. 1050-1050-1050-1050
3. 1025-1025-1025-1025 Unstable --> 1000MHz =1050mV
4. 1050-1025-1025-1025
5. 1050-1000-1000-1000 Stable
6. 1050- 975- 975- 975 Stable
7. 1050- 950- 950- 950 Unstable --> 800MHz =950mV
7b. 1050- 975- 950- 950 Stable
8. 1050- 975- 950- 925 'Stable' But touchscreen started acting up.
//Therefor 7b. is the minimal setting for my phone.

CONCLUSION:

Compare with what we started with

Step:	1000- 800- 400- 200 [MHz]
Start.	1100-1100-1100-1100 [mV] (stock Glitch INT voltages)
7b. 1050- 975- 950- 950 Stable

The difference is -50, -125, -150, -150.. Again, not bad!

Enjoy your cooler and more efficient phone. If anything is confusing just ask me.