Documents
NVIDIA Open Driver Power Management
NVIDIA Open Driver Power Management
Type
Topic
Status
Published
Created
Apr 19, 2026
Updated
Apr 19, 2026
Created by
Dosu Bot
Updated by
Dosu Bot

NVIDIA Open Driver Power Management#

This article covers power management behavior for the nvidia-open kernel driver on Bluefin laptop systems — specifically suspend/resume reliability, battery drain patterns, SELinux interactions, D3/RTD3 state handling, and the udev rules that control NVIDIA sub-device power. It does not cover driver packaging, Optimus display routing, or container GPU passthrough.

All Bluefin NVIDIA variants use nvidia-open exclusively; the closed driver was deprecated in October 2025.

Default Power Management Configuration#

Bluefin ships no custom modprobe.d configuration for NVIDIA power management parameters. Parameters like NVreg_DynamicPowerManagement and NVreg_EnableGpuFirmware are left at NVIDIA driver defaults — they are not set in ublue-os/bluefin, ublue-os/main, or ublue-os/akmods.

The one active power-related intervention is a udev rules file in ublue-os-nvidia-addons that removes three NVIDIA PCI sub-devices on add:

RulePCI ClassEffect
Remove NVIDIA USB xHCI Host Controller0x0c0330Reduces USB subsystem power draw
Remove NVIDIA USB Type-C UCSI0x0c8000Eliminates idle UCSI overhead
Remove NVIDIA Audio0x040300Drops GPU audio device power

These removals improve idle power consumption on systems where the GPU audio and USB endpoints are not needed. They do not affect rendering or compute performance.

UseKernelSuspendNotifiers#

The NVIDIA 595.45.04 driver introduced UseKernelSuspendNotifiers=1 in the negativo17 packaging, which switches the suspend mechanism from legacy nvidia-sleep.sh scripts to kernel notifier callbacks. This setting was the upstream trigger for the March 2026 regression.

If you need to apply custom NVreg parameters (e.g., NVreg_DynamicPowerManagement=0x02 for fine-grained RTD3 power management), create a file in /etc/modprobe.d/ — changes there persist across OS updates. To bake them into your own image, add the file to your Containerfile.

March 2026 SELinux Suspend Regression#

Build 43.20260312.1 introduced a critical regression that caused complete battery drain on all NVIDIA laptop configurations.

Root cause: SELinux denied systemd-sleep the CAP_PERFMON capability (capability 38) in the systemd_sleep_t context. The NVIDIA 595.45.04 driver's new UseKernelSuspendNotifiers=1 mode requires this capability to complete GPU shutdown hooks. Without it, the suspend sequence aborts mid-flight.

Failure cascade:

  1. systemd-sleep denied perfmon → emits Failed to put system to sleep. System resumed again: Operation not permitted
  2. GPU firmware crashes mid-suspend: Xid 120 / GSP task exception (kern_bus_vbar2.c:346)
  3. GPU enters a corrupted state — nvidia-smi, nvtop, btop hang indefinitely
  4. nvidia-powerd logs ERROR! Failed to get AC Line status (RM Error Code 98) every second
  5. Lid appears closed, system appears suspended — GPU and fans remain fully active
  6. Complete battery drain within hours

SELinux audit entry:

AVC avc: denied { perfmon } for pid=50444 comm="systemd-sleep" capability=38
    scontext=system_u:system_r:systemd_sleep_t:s0 tclass=capability2 permissive=0

Affected versions:

VersionStatus
43.20260303✅ Last known good
43.20260312.1❌ Regression introduced
43.20260317.1 (latest channel)✅ Fixed
43.20260324 (stable channel)✅ Fixed

The upstream fix was a revert of UseKernelSuspendNotifiers — not an SELinux policy patch. The SELinux policy changes are tracked at negativo17/nvidia-driver#196 and require:

allow systemd_sleep_t self:capability2 perfmon;
allow systemd_sleep_t tmp_t:file { open write };

GPU State Corruption After Failed Suspend#

Once the NVIDIA GPU enters a corrupted state after an aborted suspend, there is no software recovery path — a full system reboot is required to perform a hardware-level GPU reset.

Signs of GPU state corruption:

  • nvidia-smi hangs indefinitely (does not return)
  • nvtop and btop freeze on GPU metrics
  • nvidia-powerd logs ERROR! Failed to get AC Line status repeatedly
  • HDMI-connected external displays remain dark
  • Kernel logs show NVRM: _issueRpcLarge: rpcSendMessage failed errors

