PowerMizer only applied when settings GUI running, can't be set on command-line

When attempting to set the PowerMizer performance mode, I noticed it only applies when the nvidia-settings GUI is running. I can verify this when running nvidia-smi, where if I set PowerMizer to “Prefer Maximum Performance” through the GUI, nvidia-smi reports the performance state at P0, and as soon as I close nvidia-settings it goes back down to P8. Attempting to set the PowerMizer setting on the command-line also has no effect:

  • Running nvidia-settings -l has no effect on the power state when ~/.nvidia-settings.rc has [GPU:0]/GPUPowerMizerMode=N set.

  • Attempting to run nvidia-settings -a has no effect. For example, these two commands run in succession:
    $ nvidia-settings -a “[GPU:0]/GPUPowerMizerMode=1”

    Attribute ‘GPUPowerMizerMode’ (htpc:0[gpu:0]) assigned value 1.

    $ nvidia-settings -q “[GPU:0]/GPUPowerMizerMode”

    Attribute ‘GPUPowerMizerMode’ (htpc:0[gpu:0]): 0.
    Valid values for ‘GPUPowerMizerMode’ are: 0, 1 and 2.
    ‘GPUPowerMizerMode’ can use the following target types: GPU.

In all cases, DISPLAY is set correctly to :0.0 in the terminal.

I am running on Arch Linux with XOrg and XFCE, with driver version 59.48.01 on a GeForce RTX 2080.

The main motivation here is to be able to set PowerMizer to Performance while a game is running, such as with a custom command in gamemoderun. I know that nvidia-smi has some options for locking the GPU clock, but unfortunately locking the memory clocks is not available on my GPU. Specifically I want to lock the PCIe gen that’s used - I have had occasional (very infrequent, but annoying) cutouts of HDMI audio, and from what I can tell that is the most likely culprit.

nvidia-bug-report.log.gz (694.6 KB)

This issue was reported to Nvidia during the first 580 beta driver. Like nearly every other reported NVML bug, they ignored it. Don’t have any high hopes that anyone at Nvidia will respond to this thread or fix it.

Given that most of the features nvidia-settings is hard-dependent on X11, the fact that a lot of effort has been put in to improve Wayland support (especially with GNOME and KDE dropping X11 support in the near future), and that it broke with a major version update I suspect this is a victim of some of those efforts to break X11 requirements. From that point of view, fewer and fewer people could use PowerMizer at all given the transition to Wayland, and it doesn’t surprise me that they’d sacrifice it if it stood in the way of some of the other changes and not attempt to restore previous functionality.

Assuming the above speculation is correct, I think there is some hope that it will be fixed at some point in a way that is independent of the display server. However, I expect any such fix would only come in a major version release, and could be some months or even years away.

PowerMizer is available under Windows under a different name, as-is almost everything nvidia-settings provides. X11 was used as an access point. That’s all it ever really was. Fixing it is low hanging intern level work.

Nvidia’s employees repeatadly try to reimplement things in NVML when they could have used code elsewhere. You know, like the broken NVML overclocking API with Maxwell GPUs that they refuse to fix despite having working code elsewhere.