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:
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:
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:
sudo snapper -c root create -d "vor Kernel X"apt-mark unhold→apt upgrade→apt-mark hold- Neustart, danach die komplette Hardware-Verifikation wiederholen
- 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.