On Optimus systems, HDMI output (which is physically wired to the dGPU) will also be unavailable until after reboot.

Other Battery Drain Patterns#

Framework 13 — Spurious Wake Events#

Framework 13 NVIDIA Optimus users have reported spurious wake events causing severe drain (~90% → 10% in a few hours in a bag). The workaround is to disable the lid and trackpad as wakeup sources:

sudo tee /etc/systemd/system/lid-wakeup-disable.service << 'EOF'
[Unit]
Description=Disable lid wakeup
After=sysinit.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo "disabled" > /sys/bus/acpi/devices/PNP0C0D:00/power/wakeup'
ExecStart=/bin/sh -c 'echo "disabled" > /sys/bus/i2c/devices/i2c-PIXA3854:00/power/wakeup'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now lid-wakeup-disable.service

This is safe because it leaves the power button as the only wakeup source.

Framework 16 — s2idle Drain#

Framework 16 AMD models are limited to s2idle (suspend-to-idle), not S3 deep sleep — a firmware constraint. NVIDIA dGPU configurations compound idle drain on these systems.

MetricValue
Battery drain in s2idle~1.6%/hour (~20% overnight)
Available sleep states2idle only
Kernel improvement expected6.19+ / 7.0

Verify your available sleep states with: cat /sys/power/mem_sleep

Workarounds & Configuration#

Update or Roll Back#

The fastest fix for any suspend regression is to update to current stable, or roll back to the last known good deployment:

# Roll back to previous deployment
sudo ostree admin set-default 1

# Or use the interactive helper
ujust rebase-helper

Custom SELinux Policy (Temporary)#

For systems stuck on an affected build without an update path:

ausearch -c 'systemd-sleep' --raw | audit2allow -M my-systemdsleep
semodule -X 300 -i my-systemdsleep.pp

Important: semodule policies are not guaranteed to survive OS image updates on bootc-managed systems. For a permanent fix, embed the policy module in your own image definition (e.g., via a custom Containerfile), or wait for the policy fix to land upstream.

Custom NVreg Parameters#

Bluefin images do not set NVreg_DynamicPowerManagement or NVreg_EnableGpuFirmware. To apply them yourself:

# Example: enable fine-grained RTD3 power management
echo "options nvidia NVreg_DynamicPowerManagement=0x02" | \
  sudo tee /etc/modprobe.d/nvidia-pm.conf

Files in /etc/modprobe.d/ persist across OS updates on bootc systems. Rebuild your initramfs if needed: sudo dracut --force.

Diagnostics#

# Check which sleep states the kernel offers
cat /sys/power/mem_sleep

# Watch suspend/resume transitions live
journalctl -f | grep -E 'suspend|resume|PM:|systemd-sleep'

# Look for SELinux denials (key for diagnosing suspend failures)
sudo ausearch -m avc -ts recent | grep -i sleep

# Check current NVIDIA driver version
nvidia-smi

# Verify the GPU is not in a hung state
timeout 5 nvidia-smi && echo "GPU OK" || echo "GPU HUNG — reboot required"

# Check current image version and rollback availability
bootc status

Quick Symptom Reference#

SymptomLikely CauseAction
Complete battery drain during "suspend"SELinux perfmon regression (build 43.20260312.1)Update to 43.20260324+ or roll back
nvidia-smi hangs indefinitelyGPU state corruption from aborted suspendReboot (hard reset required)
Fans spin while lid is closedGPU never powered down during failed suspendSame as above
Spurious wake draining batteryFramework 13 lid/trackpad wakeupDisable wakeup sources (see above)
~20% drain overnight with no activityFramework 16 s2idle firmware constraintExpected; kernel improvements in 6.19+

Key Source Files#

FileRepoRelevance
60-nvidia-extra-devices-pm.rulesublue-os/akmodsRemoves NVIDIA USB/audio sub-devices to reduce idle power
build_files/nvidia-install.shublue-os/mainDriver install; no NVreg parameters set
build_files/base/03-install-kernel-akmods.shublue-os/bluefinKernel args (nvidia-drm.modeset=1, nouveau blacklist)
negativo17/nvidia-driver#196upstreamUseKernelSuspendNotifiers regression and SELinux policy fix
Bluefin issue #4308ublue-os/bluefinFull regression thread with logs, workarounds, and resolution
NVIDIA Open Driver Power Management | Dosu