[Feature Request] Make the "GPUCurrentPerfLevel" attribute user-changeable

Hi devs!

I’m a full-time Linux user and I’m extremely happy with the NVIDIA drivers and with how well games run, as well as with the support my fairly dated 560 TI is still getting, so thanks for that!

One thing that’s really annoying though is changing the power levels. If I’m in regular desktop mode, I’d like my power level to be on medium, meaning 405 MHz GPU clock instead of 830 MHz on my card specifically.

To achieve that, I have to disable my compositor, open and then close a video in VLC and wait for a few seconds. The driver will then switch from power state 2 to power state 1. What you can then do is edit the frequencies of power state 2 to be the same as power state 1, so that it stays the same when you use your computer and it automatically switches up again.

That’s extremely tedious and annoying, especially if you have to do it every time you boot or finish playing a game.

Fortunately I found this in the driver documentation (specifically: ‘nvidia-settings -q all’):

Attribute ‘GPUCurrentPerfLevel’ (heavy-pc:0.0): 2.
‘GPUCurrentPerfLevel’ is an integer attribute.
‘GPUCurrentPerfLevel’ is a read-only attribute.
‘GPUCurrentPerfLevel’ can use the following target types: X Screen, GPU.

The switch for changing the current performance level exists of course, but it’s not user-changeable. Long story short, I hoped you could implement an optional function to unlock this value to be user changeable so I could bind it to a shortcut for example. You can already change clock speeds, voltages and fan speeds, I don’t see why you shouldn’t be able to switch power state as well.

Let me know if that’s doable, or if a solution for my problem already exists anywhere in the driver (I couldn’t find anything in the documentation).


Why? You have not explained what’s wrong with “Auto”.

See my old script.

Beware of overheating!

The clock speeds won’t be applied if you lower it while you are in that same power state, you need to wait until it switches to a lower state and then back again for it to be applied.

Does your script circumvent this limitation of the GUI?

The settings which are changed by your script have been deprecated and don’t work anymore:

DEPRECATED: The attribute 'GPUOverclockingState' is no longer supported.
DEPRECATED: The attribute 'GPU3DClockFreqs' is no longer supported.

Personally, my issue with the “Auto” mode is that it constantly leaves the card in a high-power state in a dual-monitor setup with one 144hz monitor. I have to leave the monitor on 120hz or change the resolution manually every time I want 144hz, otherwise the card idles at 46C instead of 35C.

Yep I noticed that too. On Windows there’s a program called “Multi Display Power Saver” that will automatically switch power states depending on applications running, so for example if you start a game, it would go into high performance mode, if you only have your browser open, it’s in medium mode. I’ll probably get started on developing a project like this if they open up the ‘GPUCurrentPerfLevel’ attribute, I’d imagine something like that would be useful to pretty much every NVIDIA user.

Any word from NVIDIA people?

I was looking for the same thing when I stumbled upon this thread.

The nvidia driver on my machine seems to prefer higher performance modes and makes my laptop way too hot. It will be really useful to have a feature to lock a certain performance mode or at least a ‘prefer lower power’ mode.

Please consider adding this feature.

Thank you

This functionality still isn’t available. Any plans to implement it?

My GTX 570 did that with two displays and I don’t care about temperature, but there was ~50 W power draw difference!

Now I got myself a GTX 980 and it briefly goes to full power on situations like enabling second display, but goes back down almost immediately. So maybe they fixed the hardware (clocks driving outputs aren’t tied to base clock), or it’s one of driver features introduced only to market models, who knows!