Zum Inhalt

Hardware & Systemeinstellungen

Die Werte auf dieser Seite sind erarbeitet, nicht geraten. Wer sie entfernt, bekommt kein Fehlerbild, sondern stille Fehlfunktion — deshalb stehen bei jeder Einstellung die Folgen ihres Fehlens.

Maschine

Komponente Details
Modell Corsair AI Workstation 300
SoC AMD Ryzen AI Max+ 395 „Strix Halo", 16 Kerne / 32 Threads
iGPU Radeon 8060S (gfx1151, RDNA 3.5)
NPU XDNA 2 — vorhanden, stillgelegt
Speicher 128 GB Unified Memory @ 8000 MT/s, davon 96 GB GTT für die iGPU
Disks 2× 2 TB NVMe, getrennt, kein RAID
OS Ubuntu 26.04 LTS Server (Kernel 7.0, Mesa 26.0)
Betrieb headless im Rack, SSH mit Public-Key

Kernel 7.0 ist die Schwelle, ab der amdxdna im Kernel enthalten ist — kein DKMS-Modul nötig.

BIOS

Einstellung Wert Warum
UMA Frame Buffer Size Minimum (512 MB) AMD empfiehlt eine kleine feste VRAM-Reservierung und stattdessen ein großes GTT-Limit. Ein großer Frame Buffer nimmt dauerhaft RAM weg, ohne Gegenwert.
IOMMU / SVM aktiviert Die NPU nutzt Shared Virtual Addressing. Ohne IOMMU erscheint /dev/accel nie.
Maximum Memory Data Clock Auto Auto liefert die Nennfrequenz 8000 MT/s. Ein Deckel auf 7500 kostet dauerhaft rund 6 % Token-Generierung — die Speicherbandbreite ist der limitierende Faktor.
Secure Boot aus Falls doch einmal ein DKMS-Modul nötig wird
Frontpanel-Stromprofil Ausbalanciert (~85 W) Thermisch unbegrenzt stabil. „Maximal" (~120 W) wurde nie über 24 h getestet, „Leise" (~55 W) drosselt die GPU.
Performance Level Selector Auto/Standard high nagelt die Taktraten fest und deaktiviert das Thermal Throttling — dokumentierter Absturz bei 89 °C.

Kernel-Parameter

/etc/default/grub:

amd_iommu=on iommu=pt amdgpu.runpm=0 transparent_hugepage=always numa_balancing=disable pcie_aspm.policy=performance
Parameter Wirkung
amd_iommu=on iommu=pt Die NPU braucht IOMMU; pt (Passthrough) hält den Overhead klein
amdgpu.runpm=0 Verhindert Runtime-Power-Management-Pausen zwischen Inferenzaufrufen — sonst kostet jede Anfrage Zusatzlatenz
transparent_hugepage=always Aus AMDs Anforderungsliste für Unified-Memory-APUs; bekämpft Fragmentierung des geteilten Allokators
numa_balancing=disable Ebenfalls aus AMDs Liste
pcie_aspm.policy=performance Keine Link-Power-States auf dem NVMe-Pfad

amd_iommu=off ist verboten

Praktisch jeder Strix-Halo-Performance-Guide im Netz empfiehlt es für ein paar Prozent Speicherbandbreite. Es versteckt die NPU vollständig — lspci findet nichts, /dev/accel erscheint nie, der amdxdna-Treiber verweigert den Dienst. Der Messgewinn liegt bei llama.cpp unter 2 %. Auch eine stillgelegte NPU soll auffindbar bleiben.

Bewusst nicht gesetzt: amdgpu.gttsize (veraltet, wird ignoriert) und der verbreitete sysctl-Block mit vm.compaction_proactiveness=20 — AMDs eigene Doku sagt, dass diese Werte nur auf RHEL nötig und auf Ubuntu bereits Standard sind.

Unified Memory (GTT)

Standardmäßig liegt das GTT-Limit bei rund der Hälfte des Systemspeichers, hier also ~64 GB. Für die geplanten 96 GB muss es angehoben werden.

/etc/modprobe.d/ttm.conf:

options ttm pages_limit=25165824 page_pool_size=25165824

Beide Werte, nicht nur einer

AMDs Werkzeug amd-ttm --set 96 schreibt nur pages_limit. AMD verlangt für Unified-Memory-APUs aber beide Werte — page_pool_size muss von Hand auf denselben Wert ergänzt werden. Danach update-initramfs -u und Neustart.

