This repository was archived by the owner on Aug 26, 2026. It is now read-only.
feat(gtx-960m): leave the nvidia driver unloaded so the dGPU stops drawing idle power - #762
Merged
Merged
Conversation
ExtraToast
force-pushed
the
fix/pyroscope-to-frankfurt
branch
from
August 18, 2026 20:35
a8e2bb0 to
0416f6e
Compare
ExtraToast
force-pushed
the
fix/gtx-960m-drop-nvidia
branch
from
August 18, 2026 20:36
84853ad to
9138202
Compare
…awing idle power
The GTX 960M on enschede-gtx-960m-1 had never once powered down. The
driver reported:
Runtime D3 status: Disabled by default
Video Memory Off: Not Supported
and the PCI device confirmed it across the whole boot:
runtime_suspended_time = 0 ms
runtime_active_time = 2552506816 ms (29.5 days)
Runtime D3 requires a Turing or newer GPU, so on Maxwell the driver
never suspends the card no matter what holds it. The GPU sat at P8, 44C,
0% utilisation, 3 MiB of 2048 MiB used and no compute clients, drawing
idle power continuously and keeping the shared heatpipe warm on a
chassis whose CPU already idles at 53-55C.
With no supported way to suspend the card while a driver is bound, the
driver is no longer loaded on this host. The gpu-nvidia profile and the
game-streaming module are dropped from its imports, the nvidia and
nouveau modules are blacklisted, and a udev rule enables PCI runtime PM
on the display controller so the kernel can take the unbound device out
of D0.
Inventory follows: the node's gpus entry and its nvidia and
game-streaming capabilities are gone, host_native no longer lists
game-streaming for it, and jellyfin loses `temporary_gpu_model:
gtx960m` since the 960M can no longer transcode. GPU work belongs on
enschede-t1000-1 (transcode) and enschede-rx7900xtx-1
(render-compute), both of which keep their capabilities.
game-streaming.nix had no remaining importer once this host dropped it —
enschede-rx7900xtx-1 uses the self-contained game-streaming-amd.nix — so
the dead module is deleted. Its wolf app-catalog coverage moves onto the
AMD module, which is the host that actually serves game streaming, and a
new test pins the no-GPU invariant for this host.
ExtraToast
force-pushed
the
fix/gtx-960m-drop-nvidia
branch
from
August 18, 2026 20:38
9138202 to
c793d1c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #763.
Problem
The GTX 960M on
enschede-gtx-960m-1has never powered down once — not in 29.5 days of uptime:Meanwhile the card is doing nothing: P8, 44C, 0% utilisation, 3 MiB of 2048 MiB used, no processes.
Why it cannot be fixed with configuration
The driver states the limit directly:
Per the NVIDIA driver documentation, runtime D3 requires a Turing or newer GPU, and
NVreg_DynamicPowerManagement: 3means fine-grained control on Ampere+ notebooks and disabled everywhere else. This GPU is Maxwell 2.0 (GM107).So the card idles at full power for as long as any driver is bound to it, regardless of which processes hold
/dev/nvidia*. Stopping wolf or the device plugin does not change this — that was the wrong diagnosis. There is no supported way to suspend a Maxwell dGPU under the proprietary driver.Change
The driver is no longer loaded on this host:
profiles/gpu-nvidia.nixandmodules/services/game-streaming.nixdropped from the host imports (the latter forcedboot.kernelModules = [ "nvidia" ... ]).nouveauand the fournvidia*modules blacklisted.Inventory follows: the node's
gpusentry and itsnvidia/game-streamingcapabilities are removed,host_nativeno longer lists game-streaming for it, and jellyfin losestemporary_gpu_model: gtx960m.GPU work stays on
enschede-t1000-1(transcode) andenschede-rx7900xtx-1(render-compute), which keep their capabilities.nvidia-device-pluginanddcgm-exporterselect oncapability-nvidia, so both simply stop scheduling here and continue on t1000.Dead code
Once this host stopped importing it,
game-streaming.nixhad no importer at all —enschede-rx7900xtx-1uses the self-containedgame-streaming-amd.nix. The module is deleted. Its wolf app-catalog assertions move onto the AMD module, which is the host that actually serves game streaming, and a new test pins the no-GPU invariant for this host.Consequence that needs a follow-up decision
wolfmanagerselectspersonal-stack/capability-game-streaming. After this change onlyenschede-rx7900xtx-1carries that label, and that node has beenNotReadyfor 90 days — sowolfmanagerwill be unschedulable and thewolfpublic host will not serve until the AMD node is back. Options are to bring that node up or retire thewolfingress; retiring a public service is out of scope here.Validation
cd platform/tests && node --test— 58/58 pass (the gtx test is split into three: the no-GPU invariant, the AMD game-streaming host, and continued gpu-nvidia coverage for t1000).kubectl kustomize platform/cluster/flux/clusters/productionbuilds.nix flake checkwas not run locally — nix is not installed on this workstation. Platform Validate runs it in CI and must be green before merge.runtime_suspended_timeon the host.