Unable to run an RTX 4060 laptop GPU at more than 80W on Linux

Unable to change power limit with nvidia-smi

NVIDIA Open GPU Kernel Modules Version

565.77

Does this happen with the proprietary driver (of the same version) as well?

Yes

Operating System and Version

Bazzite

Kernel Release

6.12.8-201.bazzite.fc41.x86_64 (64-bit)

Hardware: GPU

NVIDIA Corporation AD107M [GeForce RTX 4060 Max-Q / Mobile] (rev a1)

Describe the bug

Unable to execute:
sudo nvidia-smi --power-limit 140

This is followed by an output:
Changing power management limit is not supported in current scope for GPU: 00000000:01:00.0.
All done.

Changing power limits caused observable changes both in temperature and in performance, I am pretty sure my GPU supports it as its max limit is 140w but it is capped to around 50w.

To Reproduce

~# nvidia-smi --power-limit 140

Bug Incidence

Always

For more context

nvidia-powerd is installed:

~$ systemctl status nvidia-powerd
● nvidia-powerd.service - nvidia-powerd service
     Loaded: loaded (/usr/lib/systemd/system/nvidia-powerd.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf, 50-keep-warm.conf
     Active: active (running) since Mon 2025-01-13 12:46:29 WET; 26min ago
 Invocation: ecb4fb785850481c9405da91c75c86be
   Main PID: 1471 (nvidia-powerd)
      Tasks: 3 (limit: 18303)
     Memory: 856K (peak: 1.1M)
        CPU: 37.928s
     CGroup: /system.slice/nvidia-powerd.service
             └─1471 /usr/bin/nvidia-powerd

Jan 13 12:46:29 bazzite systemd[1]: Started nvidia-powerd.service - nvidia-powerd service.
Jan 13 12:46:29 bazzite /usr/bin/nvidia-powerd[1471]: nvidia-powerd version:1.0(build 1)
Jan 13 12:46:29 bazzite /usr/bin/nvidia-powerd[1471]: Dbus Connection is established

In addition power-profiles-daemon is also installed and is set on performance mode.

Edit 1

I have discovered that even though the power draw is low, while running cs go 2 the performance was good.

Every 1.0s: nvidia-smi                                                        bazzite: Mon Jan 13 23:36:48 2025

Mon Jan 13 23:36:48 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.77                 Driver Version: 565.77         CUDA Version: 12.7     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 ...    Off |   00000000:01:00.0  On |                  N/A |
| N/A   49C    P0             18W /  137W |    7237MiB /   8188MiB |	  2%	  Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

I was able to run at max settings in game with around 150ish fps. The power draw limit is not solved so I am quite confused how my power draw is low and performance is so high, only 5.8% of my cpu is being used at all and the game has an allocated physical memory of 4.3 gib.

On some laptops it’s also required to switch to performance mode in bios. For example on my Dell G15 5510 there are several power profiles in bios. In balanced mode even with nvidia-powerd up and running GPU power goes only up to 85W (max is 90W by design). I need to switch to Ultra performance mode to get 90W.

That perhaps is a solution to laptops that have such an option in the bios, however my bios doesn’t have anything relevant to power profiles/settings.

So it is safe to assume it is handled by the OS and the driver settings in my case.

I had also double checked and confirmed there is no power profiles/settings, however I did find that I can switch to use dgpu instead of igpu but by default it’s already on dgpu.

For further context my bios is called ez flash by asus.

Fixing GPU Undersized Issue – Correcting CPU Power Limits

1️⃣ Preparation: Tools & Basic Knowledge

Before troubleshooting, ensure you have:
Technical knowledge of hardware and manufacturer specifications
Tools like a multimeter to measure voltage and current
Manufacturer data on CPU, GPU, and power supply wattage


2️⃣ Problem: GPU is “Undersized”

This means the GPU is not receiving enough power. Possible causes:
🔹 Incorrect CPU power limits
🔹 Power supply cannot deliver enough wattage
🔹 Misconfigured power settings in Linux


3️⃣ Check Current Power Limits

Run the following commands to check how much power your CPU is allowed to use:

cat /sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw
cat /sys/class/powercap/intel-rapl:0/constraint_1_power_limit_uw
cat /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw

💡 Example (incorrect configuration):

60000000
115000000
215000000

Here, the CPU is allowed to use up to 215W, which is too high.


4️⃣ Check Manufacturer Specifications

For my CPU, the manufacturer specifies:
✔️ Base Power Consumption: 45W
✔️ Maximum Turbo Power Consumption: 115W
✔️ Minimum Guaranteed Power: 35W
💡 My power adapter only provides 100W, which is not enough!


5️⃣ Correct the Power Limits

Let’s set the correct values to ensure system stability.

1️⃣ Create a systemd service file:

sudo nano /etc/systemd/system/set_power_limits.service

2️⃣ Insert the following script:

[Unit]
Description=Set CPU Power Limits
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo 35000000 > /sys/class/powercap/intel-rapl:0/constraint_0_power_limit_uw && echo 35000000 > /sys/class/powercap/intel-rapl:0/constraint_1_power_limit_uw && echo 0 > /sys/class/powercap/intel-rapl:0/constraint_2_power_limit_uw'
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

💾 Save the file:
🔹 Press Ctrl + O (Write the file)
🔹 Press Enter (Confirm)
🔹 Press Ctrl + X (Exit editor)


6️⃣ Apply Changes Automatically After Reboot

Now, enable and start the service to apply the changes at every boot:

sudo systemctl enable set_power_limits.service
sudo systemctl start set_power_limits.service
sudo reboot

Done! The CPU will no longer draw excessive power, and the GPU will receive enough energy. No more Undersized errors! 🎉💪