NVIDIA offloading issue on Slowroll with Ideapad 320 and GeForce MX150. Previously configured to auto-offload and power down the GPU when not in use

Hello everyone,

I was using OpenSUSE Tumbleweed, and last year I was able to configure my system to offload tasks to the NVIDIA graphics card, which would turn off when not in use. Here’s my current setup:

I’m using offloading, where I rely on the integrated GPU for regular tasks and switch to the discrete GPU for heavy loads.

Note: From tumbleweed, I switched to Slowroll last week. I noticed this problem just this year with my OpenSUSE tumbleweed, then switched to OpenSUSE Slowroll so that I don’t have to lock/unlock the packages to match kmp and kernel versions.

Laptop: Ideapad 320
GPU: GeForce MX150
OS: OpenSUSE Slowroll

There is no Xorg entry in the nvidia-smi output.
The output of cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status showed that it was suspended.
The output of cat /sys/bus/pci/devices/0000:01:00.0/power/control was set to auto.
However, after several updates, the card no longer powers off or suspends. I did manage to remove the Xorg entry from the nvidia-smi output, but my GPU is still not suspending. I have the same driver and kernel module versions as the kernel, and bbswitch is installed with its kernel module matching the kernel version.

Currently, the output of cat /sys/bus/pci/devices/0000:01:00.0/power/control is still auto, with TLP settings for RUNTIME_PM_ON_AC=auto and RUNTIME_PM_ON_BAT=auto.

I searched online and found that cat /proc/acpi/bbswitch returned “command not found.” I then executed the following commands:

lsmod | grep bbswitch
sudo bash -c ‘echo OFF > /proc/acpi/bbswitch’
cat /proc/acpi/bbswitch

The output of cat /proc/acpi/bbswitch is still “0000:01:00.0 ON.”
The nvidia-powerd logs indicate:

Oct 13 17:09:39 USS-Enterprise systemd[1]: Started nvidia-powerd service.
Oct 13 17:09:39 USS-Enterprise /usr/bin/nvidia-powerd[1245]: nvidia-powerd version:1.0(build 1)
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: SBIOS support not found for NVPCF GET_>
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: No matching GPU found
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: Failed to initialize Dynamic Boost
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: Failed to detach GPU id 256
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: Failed to initialize Dynamic Boost
Oct 13 17:09:57 USS-Enterprise /usr/bin/nvidia-powerd[1245]: Failed to detach GPU id 256
Oct 13 17:09:57 USS-Enterprise systemd[1]: nvidia-powerd.service: Main process exited, code=exited,>
Oct 13 17:09:57 USS-Enterprise systemd[1]: nvidia-powerd.service: Failed with result ‘exit-code’.
Oct 13 17:09:57 USS-Enterprise systemd[1]: nvidia-powerd.service: Consumed 1.443s CPU time.

Upon searching, I found that my MX150 may not be supported. It seems that bbswitch cannot turn the card off and on, but nvidia-powerd can power it on before exiting with an error. I observed that the card is on upon boot when the nvidia-powerd service is enabled, but when the service is disabled, the card remains OFF by default.

Additionally, when the nvidia-powerd service is disabled, the only way to power on the GPU is by running sudo nvidia-smi as root. Using prime-run doesn’t activate the GPU, even when executed with sudo. Running nvidia-smi without sudo results in an error indicating that the driver is not loaded or something similar.

I’ve tried various searches and asked ChatGPT multiple times, but I haven’t found a solution. Does anyone have any insights into what might be going on? I’ve attached the logs for reference.

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

You’re confusing a lot of things. The MX150 is pascal-based so there’s no runtime-pm support for it in the nvidia driver. It will only suspend when either no driver or the nouveau driver is loaded. This doesn’t guarantee any power saving, though.
nvidia-powerd doesn’t have anything to do with power saving, it’s for dynamic boost on ampere and newer notebook chips. Just disable it.
bbswitch can only turn off the nvidia gpu if no driver is loaded.

You said “bbswitch can only turn off the nvidia gpu if no driver is loaded.” Does this mean that I can’t use offload mode like keeping the NVIDIA off while not in use, then will turn on only when needed? I can only use Intel or NVIDIA at once, is my understanding correct?

At least not officially. Here another user had this working with a Pascal gpu but didn’t know either why or how:
https://forums.developer.nvidia.com/t/runtime-d3-support-on-lenovo-legion-5-ryzen-7-4800h-gtx-1660ti/192673/18
Noteworthy is that you seem to have enable coarse grained rtd3 while said user didn’t set it.

How do you know that I successfully enabled coarse-grained RTD3? Is it because the Xorg process isn’t showing up in my nvidia-smi output, or is there another reason? I’m not aware of this myself.

I got the command from the link you posted, and it seems enabled

Update.

Still didn’t work. Maybe it no longer works with the recent update. But I Timeshifted and compare some output from the time it was working V.S. the current:

Before (Working):

lsmod | grep nvidia

nvidia_uvm 2715648 0
nvidia 35598336 4 nvidia_uvm

After (Updated and no longer works - Always active)
lsmod | grep nvidia
nvidia_drm 122880 3
nvidia_modeset 1605632 1 nvidia_drm
nvidia_uvm 6664192 0
nvidia 60600320 2 nvidia_uvm,nvidia_modeset
video 81920 3 ideapad_laptop,i915,nvidia_modeset

That’s the only difference I found on all of my comparisons.

Also, this was the comparison when the GPU is active VS not active the time the Offload was working fine (when GPU was suspended VS being used and activated)
When not active

cat /proc/driver/nvidia/gpus/0000:01:00.0/power

Output:
Runtime D3 status: ?
Video Memory: ?

GPU Hardware Support:
Video Memory Self Refresh: ?
Video Memory Off: ?

Power Limits:
Default: N/A milliwatts
GPU Boost: N/A milliwatts

When active (triggered by glxgears)

cat /proc/driver/nvidia/gpus/0000:01:00.0/power

Runtime D3 status: Enabled (coarse-grained)
Video Memory: Active

Now with my updated OS ang GPU drivers, its always active so it only shows this:

cat /proc/driver/nvidia/gpus/0000:01:00.0/power

Runtime D3 status: Enabled (coarse-grained)
Video Memory: Active

Conclusion: Maybe something was broken on the updated drivers and can’t be fixed by the user side.