Overclocking and Undervolting support parity with Windows (Voltage-Frequency "Curve", Wayland support)

If nvidia could simply give a method / API to

  • view frequency target for each voltage
  • set frequency target for each voltage
  • set memory clock (specifically under wayland, can do on X11 fine)
  • do this under X11 and Wayland

We could easily have everything solved.

Undervolting? Done. Users can easily make a script with an array of frequencies (which you could create yourself, or just grab from MSI Afterburner on windows) to set at each voltage.

Overclocking? Easy. Just loop through each voltage, view its frequency target, and apply that target with a user supplied offset

AMD already has this solved. Now its your turn. We need nvidia to be viable under Linux, however with these clear missing features, its hard to justify purchasing a new nvidia GPU.

You guys have done a really good job on Explicit Sync and the drivers as a whole for the past year or two. There’s only very little left to make Nvidia a recommendable option under Linux. However these little things which are left are some of the biggest bugs / issues / missing features.

I hope we can see this solved somewhat soon. I commend the Nvidia team for making such power efficient cards as of late, however we need granular control parity like we have on windows with software like MSI Afterburner.

P.S. we DO NOT need MSI Afterburner on linux. We just need the same ability to edit the voltage-frequency curve, and Nvidia has the power to supply this. As users we can easily create scripts and tools and implement them into already working software like GreenWithEnvy.

1 Like

I fully agree with everything,

The lack of support for undervolting is a deal breaker for me.
My RTX3090 has a default TDP of 420w, with undervolting and underclocking, My custom settings enabled by default with afterburner bring it to 235w of power consumption while tackling IA workload.
I really wish I could do the same thing on linux, it’s really the root cause for not using my dual boot for this task.

Please bring the support of the frequency/voltage setting to linux, let us enable a Greener IT for our green team GPUs.

1 Like

If you’re looking for a simple undervolt, have a look at the script I provided here: Undervolting support · NVIDIA/open-gpu-kernel-modules · Discussion #236 · GitHub

This provides very basic and crude “undervolting” support. It does this by limiting clocks to whatever you’d like, and then applying a clock offset. This is basically like moving the entire curve in afterburner to the side. I have been using this for a little bit with good results, however am unable to get it as efficient as I could on windows. While on windows I can easily game at 1830Mhz at 831Mv (RTX 3070), on linux, my maximum undervolt is 1830Mhz at 850Mv, which is still amazing compared to stock.

To use the script, I recommend making a python virtual env, installing nvidia-ml-py from pip, and making a systemd service to run your script on startup.

Considering your AI workload, this may be a relatively sufficient option for you.

Other tips:

I got these values like so:
GPU lock clock is whatever you had in afterburner
For clock offset, I viewed the voltage with the command below and upped the clock offset by 15Mhz each time. You will notice every 15Mhz bump to clock offset, the voltage will also go down one bin. This is like the point on the afterburner VF curve where it flattens.

watch -t -n 1 "nvidia-smi -q -d VOLTAGE | grep Graphics" to view voltage.

Let me know if you need any more help!!! (P.S, this is display server agnostic, works on X11, Wayland, or without one entirely.)