Power source misreported as "undersized" & performance locked at low level

Hello everyone!

For context: I have a laptop with a GeForce GTX 1660 Ti running Arch Linux that has been working fine for a few years. My laptop’s battery has been broken for about a year, as it immediately goes out when the power is cut. This hasn’t really been a problem since the laptop is basically always plugged in anyways.

However, about a week ago, my laptop refused to turn on or even show any sign of life. After some troubleshooting, I found out that the broken battery was the cause of the problem, so I detached it. After that, the laptop did turn back on, and at first everything seemed to work as well, but I quickly found that anything related to the GPU was now having severe performance issues. Games ran at only a fraction of the framerate they had before, and even a single browser tab with a hardware-accelerated video caused everything else to stutter.

The actual problem: I checked NVIDIA’s settings and found that under the PowerMizer tab, it now says “Power Source: Undersized” even though it’s the same power supply unit I’ve always used. The card has four performance levels, and when the power source is detected as undersized, it seems to be permanently locked to performance level 1.

What I tried:

  • Set “Preferred Mode” to “Prefer Maximum Performance.” While this previously locked the card to the highest performance level, it does nothing now, the card is still at level 1.

  • Deleted all NVIDIA related settings and reconfigured everything from scratch. Again, this did not change anything.

  • I searched online and found this thread: https://forums.linuxmint.com/viewtopic.php?t=129879

    I added Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerDefaultAC=0x1" to my xorg configuration, which in theory should force the highest performance level and the card to behave as if AC was detected. That didn’t work either though, after a reboot NVIDIA Settings shows the power source as AC for a brief moment with the card running at the highest power level, then it switches to “Undersized” and the performance level drops back to 1.

    Other than that, I haven’t found anything relevant online that isn’t a variation of the above attempt.

Is there any way I can force the power source to not be detected as undersized, or for the card to run permanently at the highest level? Or is there any reason why removing a non-functioning battery would somehow cause the card to no longer be able to draw enough power from a connected power supply?

Thanks for any help in advance!

This is rather a function of the system bios. Many notebooks are designed so that the battery is needed to buffer power spikes on heavy gpu use so when it is removed, it will run in a degraded mode to not fry the power adapter.

I booted into a Windows instance as a test, and with that (and the NVIDIA drivers for Windows installed) the card can draw power as expected, is not throttled, and can run permamently at the highest performance level.

If this was a function of the BIOS, then it surely would occur under Windows as well. Instead, it only occurs a few moments after Linux starts, so to me it definitely seems like a problem with the NVIDIA driver on Linux.

There has to be some way to prevent this throttling under Linux.

Please run nvidia-bug-report.sh as root and attach the resulting nvidia-bug-report.log.gz file to your post.

Here’s the report: nvidia-bug-report.log.gz (1.4 MB)

nvidia-smi:

SW Power Cap                      : Active

        Current Power Limit               : 40.00 W
        Requested Power Limit             : 80.00 W
        Default Power Limit               : 80.00 W

This is set by the sbios. You can try to override it using nvidia-smi -pl as root but I doubt it will work.

Trying the command unfortunately just yields:

❯ sudo nvidia-smi -pl 80
Changing power management limit is not supported for GPU: 00000000:01:00.0.
Treating as warning and moving on.
All done.

And yes, I obtained the same information from the NVIDIA settings panel. There it says:

Power Source: Undersized
Power Draw: (varying, but capped at 40 W)
Default TGP: N/A
Max TGP: N/A

However there is a short moment after booting up, where the power cap isn’t active, then it says for a few seconds:

Power Source: AC
Power Draw: (varying, but able to pass 40 W)
Default TGP: 80,00 W
Max TGP: 80,00 W

I also don’t understand why this wouldn’t happen under Windows. The power cap definitely doesn’t activate there, I tested a few different games and monitored the power draw with the NVIDIA overlay, and it had the expected performance and a power draw of 80 W for over an hour.

But thanks for all your help anyway! Since I would rather not go back to Windows permanently, I guess I’ll get a replacement battery, that should fix the problem, correct?

There are certain conditions that the Windows driver handles in a relaxed way while the Linux driver behaves very strict. This obviously seems to be one case of it.