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.
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
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)
Move to the Voltages screen
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.
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
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.
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.
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.
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
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.
Good work!
Would you pls post your testing results for our reference?
Thanks.
Mod edit: please do not quote the OP.
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
me_max said:
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
Click to expand...
Click to collapse
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.
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.
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...
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.
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!
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?!)
That's just the CPU bogging down, it's not a voltage issue.
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?
Probably the kernel you're using doesn't support UV.
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
tony1234567890tony said:
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
Click to expand...
Click to collapse
That means that 200 is NOT stable. Try using a higher voltage. 0.6875v is ridiculously low
TP.
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
tony1234567890tony said:
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
Click to expand...
Click to collapse
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.
Thanks I'll give you feed back
Sent from my GT-I9300 using xda app-developers app
omniwolf said:
Probably the kernel you're using doesn't support UV.
Click to expand...
Click to collapse
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.
tony1234567890tony said:
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
Click to expand...
Click to collapse
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.
STAticKY said:
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.
Click to expand...
Click to collapse
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.
genericuser2013 said:
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.
Click to expand...
Click to collapse
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.
Can anybody tell me how to determine ASV-level of my chip?
is anybody else having an issue when you underclock? i usually set it to 1.4Ghz but the phone overrides the setting i put up using Atuntu CPU master. i feel that the phone is still fluid when underclocked, so i tend to under clock to save battery life(and stop if from overheating to 105.1 degrees farenheit).i need to get full usage out of my phone as the day starts at 5 AM till 5PM with heavy usage
any luck with this issue?
Kernel on forums if you have compatible phone. Inteli and trickster with thermald disabled. Lock freq. While your at it, look up your soc bin and and start trialling undervolts.
42 8996883
Steamer86 said:
Kernel on forums if you have compatible phone. Inteli and trickster with thermald disabled. Lock freq. While your at it, look up your soc bin and and start trialling undervolts.
Click to expand...
Click to collapse
in English please? o dont get what wou mean by the SOC Bin and the part after that. i did the trickster, but it still overrides it.
You can't make it stick with default kernel. You need a modified one with inteli so thermald doesn't auto override. SOC bin is details on your "CPU" quality for base volt values, better SOC means better overclock, underclock, and undervolting. If you're serious in doing this, search and learn. This isn't simple modification, and you will not be able do this in simple way. Make sure you have set on boot checked in trickster. Well work somewhat better, but still not a permanent solution.
So I recently switched kernels from my long time of using Trinity, and now I am experiencing thermal throttling because of the battery temp. The kernel I'm currently using (Inception Kernel) has this issue and I was wondering if there was any way to disable it? It's causing my GPU frequency to drop to 325/200mhz and really bugs me. Tried to remove reading permissions of thermald.conf and even deleted it.
Tl;Dr - Battery temp @ x>35c throttles, can I turn it off?
Detailed said:
So I recently switched kernels from my long time of using Trinity, and now I am experiencing thermal throttling because of the battery temp. The kernel I'm currently using (Inception Kernel) has this issue and I was wondering if there was any way to disable it? It's causing my GPU frequency to drop to 325/200mhz and really bugs me. Tried to remove reading permissions of thermald.conf and even deleted it.
Tl;Dr - Battery temp @ x>35c throttles, can I turn it off?
Click to expand...
Click to collapse
it depends on the kernel and if they exposed the setting for thermal throttle. i use trinity kernel, and disable thermal throttle after every time i boot up. you can disable it permanently, but can after each time you boot. oh, and trinity kernel disables battery throttle.
simms22 said:
it depends on the kernel and if they exposed the setting for thermal throttle. i use trinity kernel, and disable thermal throttle after every time i boot up. you can disable it permanently, but can after each time you boot. oh, and trinity kernel disables battery throttle.
Click to expand...
Click to collapse
Ah I see, and yeah that's what I like about trinity since the battery throttle is so aggressive in the N4. I would go back to trinity but at the current state of the kernel it's not close to my imagined "Perfect" kernel, although it was before haha. Also I found out that deleted the thermald.conf file and then rebooting was a success, so thanks for replying .
Hello
I am on a quest to find the best governor or kernel for me.
Firstly heres my ''specs'':
I am using I9505, on GE JFLTE-GPE 5.0.1 rom. Right now i have Hulk Kernel, but i have also tried Alucard/Goggy_Max.
I do not care if i have to flash kernels, etc. but i do not wish to change rom
I use my phone for Facebook, Snapchat, Messenger, Chrome, Gmail and loads of music. My music is on my MicroSD (64GB 95MB/s reads). i do NOT game on my phone.
My wish is for the most smooth performance of the above-mentioned, but it is also VERY important for me to have good battery life. Therefore i use Greenify and Amplify. I have limited many alarms/wakelocks, and greenified alot (not Messenger/Snapchat, because it stops notifications)
I do NOT own SetCPU, but i am using STweaks on Hulk Kernel right now.
I have usually used Ondemand governor, but found out yesterday that governors can do alot of difference, so i have shortly tried Badass, and trying SmartassH3 right now. I have been very satisfied with Ondemand governor, but i would be happy if i could get better battery life, with the same performance. For my GPU im trying 'Simple'' governor.
Furthermore ive considered the following governors; DanceDance, Badass, Ondemand, Yankactive, Smartmax, Impulse, SmartassH3 but i am not limiting myself to these, if you have other suggestions.
Thanks in advance
Links to my used Rom/Kernels
Goggy_max : http://forum.xda-developers.com/showthread.php?t=2741181
Hulk_Kernel : http://forum.xda-developers.com/galaxy-s4/i9505-develop/kernel-hulk-kernel-v1-stweaks-based-t3050469
GE Rom : http://forum.xda-developers.com/showthread.php?t=2557353
Alucard Kernel : Included as default in rom.
Here's a thread with explanation on pretty much all CPU governors and I/O schedulers.
Based on what you're saying, Intellidemand should be ok for you. It scales CPU based on the GPU load. So that means if your GPU is not working hard (gaming) your CPU should sit in lower frequencies.
SmartassH3 is more of a conservative governor.
You can even try the conservative governor. It was designed with battery in mind. Meaning that this governor prefers the lower CPU frequency. This also means less smoothness.
Another option is to activate one of the Intelli-Plug profiles from Hulk.
Eco performance is what I would suggest. It will turn your phone into a dual core phone but with some performance tweaks.
You could also try the other profiles and see what works best. But you get more battery savings by turning cores off or disabling them.
GDReaper said:
Here's a thread with explanation on pretty much all CPU governors and I/O schedulers.
Based on what you're saying, Intellidemand should be ok for you. It scales CPU based on the GPU load. So that means if your GPU is not working hard (gaming) your CPU should sit in lower frequencies.
SmartassH3 is more of a conservative governor.
You can even try the conservative governor. It was designed with battery in mind. Meaning that this governor prefers the lower CPU frequency. This also means less smoothness.
Another option is to activate one of the Intelli-Plug profiles from Hulk.
Eco performance is what I would suggest. It will turn your phone into a dual core phone but with some performance tweaks.
You could also try the other profiles and see what works best. But you get more battery savings by turning cores off or disabling them.
Click to expand...
Click to collapse
Hi
I tried the SmartassH3, but it seems it keeps rather high freqs? atleast it made my phone warmer than usual, so i am back to Ondemand until further. I activated the intelliplug and limited the cores to 2, and ive felt no performance loss yet. Which is great, so thanks for that tip
BTW, after ive begun with the governor tweaks, ive noticed my Poweramp decides to turn off when my screen is off? :/ It is not hibernated by Greenify, and Amplify has not limited either, so i do not understand why it stops. If i choose ''use wakelocks'' in Poweramp, it stays active. But this ofc. drains battery very quickly . Do you have any idea, what could be the problem here?
Check with an app to see how many cores you have active. Some said those settings don't work. For me they seem to work. But just to make sure.
When using poweramp the device will be awake anyway.
Governors should not have any effect on apps and how they run, except performance-wise. Governors can't put apps to sleep.
Poweramp requires the media service to run. Make sure you did not block that.
GDReaper said:
Check with an app to see how many cores you have active. Some said those settings don't work. For me they seem to work. But just to make sure
When using poweramp the device will be awake anyway.
Governors should not have any effect on apps and how they run, except performance-wise. Governors can't put apps to sleep.
Poweramp requires the media service to run. Make sure you did not block that.
Click to expand...
Click to collapse
I've already checked with Trickster MOD kernel settings, and verified it works
Ill check up on the media service. Do you know its exact name in Amplify?
amd62 said:
I've already checked with Trickster MOD kernel settings, and verified it works
Ill check up on the media service. Do you know its exact name in Amplify?
Click to expand...
Click to collapse
No, as I don't use Amplify.
after ALOT of tests, i think ive found out what happend. I limited the screen off max freq to 384MHz, and i think this was the problem. I will report back if it is NOT the problem. Else consider it solved
EDIT: Seems it was not. The search continues :I
Hi guys!!
I am running Stock ROM on my GT-I9301, with @sev3n1985 kernel. I have overheating problems! Sometimes it's very hard to hold my phone. How can I solve it? Btw, I'll leave my Kernel Settings down bellow
Regards :*
Settings (I use Kernel Adiutor):
- CPU Max Freq: 1401Mhz
- CPU Min Freq: 300Mhz
- CPU Governor: smartmax
- Multicore Power Saving: Disabled
- CPU Hotplug: MSM Hotplug (MPDecision desactivates)
- CPU Boosted: 1
- Max Cores Screen Off: 1
- Thermal: Temperature Throttle
Sent from my S3 Neo+ (GT-I9301I) running Custom Made StockROM with @sev3n1985 kernel
Have you already done a factory reset?
Perhaps it's just a bad app.
Jhnsn said:
Have you already done a factory reset?
Perhaps it's just a bad app.
Click to expand...
Click to collapse
I use Greenify even on some system apps, so no background apps. And my ROM is deodexed. So I think that's not the problem. But thank you
Sent from my S3 Neo+ (GT-I9301I) running Custom Made StockROM with @sev3n1985 kernel
S3 Neo is familiar with overheating problems even on stock, but I'm trying to understand, do you have that problem even if you are not using your phone that much?
Sometimes hot plug & governors (more tied to the interactive than ondemand) logic simply bricks hot plug & then you have all cores running all the time. Their is also a conflict tied to additional bust frequency logic. All this is actually cased by Samsung & it's never been corrected in this kernel (it is corrected only in official CM12.1 repo). Simple reset resolve this until it happens again.
Regarding Smart max try like this:
Also go with mpdecision hot plug & use simple on demand GPU governor.
It should save some juice keep consumption under control & device cooler.
Zola III said:
Sometimes hot plug & governors (more tied to the interactive than ondemand) logic simply bricks hot plug & then you have all cores running all the time. Their is also a conflict tied to additional bust frequency logic. All this is actually cased by Samsung & it's never been corrected in this kernel (it is corrected only in official CM12.1 repo). Simple reset resolve this until it happens again.
Regarding Smart max try like this:
Also go with mpdecision hot plug & use simple on demand GPU governor.
It should save some juice keep consumption under control & device cooler.
Click to expand...
Click to collapse
Thanks for your time, dude
You can also try like this to keep it more in green line frequency range even more during the light tasks, performance for the light tasks is not stellar but it's more than good enough this way.
Note: Ideal awake frequency (targeted one) for this SoC should actually be 600MHz considering power voltage and DRAM frequency dependencies but on Samsung firmware this is not fast enough so it actually produces contra effects; jumps to higher frequencies more often along with waking up additional cores so 787 is advised minimum. On the other hand peple who love & use Smart max on other light wait roms such as CM's (without of heap load Samsung bull****s) can actually try with 600MHz. Still interactive governor is possible to be tuned better.
Best regards.