feat(linux): route mutter to the eGPU and declare the VA-API decode stack - #114
Merged
Conversation
…tack The internal Radeon Pro is deliberately clamped to its lowest DPM state, and as boot_vga it was also mutter's primary GPU, so the whole desktop (and any game launched without DRI_PRIME) rendered at 214 MHz. Tag the RX 580 eGPU mutter-device-preferred-primary so rendering happens on the card running at full clocks; the clamp stays, reduced to scanning out the built-in panel, and detaching the eGPU falls back to today's behaviour. Also declare the VA-API drivers in the media block: mesa-va-drivers (virtual in resolute, provided by the already-installed mesa-libgallium) and intel-media-va-driver (genuinely absent), and record the ssh render-node permission trap that made the decode stack look missing.
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Fixes the two causes of slow video and game performance on the
serverhost (T2 MacBook Pro + RX 580 eGPU), found while diagnosing why the machine underperformed its macOS days. The internal Radeon Pro 560X is deliberately clamped to its lowest DPM state for thermal headroom, but asboot_vgait was also mutter's default primary GPU, so the entire desktop and any game launched withoutDRI_PRIMErendered at 214 MHz. The udev rule file gains a companion rule tagging the RX 580mutter-device-preferred-primary; the clamp stays, reduced to scanning out the built-in panel, and detaching the eGPU falls back to today's behavior. The media package block additionally declares the VA-API decode stack:mesa-va-drivers(virtual in resolute, provided by the already-installedmesa-libgallium, so a documented no-op here that still pulls the provider on a fresh host) andintel-media-va-driver(genuinely absent until now).How to review:
roles/linux/files/udev/30-amdgpu-pm.rules(the new rule and its reasoning),roles/linux/defaults/main.yml(media block),roles/linux/tasks/power.yml(comment, PS-1).GPU /dev/dri/card0 selected primary given udev ruleafter one gdm restart;udevadm verifypasses on the rule file; the 16:00 Ansible run installed the Intel driver and resolved the virtual package cleanly.Audit record
Lens coverage
udevadm verify(Success 1, Fail 0) plus live-host verification; gap recorded as an observationAuto-applicable
Agent-resolvable
Needs sign-off
power.yml's deploy-task comment describes the rule file as clamp-only, but deploying it now also changes which GPU renders the desktopf29999eNeeds human judgment
Declined log
KERNEL=="card*"also matches connector nodes (card0-DP-9), potentially tagging them30-amdgpu-pm.rulesnow carries display-policy contentPending sign-off
f29999egit revert f29999ePass summary
Standalone mode, base
origin/main(fetched). Brief-less by user direction (branch is ad-hoc host work; four spec bundles were Ready so detection was ambiguous), which made the Agent-resolvable bucket unavailable for the pass. Discovery ran inline (declared: 2 files, ~52 changed lines, mostly prose/config — inside the skill's inline threshold). Tooling: yamllint ✓, ansible-lint ✓, syntax-check ✓, gitleaks branch-scope ✓;udevadm verify✓ on the rule file. Full-history gitleaks reports 57 pre-existing findings outside this branch — recorded as an observation, not a branch finding. No reverts, no degraded tooling, no queued forks. Observations committed: gitleaks-history triage gap, udev-rules verification gap.