Skip to main content

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": 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=active mit EPP balance_performance. hardware.amdgpu.overdrive.ppfeaturemask = "0xffffffff": entsperrt Overclocking-Funktionen für corectrl. zramSwap mit zstd-Kompression. programs.gamemode, programs.gamescope, programs.corectrl aktiv. GE-Proton und MangoHud installiert.

    Durchgefü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.

    auslagert,

    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

    derdreiÄnderungenÄnderung istBereich einImpact großerBegründung Hebel, eher Feinschliff:
    • 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: der(amd_performance_level=high) wirksamsteGPU derMittel dreiWeniger Punkte. Kaum mehr durchschnittliche FPS, aber weniger Mikroruckler/Stutter, wenn auto die PowerstateStutter/Mikroruckler bei plötzlichen LastspitzenLastspitzen, zukaum langsamEffekt hochfährt.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 eherabhängig indavon denob 1%-Lows/Frame-Time-Konsistenzpro sichtbarSpiel alsgenutzt im FPS-Average.NVMe-corectrl GPU Kein direkter Effekt Reines Steuer-Tool, Wirkung hängt von manuell gesetzten Profilen ab NVMe I/O-Scheduler none: praktischStorage irrelevantGering für FPS, betrifftBetrifft nur Storage-I/O (Ladezeiten, Shader-/Ladezeiten/Asset-Streaming). MeistStreaming, nicht spürbar.das Rendering Swappiness 120: Memory Gering Nur bei RAM-Druck relevant, bei 62 GB RAMselten der Fall MangoHud Monitoring Kein Performance-Effekt Reines Anzeige-/Messwerkzeug Steam RemotePlay/DedicatedServer Firewall Netzwerk Kein Performance-Effekt Feature-Enabler ohne Memory-PressurePerformance-Wirkung 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