Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Dynamic undervolt based on frequency #133

Open
UnicodeMan opened this issue Dec 3, 2020 · 2 comments
Open

[Feature] Dynamic undervolt based on frequency #133

UnicodeMan opened this issue Dec 3, 2020 · 2 comments

Comments

@UnicodeMan
Copy link

Hi. I have this idea.
I have noticed that my Intel CPU (core+cache) can tolerate quite a huge undervolt (~-150mV), but only on a high frequency. Lets say, I start a CPU miner, then I undervolt my CPU. Miner runs well for any amount of time, but when I close it and CPU frequency dips, system freezes.
I confirmed this by increasing minimum frequency to a higher value. I've seen similar stories in a few forums, too.

So in theory, there could be some kind of undervolting curve instead of a static undervolt value that is applied for all and any frequency, resulting in greater undervolt when it matters the most - at high load.
In practice this may seem daunting as the drivers in the Linux kernel as well as the hardware itself are responsible for CPU frequency changes, not this tool.

I am not sure how implementation would come about (if it is at all possible), or if simplier workarounds would have to suffice (changing min frequency when game/something-that-eats-cpu starts, then undervolting, reverting both on game/something-that-eats-cpu exit)...

Is this something you would consider, or maybe thought about it already?

@georgewhewell
Copy link
Owner

It's an interesting idea for sure.. as you say, we need to supply some curve instead of fixed offset but Intel CPU don't seem to expose this functionality, i think. Possibly it could be implemented as kernel module to change offset when frequency changes, but i think at a minimum it would require disabling intel_pstate HWP- i understand this feature gives performance/power improvements itself, so setting frequency manually with increased undervolt may not even perform better. i think implementing in userspace (this tool) is pretty much impossible.. i checked and can replicate your result (can undervolt greater amounts under load), but cpu crashes as soon as load is removed, no time to increase voltage again

@UnicodeMan
Copy link
Author

UnicodeMan commented Dec 11, 2020

It may be quite a trivial fix from Intels' side (firmware+driver update), so quite possibly enthusiasts may have to nag Intel. Unless they manage voltages linearly (in some unchangeable hardware level), with initial min-max values. I mean their, "autonomous" mode (probably ME or ME + something). I may have misspoken here (somewhat ignorant, as I have never read Intel documentation, so I am "assuming" how the voltage/frequency control is handled in accelerated way)

Recently I have stumbled upon a less promising test result.
Could you try reproducing this scenario: set minimum frequency of your device same as maximum, launch CPU-intense application, undervolt, run for a while, then kill the application.
My laptop, dunno why, still hangs after removing load even though the frequency shouldn't dip.
If that scenario is reproduceable, I am not sure this improvement should be pursued. It may be useful to test this on a larger sample size and variety (different architectures, form-factors, etc).

I kinda anticipated userspace implementation with everything as-is would not be plausible, so no surprise there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants