[GUIDE] Fastest way to properly undervolt your CPU

Search This thread

omniwolf

Senior Member
Jan 13, 2005
997
474
sydney
Hello.

Undervolting your CPU has always been a daunting task - there's so many CPU steps, if you pick say -100mV to all frequency steps and you get a reboot, how do you work out which step (or steps!) is causing the problem? If you undervolt -25mV on one frequency, then wait a couple of days to make sure it's stable, then reduce the same frequency by another 25mV.. you'll still be undervolting a year later.

This thread is my tutorial on how to do a best effort at quickly and safely undervolting your phone CPU.

First of all - is undervolting your CPU worth it?
Initially it was thought not to make much difference, but after some serious testing (thanks AndreiLux), "we" decided that it was a good idea. I also did my own basic testing, and it looks like it's worth it.

What are the advantages of undervolting?
  • Better battery life
  • Cooler phone, especially useful if you overclock your CPU

What are the disadvantages of undervolting?
That's the great thing! Really the worst that can happen is your phone freezes or reboots. The steps below should eliminate all of that. Once you have undervolted your CPU to just above its freeze/crash levels, there are no disadvantages!
Note: I have had some minor data loss (eg an app forgets a setting) after an undervolting related crash, but it was rare and I believe has to do with the Perseus kernel "Enable dynamic FSync" setting. I note below how to mitigate against this.

