superx-goes-arch/docs/egpu-setup.md

5.5 KiB
Raw Permalink Blame History

eGPU Gaming Setup OneXplayer Super X

AMD Radeon RX 9060 XT (Navi 44) über CYID HL7 Thunderbolt 3 Dock an USB4

Hardware-Topologie

[Super X USB4] ──TB3── [CYID HL7 Dock (JHL7440)] ──PCIe 3.0 x4── [RX 9060 XT]
Komponente PCI-ID Adresse
USB4 Root Port 1022:150a 00:01.2
JHL7440 Upstream 8086:15ef 61:00.0
JHL7440 Downstream 8086:15ef 62:01/02/04.0
Navi 10 XL Upstream 1002:1478 63:00.0
Navi 10 XL Downstream 1002:1479 64:00.0
RX 9060 XT 1002:7590 65:00.0
iGPU (Strix Halo) 1002:1586 c4:00.0
  • DRI Nodes: card0 = eGPU, card1 = iGPU
  • VRAM: eGPU 16 GB GDDR6, iGPU 64 GB shared
  • TB3-Link: 40 Gb/s (2 Lanes × 20 Gb/s)
  • PCIe-Tunnel: 2.5 GT/s ×1 am Root Port (physikalisches TB3-Limit), intern 32 GT/s ×16 zur GPU

Quick-Status

# Thunderbolt Auth
boltctl list
cat /sys/bus/thunderbolt/devices/1-2/authorized  # 1 = verbunden

# GPU prüfen
lspci -nn | grep 7590    # RX 9060 XT
ls /dev/dri/card0        # eGPU (card1 = iGPU)

# PCIe Link
cat /sys/bus/pci/devices/0000:65:00.0/current_link_speed
cat /sys/bus/pci/devices/0000:65:00.0/current_link_width

# Treiber
sudo dmesg | grep "amdgpu 0000:65:00.0"

Auto-Connect mit Bolt

Das CYID HL7 Dock ist via boltctl enroll --policy iommu dauerhaft gespeichert. Security-Level user → Bolt authorisiert bekannte Devices automatisch, kein manuelles OK nötig.

# Device neu enrollen (falls Dock getauscht wird)
boltctl list                          # UUID finden
boltctl enroll --policy iommu <uuid>

Installation

1. Modul-Parameter

Datei: /etc/modprobe.d/amdgpu-egpu.conf

options amdgpu ppfeaturemask=0xfff7bfff   # OverDrive / PowerPlay Features
options amdgpu gpu_recovery=1              # GPU Recovery statt Kernel-Panic
options amdgpu runpm=0                     # Runtime-PM aus (eGPU bleibt wach)
options amdgpu dc=1                        # Display Core
options amdgpu sched_policy=1             # Priority-Scheduler (Gaming)
options amdgpu mes=1                       # Micro Engine Scheduler

Nach Änderung: Reboot nötig (amdgpu ist built-in, nicht entladbar).

2. Performance-Script

Datei: /usr/local/bin/superx-egpu-perf.sh

Setzt beim eGPU-Connect:

  • power_dpm_force_performance_levelhigh
  • power/controlon (Runtime-PM deaktiviert)
  • PCIe ASPM → aus
  • power_dpm_stateperformance

3. udev Hotplug-Regel

Datei: /etc/udev/rules.d/99-egpu-superx.rules

Triggert superx-egpu-perf.sh add wenn die RX 9060 XT (1002:7590) am PCI-Bus erscheint.

sudo udevadm control --reload-rules
sudo udevadm trigger

4. Alle Dateien auf einmal

sudo cp configs/amdgpu-egpu.conf /etc/modprobe.d/
sudo cp tools/superx-egpu-perf.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/superx-egpu-perf.sh
sudo cp udev/99-egpu-superx.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
# → Reboot

Gaming eGPU auswählen

Automatisch (empfohlen)

Der Wrapper tools/superx-game-wrapper.sh erkennt live ob die eGPU verbunden ist und setzt die Umgebungsvariablen nur dann. Einmal eintragen, nie wieder anfassen — ohne eGPU läuft alles normal auf der iGPU, mit eGPU automatisch drauf gerendert.

In Steam → Properties → Launch Options für jedes Spiel:

/home/nepharius/SuperX-goes-Arch/tools/superx-game-wrapper.sh %command%

Das Script prüft /dev/dri/card0 und setzt DRI_PRIME=1 + VK_ICD_FILENAMES nur wenn die RX 9060 XT da ist.

Manuell (falls du es direkt willst)

Die eGPU ist DRI_PRIME=1 (weil sie als erstes initialisiert wird = card0).

DRI_PRIME=1 VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json %command%

Oder einzeln:

DRI_PRIME=1 %command%                          # OpenGL
VK_ICD_FILENAMES=… %command%                   # Vulkan explizit

Das musst du aber von Hand rausnehmen wenn die eGPU nicht angesteckt ist — deswegen lieber den Wrapper benutzen.

Manuelle Performance-Steuerung

# DPM-Level (benötigt root)
echo "high"    | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
echo "low"     | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
echo "auto"    | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level

# Power State
echo "performance" | sudo tee /sys/class/drm/card0/device/power_dpm_state

# VRAM
cat /sys/class/drm/card0/device/mem_info_vram_total   # 17095983104 = ~16 GB

Monitoring

# GPU-Auslastung & Takt
watch -n1 cat /sys/class/drm/card0/device/gpu_busy_percent
watch -n1 cat /sys/class/drm/card0/device/pp_dpm_sclk

# Temperaturen
sensors | grep -A5 amdgpu

# PCIe-Bandbreite live
sudo dmesg -w | grep "available PCIe bandwidth"

Pitfalls

Problem Ursache Lösung
DROM CRC32 mismatch im dmesg CYID Dock-Firmware Harmlos, ignorieren
eGPU wird im Idle disconnected Runtime-PM aktiv runpm=0 in modprobe.d
Failed to setup vendor infoframe HDMI/DP am Dock ohne Monitor Harmlos, ignorieren
eGPU nicht in lspci nach Connect Device nicht authorisiert boltctl list prüfen, authorized=1?
System-Freeze bei Hot-Unplug GPU noch in Benutzung Vorher alle GPU-Prozesse beenden

Referenzen