Gaming Optimierungen
AusgangslageSystem
System: AMD Ryzen 9 7950X3D, AMD Radeon RX 7900 (Navi 31), 62 GB RAM, NixOS mit linuxPackages_zen.
BereitsAlle vor der Analyse gut konfiguriert:
services.scx.scheduler = "scx_lavd"amd_pstate=activebalance_performancehardware.amdgpu.overdrive.ppfeaturemask = "0xffffffff"corectrlzramSwapprograms.gamemodeprograms.gamescopeprograms.corectrlDurchgeführte Änderungen
Alledeklarativen Änderungen liegen in /etc/nixos/configuration.nix (Repo nix-config).
GameMode
Kernel GPU-Boost
und Scheduler
programs.gamemodeboot.kernelPackages = pkgs.linuxPackages_zen;
services.scx = {
enable = true;
settings = {
gpu = {
apply_gpu_optimisationsscheduler = "accept-responsibility";
gpu_device = 1;
amd_performance_level = "high";
};
}scx_lavd";
};
Setztlinux-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 amdgpuKernel Performance-Leveleher automatischins aufschnelle high,zram
sobaldauslagern GameModestatt einePage-Cache Spielsessionzu startet (vorher: auto). gpu_device = 1 entspricht /sys/class/drm/card1, der einzigen
vorhandenen GPU in diesem System.verdrängen.
NVMe I/O-Scheduler
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.
Swappiness
GPU
boot.kernel.sysctl."vm.swappiness"hardware.amdgpu.overdrive = 120;{
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";
};
};
};
Erhöhtppfeaturemask vonentsperrt Standarddie 60Overclocking-/Undervolt-Funktionen der amdgpu, die dann über
corectrl (GUI) genutzt werden können. GameMode setzt den Performance-Level automatisch auf
120,high, damitsobald eine Spielsession läuft (vorher: auto). gpu_device = 1 entspricht
/sys/class/drm/card1, der Kerneleinzigen eherGPU insin schnellediesem zram-SwapSystem.
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 Page-Cacheüber zu verdrängen.Nix).
EinordnungÜbersicht dernach WirkungImpact
Keine
scx_lavdScheduler 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-Boostamd_performance_level=high)
autoppfeaturemask 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 noneDie eigentlich großen Hebel (siehe Ausgangslage oben) waren schon vorher gesetzt.
Noch nicht umgesetzt, aber sinnvoll
corectrlVerifikation 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