What do you need?
  • A rooted phone, and a kernel that supports undervolting. Perseus and Siyah will work, but any kernel should be fine that supports SetCPU's undervolting schema
  • SetCPU or you can use a combination of STweaks and Stability Test (use STweaks for setting the frequency and voltage, and use Stability Test's Classic Test for the stress test)
  • A paper and a pen - I used Sticky Notes as I was at a computer for most of the process
  • Some patience
Let’s begin.
  1. Open SetCPU. You’ll be greeted by the Main screen which has the min/max CPU frequencies, the governor options, and the IO scheduler options. Reduce the max CPU frequency to the lowest step. On the SGS3 this will be reducing 1400MHz down to 200MHz, so you now have both the min and the max set at 200MHz. The phone will get pretty slow at this point. Ensure the Set on Boot option is unticked
  2. Set the governor to Performance (note: you have to make sure all cores of your CPU are being used. In a complex kernel such as Perseus, you'll have to go into STweaks and set the CPU hotplug lock to 4 so all 4 cores are used. Also note there appears to be a bug in Perseus at the time of writing: you have to set the hotplug lock BEFORE you change the governor to performance)
  3. Move to the Voltages screen
  4. Ensure the Set on Boot option is unticked, and scroll down to the lowest setting, and change it to something low, like 700mV, and then apply it (click the third icon from the right at the top of the screen, a rectangle with a tick on it) . This first setting is always a bit of guess and check, and to be honest you’re hoping for the phone to freeze or crash on this first one. Has it frozen? If so move on to the next step. If not, reduce it by a further 25mV and apply again, repeat until your phone freezes or reboots.
  5. So, you have undervolted too far. Reboot the phone, and perform steps 1-3 again. At step 4, use the voltage that crashed your phone +25mV (eg if it crashed at 675mV, this time set it to 700mV). Now, you have a very slow phone running a low voltage that doesn’t immediately crash it. Move on to the next step
  6. An easy crash test I found was simply allowing the phone to go into deep sleep, and waking it up again. To do this, unplug your phone if it’s charging, and turn the screen off. At this point I usually wrote the time down on my piece of paper, as well as what frequency and voltage I was testing as I’m prone to forget these things. Wait 5 minutes with the screen off (and make sure no notifications have come in while the screen is off – this wakes the phone up and you’ll have to wait another 5 mins), then turn the phone on. You’ll know it’s gone into deep sleep as there’ll be a slight delay before the screen turns on as compared to no delay when turning it off and immediately back on again. If the phone doesn’t turn on, go to step 5. If your phone comes out of deep sleep OK, move on to the next step.
  7. Now, we stress test. In SetCPU scroll over to the Info screen, and scroll down to the Stress Test option. Start it, and note down the time on your paper/Sticky Notes. Your CPU will now run as hard as it can at the current frequency. Let it run for 15-20 minutes. At the lowest frequency it will be pretty laggy and slow, if you think it has frozen always give it 30 seconds to see if it picks up again. If it gets stuck for over a minute, you probably have a crash. Go to step 5. If after 15-20 minutes it’s still running, you have found your first stable(ish) voltage for that frequency! At this point I saved the voltages in SetCPU by pressing the diskette icon. To ensure the changes are written to disk turn the phone screen off for 5 seconds then turn it back on again.
  8. We are now ready for the next frequency. There’s pretty much no way a frequency will run stably on a lower voltage than a frequency below it, so our first voltage for the next frequency up should be the same stable voltage we found for the previous frequency. For example if we found a stable voltage of 725mV on the 200MHz frequency, our first test voltage for 300MHz should be 725mV. Write this down with the frequency on your paper. In the Main screen of SetCPU, change the max frequency to the next step up. Then, in the Voltages screen, adjust the voltage to be the same as the lower frequency, as discussed above. If your phone immediately freezes or reboots, move to the next step. If not, go to step 10.
  9. So, you have undervolted too far, again! Reboot your phone, open up SetCPU, and in the main screen ensure the max frequency is set to the frequency we’re testing. Give the sliding bar things a jiggle to apply it. Ensure the governor is set to Performance by pressing it on the lower left part of the screen. Move to the Voltages screen, and you’ll either see your previous “saved” voltage values ready to be applied in dark grey under the “current” voltage settings, or you’ll have lost your “saved” voltage settings. If you have lost them, never fear; just restore the latest settings by clicking the first from the right icon at the top (a square with an arrow pointing outwards). Adjust the frequency we’re testing’s value to 25mV more than the value you last used when it crashed, and apply it. If it crashes immediately, repeat this step. If not, move on
  10. We now start the two tests in steps 6 and 7 again, but this time if your phone crashes or freezes, go to step 9. If it completes the deep sleep and stress test tests, go to step 8 for the next frequency test.

Sorry for the complexity here, but it was the easiest way I could write it without repeating myself too much. The TL;DR version goes like this:
  • Pick the lowest untested frequency, set the max frequency to this and the governor to Performance, and find the lowest voltage that doesn’t immediately crash the phone
  • Put the phone into deep sleep, and see if it crashes. If it does, increase the voltage for the current frequency we’re testing by 25mV and test again. If not, move on
  • Run a stress test on the phone for 15-20 minutes. If it crashes, raise the voltage by 25mV and go to step B. If it doesn’t crash the current frequency is now tested. Go to step A

You now have a set of frequencies that shouldn’t immediately crash the phone. Set the min and the max frequencies back to normal, and set the governor back to your usual governor. At this point for me I was able to use the phone for about 2 hours before I had my first crash. How running a stress test on each frequency for 20 minutes didn’t pick up this crash situation I’m not sure, but it didn't.
After screwing around for a while I found the easiest solution was to just raise each frequency step by 25mV and then continue every day usage. That was enough to stabilise my phone. If it still crashes for you, keep raising all the values by 25mV until it settles down. After a day or two of no crashes you can start slowly one by one reducing each step by 25mV again to find out which step caused the crash.

After that, you should be done!

Ps I know there is another thread around here discussing undervolting, but I found it too vague on the details and sometimes wrong, so I thought I’d share my experiences in the hope it might help.
 
Last edited:

Naughty Boy

New member
Dec 22, 2012
1
0
Good work!

Would you pls post your testing results for our reference?

Thanks.

Mod edit: please do not quote the OP.
 
Last edited by a moderator:

me_max

Senior Member
Feb 26, 2012
96
21
A table with the running undervolting settings would be a great orientation help. Given that, people don't need to trail and error from scratch.

Sent from my Nexus 4 using xda app-developers app
 
G

GuestK00280

Guest
A table with the running undervolting settings would be a great orientation help. Given that, people don't need to trail and error from scratch.

Sent from my Nexus 4 using xda app-developers app

Under/over volting doesn't work that way. Each chip is unique, and chips are tested only on default voltage and frequencies, so each one's behavior on non-default settings is unpredictable. Some are able to work on 100 mV lower voltage, some can't handle even -25mV... Trial and error is the core of overclocking.
 

omniwolf

Senior Member
Jan 13, 2005
997
474
sydney
yep, that's one of the reasons i disagreed with the other UV thread - they list absolute voltage levels which are only applicable to the specific grade of chip in their phone (and yes, I posted some corrections in the other thread but they were ignored).
Have a look HERE if you'de like to see all the different possible default voltage settings for the i9300/i9305.

As a rough rough guide of a voltage level for the 200MHz step that will (hopefully) crash your phone, I'd start at 650mV.
 
  • Like
Reactions: will_chrome

Kriomag

Senior Member
Nov 22, 2011
414
114
Poznań
i have tested my cpu

for stable values and i finished with these settings:

200Mhz - 0.775V
300Mhz - 0.800V
400Mhz - 0.825V
500Mhz - 0.850V
600Mhz - 0.875V
700Mhz - 0.900V
800Mhz - 0.925V
900Mhz - 0.950V
1000Mhz - 0.975V
1100Mhz - 1.000V
1200Mhz - 1.050V
1300Mhz - 1.100V
1400Mhz - 1.150V
1500Mhz - 1.200V

My exynos is stable for 2 months now, i play a lot of new games like most wanted etc.

In UV more important is leaving phone in idle, deep sleep on and off, or non demanding tasks, if i UV too much games were stable but i had random restarts when phone was in the pocket sleeping. But, as You mentioned, every cpu is different so everyone has to test it...
 

lightpsycho

Senior Member
Aug 21, 2012
189
26
Thank you OP for this very, very useful guide. I am new to undervolting and even though I have a T999V north-american model with the Qualcomm SoC, this will prove very useful in my experimentation.

Only difference with the Qualcomm is that clock speed can go as low as 96Mhz, but you can't undervolt under 700mV - SetCPU just refuses to apply anything under that.
 

omniwolf

Senior Member
Jan 13, 2005
997
474
sydney
No probs :)

That's a kernel limitation, not SetCPU. Check with your kernel dev to see if they can allow further undervolting.
I tried to make the instructions as generic as possible so any stepping config could use them. good luck!
 
  • Like
Reactions: shoames

YoHoJo

Senior Member
Oct 11, 2012
121
26
I'm doing my 96Mhz test and running a stress test.
The loading circle is still moving just fine (although a bit sluggishly) but none of my buttons are responding at all so I cant leave the test until I pull the battery. Would this count as a freeze/crash, or do you think this voltage is okay to stick at (or even go lower?!)
 

genericuser2013

New member
May 17, 2013
2
0
hi guys. this might sound like a dumb question but i honestly looked everywhere but i cant seem to find the UV in setcpu. i'm i missing something?
 

TonyTrollsten

Senior Member
Feb 3, 2013
206
28
Hey
I find that 200 is stable on 687500
And then when I move to edit 300 it reboots
Then increased the number on both and still reboot.
I don't restart in between. Any idea??????


Sent from my GT-I9300 using xda app-developers app
 

TonyTrollsten

Senior Member
Feb 3, 2013
206
28
What do you mean low he says in the op to reduse to 700
THC for fast answear

Sent from my GT-I9300 using xda app-developers app
 

STAticKY

Senior Member
Feb 11, 2013
1,067
394
Christchurch
What do you mean low he says in the op to reduse to 700
THC for fast answear

Sent from my GT-I9300 using xda app-developers app

Default voltage for 200mhz step is 0.9v (for me on asv2). So 0.7v (which is still higher than what you have set) it a whopping 200mv less than stock which is like I said before, ridiculously low. It may run at this voltage for you for now(depending on your as level), but I can pretty much guarantee you that it will never be 100% stable

I'll take your THC ; ) lol

TP.
 
Last edited:
  • Like
Reactions: TonyTrollsten

omniwolf

Senior Member
Jan 13, 2005
997
474
sydney
What do you mean low he says in the op to reduse to 700
THC for fast answear

Sent from my GT-I9300 using xda app-developers app
yep, as STAticKY says, if you get a reboot on a step, then it's not stable. raise the voltage on that step and try again.

Default voltage for 200mhz step is 0.9v. So 0.7v (which is still higher than what you have set) it a whopping 200mv less than stock which is like I said before, ridiculously low. It may run at this voltage for you for now, but I can pretty much guarantee you that it will never be 100% stable

I'll take your THC ; ) lol

TP.
This is only correct for your ASV value. Please edit this post, it contains incorrect information. Your default voltage for 200MHz might be 0.9v, but for other people it's likely different, as they have different quality chips. Read post 3, 4, and 5 in this thread for more info.

i thought the matr1x kernel supports it. UV works fine in trickster mod. i don't even have a heading for 'voltages' in the the app like it's shown in the play store.
possibly the matirx kernel does support UV, but it might not be exposed in the way that SetCPU is expecting. Does the Matrix kernel developer recommend a specific app to adjust the voltages? If so use that, you can still follow my guide.
 

Top Liked Posts

  • There are no posts matching your filters.
  • 51
    Hello.

    Undervolting your CPU has always been a daunting task - there's so many CPU steps, if you pick say -100mV to all frequency steps and you get a reboot, how do you work out which step (or steps!) is causing the problem? If you undervolt -25mV on one frequency, then wait a couple of days to make sure it's stable, then reduce the same frequency by another 25mV.. you'll still be undervolting a year later.

    This thread is my tutorial on how to do a best effort at quickly and safely undervolting your phone CPU.

    First of all - is undervolting your CPU worth it?
    Initially it was thought not to make much difference, but after some serious testing (thanks AndreiLux), "we" decided that it was a good idea. I also did my own basic testing, and it looks like it's worth it.

    What are the advantages of undervolting?
    • Better battery life
    • Cooler phone, especially useful if you overclock your CPU

    What are the disadvantages of undervolting?
    That's the great thing! Really the worst that can happen is your phone freezes or reboots. The steps below should eliminate all of that. Once you have undervolted your CPU to just above its freeze/crash levels, there are no disadvantages!
    Note: I have had some minor data loss (eg an app forgets a setting) after an undervolting related crash, but it was rare and I believe has to do with the Perseus kernel "Enable dynamic FSync" setting. I note below how to mitigate against this.

    What do you need?
    • A rooted phone, and a kernel that supports undervolting. Perseus and Siyah will work, but any kernel should be fine that supports SetCPU's undervolting schema
    • SetCPU or you can use a combination of STweaks and Stability Test (use STweaks for setting the frequency and voltage, and use Stability Test's Classic Test for the stress test)
    • A paper and a pen - I used Sticky Notes as I was at a computer for most of the process
    • Some patience
    Let’s begin.
    1. Open SetCPU. You’ll be greeted by the Main screen which has the min/max CPU frequencies, the governor options, and the IO scheduler options. Reduce the max CPU frequency to the lowest step. On the SGS3 this will be reducing 1400MHz down to 200MHz, so you now have both the min and the max set at 200MHz. The phone will get pretty slow at this point. Ensure the Set on Boot option is unticked
    2. Set the governor to Performance (note: you have to make sure all cores of your CPU are being used. In a complex kernel such as Perseus, you'll have to go into STweaks and set the CPU hotplug lock to 4 so all 4 cores are used. Also note there appears to be a bug in Perseus at the time of writing: you have to set the hotplug lock BEFORE you change the governor to performance)
    3. Move to the Voltages screen
    4. Ensure the Set on Boot option is unticked, and scroll down to the lowest setting, and change it to something low, like 700mV, and then apply it (click the third icon from the right at the top of the screen, a rectangle with a tick on it) . This first setting is always a bit of guess and check, and to be honest you’re hoping for the phone to freeze or crash on this first one. Has it frozen? If so move on to the next step. If not, reduce it by a further 25mV and apply again, repeat until your phone freezes or reboots.
    5. So, you have undervolted too far. Reboot the phone, and perform steps 1-3 again. At step 4, use the voltage that crashed your phone +25mV (eg if it crashed at 675mV, this time set it to 700mV). Now, you have a very slow phone running a low voltage that doesn’t immediately crash it. Move on to the next step
    6. An easy crash test I found was simply allowing the phone to go into deep sleep, and waking it up again. To do this, unplug your phone if it’s charging, and turn the screen off. At this point I usually wrote the time down on my piece of paper, as well as what frequency and voltage I was testing as I’m prone to forget these things. Wait 5 minutes with the screen off (and make sure no notifications have come in while the screen is off – this wakes the phone up and you’ll have to wait another 5 mins), then turn the phone on. You’ll know it’s gone into deep sleep as there’ll be a slight delay before the screen turns on as compared to no delay when turning it off and immediately back on again. If the phone doesn’t turn on, go to step 5. If your phone comes out of deep sleep OK, move on to the next step.
    7. Now, we stress test. In SetCPU scroll over to the Info screen, and scroll down to the Stress Test option. Start it, and note down the time on your paper/Sticky Notes. Your CPU will now run as hard as it can at the current frequency. Let it run for 15-20 minutes. At the lowest frequency it will be pretty laggy and slow, if you think it has frozen always give it 30 seconds to see if it picks up again. If it gets stuck for over a minute, you probably have a crash. Go to step 5. If after 15-20 minutes it’s still running, you have found your first stable(ish) voltage for that frequency! At this point I saved the voltages in SetCPU by pressing the diskette icon. To ensure the changes are written to disk turn the phone screen off for 5 seconds then turn it back on again.
    8. We are now ready for the next frequency. There’s pretty much no way a frequency will run stably on a lower voltage than a frequency below it, so our first voltage for the next frequency up should be the same stable voltage we found for the previous frequency. For example if we found a stable voltage of 725mV on the 200MHz frequency, our first test voltage for 300MHz should be 725mV. Write this down with the frequency on your paper. In the Main screen of SetCPU, change the max frequency to the next step up. Then, in the Voltages screen, adjust the voltage to be the same as the lower frequency, as discussed above. If your phone immediately freezes or reboots, move to the next step. If not, go to step 10.
    9. So, you have undervolted too far, again! Reboot your phone, open up SetCPU, and in the main screen ensure the max frequency is set to the frequency we’re testing. Give the sliding bar things a jiggle to apply it. Ensure the governor is set to Performance by pressing it on the lower left part of the screen. Move to the Voltages screen, and you’ll either see your previous “saved” voltage values ready to be applied in dark grey under the “current” voltage settings, or you’ll have lost your “saved” voltage settings. If you have lost them, never fear; just restore the latest settings by clicking the first from the right icon at the top (a square with an arrow pointing outwards). Adjust the frequency we’re testing’s value to 25mV more than the value you last used when it crashed, and apply it. If it crashes immediately, repeat this step. If not, move on
    10. We now start the two tests in steps 6 and 7 again, but this time if your phone crashes or freezes, go to step 9. If it completes the deep sleep and stress test tests, go to step 8 for the next frequency test.

    Sorry for the complexity here, but it was the easiest way I could write it without repeating myself too much. The TL;DR version goes like this:
    • Pick the lowest untested frequency, set the max frequency to this and the governor to Performance, and find the lowest voltage that doesn’t immediately crash the phone
    • Put the phone into deep sleep, and see if it crashes. If it does, increase the voltage for the current frequency we’re testing by 25mV and test again. If not, move on
    • Run a stress test on the phone for 15-20 minutes. If it crashes, raise the voltage by 25mV and go to step B. If it doesn’t crash the current frequency is now tested. Go to step A

    You now have a set of frequencies that shouldn’t immediately crash the phone. Set the min and the max frequencies back to normal, and set the governor back to your usual governor. At this point for me I was able to use the phone for about 2 hours before I had my first crash. How running a stress test on each frequency for 20 minutes didn’t pick up this crash situation I’m not sure, but it didn't.
    After screwing around for a while I found the easiest solution was to just raise each frequency step by 25mV and then continue every day usage. That was enough to stabilise my phone. If it still crashes for you, keep raising all the values by 25mV until it settles down. After a day or two of no crashes you can start slowly one by one reducing each step by 25mV again to find out which step caused the crash.

    After that, you should be done!

    Ps I know there is another thread around here discussing undervolting, but I found it too vague on the details and sometimes wrong, so I thought I’d share my experiences in the hope it might help.
    4
    i have tested my cpu

    for stable values and i finished with these settings:

    200Mhz - 0.775V
    300Mhz - 0.800V
    400Mhz - 0.825V
    500Mhz - 0.850V
    600Mhz - 0.875V
    700Mhz - 0.900V
    800Mhz - 0.925V
    900Mhz - 0.950V
    1000Mhz - 0.975V
    1100Mhz - 1.000V
    1200Mhz - 1.050V
    1300Mhz - 1.100V
    1400Mhz - 1.150V
    1500Mhz - 1.200V

    My exynos is stable for 2 months now, i play a lot of new games like most wanted etc.

    In UV more important is leaving phone in idle, deep sleep on and off, or non demanding tasks, if i UV too much games were stable but i had random restarts when phone was in the pocket sleeping. But, as You mentioned, every cpu is different so everyone has to test it...
    2
    Very nice guide, especially for the "first-timers" just like me. Helped me a lot, Thanks!

    Out of curiousity, though. What is the point of performing deep sleep tests on every new frequency, if the lower ones are stable already? I assume deep sleep use low clocks, no? Even if it uses higher clocks, there's a built in stress-testing already (step 7). Heck, i don't even know how deep sleep works. Care to enlighten me on this one?

    When phone wakes from deep sleep cpu starts on some frequency which is not always minimum. Probably the real life situations confirmed that this jump from deep sleep to first frequency is very stressful for the cpu therefore if this frequency is not rock solid phone freezes.
    1
    yep, that's one of the reasons i disagreed with the other UV thread - they list absolute voltage levels which are only applicable to the specific grade of chip in their phone (and yes, I posted some corrections in the other thread but they were ignored).
    Have a look HERE if you'de like to see all the different possible default voltage settings for the i9300/i9305.

    As a rough rough guide of a voltage level for the 200MHz step that will (hopefully) crash your phone, I'd start at 650mV.
    1
    This is my way for perfectly stable undervolt with Boeffla App or any with 12.5mV steps support, written in a programmist's way a little bit - so it has to be done EXACTLY with these steps, I hope you won't finish in a neverending loop ;):

    Start undervolting from the highest frequency.

    1. Set the tested frequency as minimal clock, set maximal to max.
    2. Undervolt the tested frequency by 25mv and apply, leave the others unchanged (if crashed already go to step 6).
    3. Run some games and apps for couple of minutes (if crashed already go to step 6).
    4. Now set the max frequency to the one you're testing and run stress test (if crashed already goto step 6).
    5. If there is no crash yet - repeat steps 2-4 until first freeze/crash, then:
    6. Add 12.5mV to the tested frequency and apply.
    7. Repeat steps 3-4.
    6.1. If stable - add another 12.5mV and write down the value.
    6.2. If crashed - add 25mV and write down the value.
    8. Reset the tested freq undervolt to default and start with next frequency from step 1.
    9. When you're done with all frequencies lower them all by 12.5mV, apply, and test during normal use, also during deep sleep for 200-400MHz steps.
    10. Should be stable, so add 12.5mV back, apply, and you got "almost perfect" undervolt!

    END ;)