Skip to main content

Gaming Optimierungen

System

AMD Ryzen 9 7950X3D, AMD Radeon RX 7900 (Navi 31), 62 GB RAM, NixOS mit linuxPackages_zen. Alle deklarativen Änderungen liegen in /etc/nixos/configuration.nix (Repo nix-config).

Kernel und Scheduler

boot.kernelPackages = pkgs.linuxPackages_zen;

services.scx = {
  enable = true;
  scheduler = "scx_lavd";
};

linux-zen bringt Gaming-orientierte Patches gegenüber dem Standard-Kernel mit. scx_lavd ist ein sched_ext Scheduler, der die asymmetrische Cache-Topologie des 7950X3D (zwei CCDs, eines mit V-Cache) berücksichtigt und Threads entsprechend platziert.

Arbeitsspeicher

zramSwap = {
  enable = true;
  algorithm = "zstd";
  memoryPercent = 50;
};

boot.kernel.sysctl."vm.swappiness" = 120;

zram mit zstd-Kompression verhindert, dass bei RAM-Druck auf die langsamere Festplatte ausgelagert wird. swappiness = 120 (Standard: 60) lässt den Kernel eher ins schnelle zram auslagern statt Page-Cache zu verdrängen.

Storage

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.

GPU

hardware.amdgpu.overdrive = {
  enable = true;
  ppfeaturemask = "0xffffffff";
};

programs.corectrl.enable = true;

programs.gamemode = {
  enable = true;
  settings = {
    gpu = {
      apply_gpu_optimisations = "accept-responsibility";
      gpu_device = 1;
      amd_performance_level = "high";
    };
  };
};

ppfeaturemask entsperrt die Overclocking-/Undervolt-Funktionen der amdgpu, die dann über corectrl (GUI) genutzt werden können. GameMode setzt den Performance-Level automatisch auf high, sobald eine Spielsession läuft (vorher: auto). gpu_device = 1 entspricht /sys/class/drm/card1, der einzigen GPU in diesem System.

Gaming-Tools und Runtime

programs.steam = {
  enable = true;
  remotePlay.openFirewall = true;
  dedicatedServer.openFirewall = true;
};

programs.gamescope = {
  enable = true;
  capSysNice = true;
};

Dazu mangohud in environment.systemPackages für Performance-Overlay/Monitoring, sowie GE-Proton als Compatibility-Tool (GE-Proton11-3 in compatibilitytools.d, manuell über ProtonPlus verwaltet statt über Nix).

Übersicht nach Impact

Änderung Bereich Impact Begründung
scx_lavd Scheduler CPU Hoch Cache-Topologie-bewusstes Scheduling auf dem X3D, wirkt direkt auf Frame-Times
linux-zen Kernel Kernel Mittel Gaming-orientierte Patches, niedrigere Latenz als Standard-Kernel
GameMode GPU-Boost (amd_performance_level=high) GPU Mittel Weniger Stutter/Mikroruckler bei plötzlichen Lastspitzen, kaum Effekt auf Average-FPS
GE-Proton Compatibility Mittel Bessere Spielekompatibilität, teils bessere Performance als Standard-Proton
ppfeaturemask Overclocking-Unlock GPU Mittel (Enabler) Ermöglicht OC/Undervolt über corectrl, ohne eigene Kurven kein direkter Effekt
zram (zstd) Memory Mittel Verhindert Swap-Stalls auf Platte bei RAM-Druck
Gamescope (capSysNice) Display Mittel Compositor-Bypass, Wirkung abhängig davon ob pro Spiel genutzt
corectrl GPU Kein direkter Effekt Reines Steuer-Tool, Wirkung hängt von manuell gesetzten Profilen ab
NVMe I/O-Scheduler none Storage Gering Betrifft nur Ladezeiten/Asset-Streaming, nicht das Rendering
Swappiness 120 Memory Gering Nur bei RAM-Druck relevant, bei 62 GB selten der Fall
MangoHud Monitoring Kein Performance-Effekt Reines Anzeige-/Messwerkzeug
Steam RemotePlay/DedicatedServer Firewall Netzwerk Kein Performance-Effekt Feature-Enabler ohne Performance-Wirkung