Gaming Optimierungen
Ausgangslage
System: AMD Ryzen 9 7950X3D, AMD Radeon RX 7900 (Navi 31), 62 GB RAM, NixOS mit
linuxPackages_zen. Bereits vor der Analyse gut konfiguriert:
services.scx.scheduler = "scx_lavd": sched_ext Scheduler, der speziell für Gaming/interaktive Workloads gebaut ist und die asymmetrische Cache-Topologie des 7950X3D (zwei CCDs, eines mit V-Cache) berücksichtigt.amd_pstate=activemit EPPbalance_performance.hardware.amdgpu.overdrive.ppfeaturemask = "0xffffffff": entsperrt Overclocking-Funktionen fürcorectrl.zramSwapmit zstd-Kompression.programs.gamemode,programs.gamescope,programs.corectrlaktiv.- GE-Proton und MangoHud installiert.
Durchgeführte Änderungen
Alle Änderungen liegen in /etc/nixos/configuration.nix (Repo nix-config).
GameMode GPU-Boost
programs.gamemode = {
enable = true;
settings = {
gpu = {
apply_gpu_optimisations = "accept-responsibility";
gpu_device = 1;
amd_performance_level = "high";
};
};
};
Setzt den amdgpu Performance-Level automatisch auf high, sobald GameMode eine Spielsession
startet (vorher: auto). gpu_device = 1 entspricht /sys/class/drm/card1, der einzigen
vorhandenen GPU in diesem System.
NVMe I/O-Scheduler
services.udev.extraRules = ''
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"
'';
Ersetzt den Standard-Scheduler kyber durch none für alle NVMe-Geräte. NVMe-Queues regeln
Reihenfolge und Latenz selbst besser, als es ein Software-Scheduler könnte.
Swappiness
boot.kernel.sysctl."vm.swappiness" = 120;
Erhöht von Standard 60 auf 120, damit der Kernel eher ins schnelle zram-Swap auslagert, statt Page-Cache zu verdrängen.
Einordnung der Wirkung
Keine der drei Änderungen ist ein großer Hebel, eher Feinschliff:
- GameMode GPU-Boost: der wirksamste der drei Punkte. Kaum mehr durchschnittliche FPS, aber
weniger Mikroruckler/Stutter, wenn
autodie Powerstate bei plötzlichen Lastspitzen zu langsam hochfährt. Wirkung eher in den 1%-Lows/Frame-Time-Konsistenz sichtbar als im FPS-Average. - NVMe-Scheduler
none: praktisch irrelevant für FPS, betrifft nur Storage-I/O (Ladezeiten, Shader-/Asset-Streaming). Meist nicht spürbar. - Swappiness 120: bei 62 GB RAM ohne Memory-Pressure kaum messbarer Effekt, reine Absicherung für Randfälle.
Die eigentlich großen Hebel (siehe Ausgangslage oben) waren schon vorher gesetzt.
Noch nicht umgesetzt, aber sinnvoll
- PBO/Curve-Optimizer-Undervolt über
corectrl: mehr Sustained-Boost-Headroom, weniger Throttling. Potenziell größerer Effekt als alle obigen Punkte zusammen. - RAM-Profil prüfen: EXPO-Profil aktiv? Bei DDR5 auf Ryzen macht das oft mehr Unterschied als Software-Tuning.
- VRR/Freesync und korrekte Refresh-Rate am Monitor sicherstellen, falls noch nicht geschehen.
Verifikation nach nixos-rebuild switch
cat /sys/block/nvme0n1/queue/scheduler # sollte [none] zeigen
cat /proc/sys/vm/swappiness # sollte 120 zeigen
cat /sys/class/drm/card1/device/power_dpm_force_performance_level # "high" während eines Spiels