96 GB und nicht 120: GTT ist eine dynamische Obergrenze, kein reservierter Block. Die verbleibenden ~30 GB gehen an System, Container und Dateisystem-Cache.

Dateisystem

Pfad Gerät Format Besonderheit
/ nvme0n1p3 btrfs, Subvolume @ compress=zstd:1, Snapper aktiv
/home nvme0n1p3 btrfs, Subvolume @home compress=zstd:1
/.snapshots nvme0n1p3 btrfs, Subvolume @snapshots Snapper-Ablage
/boot nvme0n1p2 ext4 GRUBs btrfs-Unterstützung ist begrenzt
/opt nvme1n1p1 btrfs ohne Kompression — GGUF-Dateien sind bereits komprimiert

Snapper läuft mit TIMELINE_CREATE=no: Snapshots entstehen bewusst vor Änderungen, nicht im Stundentakt.

sudo snapper -c root create -d "vor Kernel-Update 7.0.x"
sudo snapper -c root status 5..0
sudo snapper -c root undochange 5..0 /etc/default/grub

/boot liegt außerhalb der Snapshots

Ein Rollback stellt /usr, /etc und /lib/modules wieder her, aber nicht Kernel und initramfs. In der Praxis tragfähig, weil Ubuntu den vorherigen Kernel in /boot behält und er im GRUB-Menü unter Advanced options wählbar ist.

btrfs und Datenbanken

Auf jedes Volume mit SQLite oder Postgres gehört chattr +C, bevor es befüllt wird. Nachträglich ist das Flag wirkungslos. Betrifft hier vor allem Open WebUI.

Der btrfs scrub läuft monatlich über btrfsmaintenance (Ubuntu bringt keine btrfs-scrub@*.timer-Templates mit, die Mountpoints werden zentral in /etc/default/btrfsmaintenance konfiguriert).

Update-Politik

Kernel und linux-firmware sind eingefroren:

apt-mark showhold      # linux-image-generic, linux-headers-generic, linux-firmware

unattended-upgrades zieht ausschließlich Sicherheitsupdates und lässt das Fundament aus (Package-Blacklist: linux-, linux-firmware, rocm), Automatic-Reboot ist aus.

Ablauf für ein bewusstes Kernel-Update:

  1. sudo snapper -c root create -d "vor Kernel X"
  2. apt-mark unholdapt upgradeapt-mark hold
  3. Neustart, danach die komplette Hardware-Verifikation wiederholen
  4. Bei Problemen: Snapshot zurückrollen

Bewusst entfernt: Snaps (Auto-Updates unterlaufen die Einfrier-Politik), Canonical Livepatch (hebelt den gepinnten, hardware-verifizierten Kernel aus) und kdump (reservierte ~2 GB RAM für eine Analyse, die nie stattfände).

ROCm

Kein apt install rocm auf dem Host

AMD führt ROCm 7.1.x für gfx1151 als nicht unterstützt — unterstützt sind 7.2.1+ sowie 7.11/7.12. Genau 7.1 liegt aber im Ubuntu-Archiv. Auf dem Host stehen nur die kleinen Diagnose-Pakete (rocminfo, vulkan-tools); die Runtime kommt ausschließlich aus den Containern.

Verifikation nach jedem Eingriff

# Speicher
sudo dmesg | grep 'GTT memory ready'          # erwartet 98304M
cat /etc/modprobe.d/ttm.conf                  # beide Werte gesetzt?
grep -o 'iommu=[a-z]*' /proc/cmdline          # pt, NICHT off

# GPU
rocminfo | grep -i gfx                        # erwartet gfx1151
vulkaninfo --summary | grep deviceName
grep -H . /sys/class/drm/card*/device/power_dpm_force_performance_level   # auto

# NPU (auch stillgelegt: muss auffindbar bleiben)
lspci -k -d 1022:17f0                         # Kernel driver in use: amdxdna
ls -l /dev/accel/accel0                       # crw-rw-rw-

# Speichertakt
sudo dmidecode -t memory | grep -i speed      # 8000 MT/s, nicht 7500

Die Grafikkarte heißt card1, nicht card0

Und die hwmon-Nummer verschiebt sich zwischen Bootvorgängen. Immer mit Platzhalter arbeiten — auch der GPU-Textfile-Collector sucht die Pfade zur Laufzeit.