Gaming-Performance unter Linux optimieren: CPU-Governor, ZRAM, Vulkan und Wayland
Linux bietet mehr Gaming-Performance-Tuning-Möglichkeiten als Windows — wenn du weißt, wo du ansetzen musst. CPU-Governor auf performance, ZRAM statt Swap-Partition, IO-Scheduler auf none bei SSDs, Wayland mit Explicit Sync für NVIDIA, AMD Mesa ACO-Compiler — jede Einstellung allein bringt wenig, zusammen machen sie den Unterschied zwischen 80 und 110 FPS.
CPU-Governor: Performance statt Energiesparen
Der CPU-Governor bestimmt, wie aggressiv die CPU ihre Frequenz erhöht. Standard ist schedutil oder powersave — für Gaming brauchen wir performance.
Aktuellen Governor prüfen
# Alle CPU-Kerne:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# powersave
# powersave
# ...
# Verfügbare Governors:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# performance powersave schedutil ondemand conservative
# Aktuelle CPU-Frequenz:
watch -n 1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq | awk '{sum+=\$1; count++} END {printf \"Avg: %.0f MHz\n\", sum/count/1000}'"
Performance-Governor setzen
# Sofort (temporär, bis Neustart):
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# Via cpupower (dauerhaft, persistenter):
sudo apt install linux-tools-common linux-tools-generic # Ubuntu
sudo pacman -S cpupower # Arch
sudo dnf install kernel-tools # Fedora
sudo cpupower frequency-set -g performance
# Dauerhaft via systemd-Service:
sudo systemctl enable cpupower.service # Arch
# Ubuntu: via /etc/default/cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl enable cpufrequtils
AMD Ryzen: Processor Boost
# AMD Boost (Boost Clocks bis 5+ GHz) aktiv?
cat /sys/devices/system/cpu/cpufreq/boost
# 1 = aktiv (sollte 1 sein)
# Falls deaktiviert:
echo 1 | sudo tee /sys/devices/system/cpu/cpufreq/boost
# AMD P-State (Ryzen 5000+):
cat /sys/devices/system/cpu/amd_pstate/status
# active | guided | passive | disable
# Für Gaming: guided oder active (nutzt AMD-Energiekurven):
echo active | sudo tee /sys/devices/system/cpu/amd_pstate/status
Intel: Turbo Boost
# Turbo Boost aktiv?
cat /sys/devices/system/cpu/intel_pstate/no_turbo
# 0 = Turbo aktiv (gut)
# 1 = Turbo deaktiviert
# Falls deaktiviert:
echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
# Intel P-State Maximum-Performance:
cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
# 100 (sollte 100 sein)
echo 100 | sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct
ZRAM: Schneller Swap im RAM
ZRAM erstellt einen komprimierten RAM-Bereich als Swap — statt auf langsamer Disk zu swappen, werden Daten im RAM komprimiert. Für Gaming bedeutet das: weniger Stutter wenn RAM-Limit erreicht wird.
ZRAM einrichten
# Ubuntu 24.04: ZRAM ist bereits aktiviert (zram-config)
systemctl status zram-config 2>/dev/null || systemctl status systemd-zram-setup@zram0
# ZRAM-Status prüfen:
zramctl
# NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
# /dev/zram0 lz4 8G 0B 0B 0B 8 [SWAP]
# Aktuelle Swap-Nutzung:
free -h
swapon --show
ZRAM optimieren
# Arch / CachyOS: zram-generator konfigurieren:
sudo nano /etc/systemd/zram-generator.conf
# /etc/systemd/zram-generator.conf
[zram0]
# ZRAM-Größe: 50% des physischen RAMs (oder mehr bei wenig RAM)
zram-size = ram / 2
# Kompressionsalgorithmus:
# zstd: beste Kompression (empfohlen für > 4 Kerne)
# lz4: schnellste Dekompression (empfohlen für < 4 Kerne)
# lzo-rle: gute Balance
compression-algorithm = zstd
# Swap-Priorität (höher = bevorzugter):
swap-priority = 100
# Filesystem für /tmp in ZRAM (optional, verhindert SSD-Verschleiß):
# fs-type = ext4
# mount-point = /tmp
# Service neu starten:
sudo systemctl daemon-reload
sudo systemctl restart systemd-zram-setup@zram0.service
# Ubuntu mit zram-tools:
sudo apt install zram-tools
sudo nano /etc/default/zramswap
# /etc/default/zramswap (Ubuntu):
ALGO=zstd
PERCENT=50 # 50% des RAMs als ZRAM
PRIORITY=100
sudo systemctl restart zramswap
zramctl # Status prüfen
vm.swappiness für Gaming
# Standard swappiness = 60 (tauscht zu aggressiv aus)
# Für Gaming: 10 (erst bei echtem RAM-Mangel swappen)
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-gaming-zram.conf
# Mit ZRAM: swappiness kann höher sein (ZRAM ist schnell):
# Mit ZRAM: 100 ist OK, da RAM → RAM Kompression
echo 'vm.swappiness=100' | sudo tee /etc/sysctl.d/99-gaming-zram.conf
sudo sysctl --system
IO-Scheduler für SSDs
Der IO-Scheduler bestimmt, wie Lese-/Schreibzugriffe auf Speichermedien gereiht werden. Für NVMe-SSDs brauchen wir keinen Scheduler — für SATA-SSDs und HDDs gibt es bessere Optionen als der Standard.
# Aktuellen Scheduler anzeigen:
cat /sys/block/nvme0n1/queue/scheduler # NVMe
cat /sys/block/sda/queue/scheduler # SATA
# Ausgabe: [none] mq-deadline kyber bfq
# [eckige Klammern] = aktiver Scheduler
# Optimale Einstellungen:
# NVMe SSD: none (kein Scheduler — Hardware macht das selbst)
# SATA SSD: mq-deadline oder none
# HDD: bfq (Beat Fairness Queuing — beste Reaktivität)
IO-Scheduler dauerhaft setzen
# Via udev-Regel:
sudo nano /etc/udev/rules.d/60-io-schedulers.conf
# NVMe: none
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"
# SATA SSD: mq-deadline
ACTION=="add|change", KERNEL=="sd[a-z]|xvd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# HDD: bfq
ACTION=="add|change", KERNEL=="sd[a-z]|xvd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"
sudo udevadm control --reload-rules
sudo udevadm trigger
# Prüfen:
cat /sys/block/nvme0n1/queue/scheduler
# [none] mq-deadline kyber bfq
Huge Pages und Transparent Huge Pages
Huge Pages (2MB statt 4KB Standard-Seiten) reduzieren TLB-Misses und verbessern die Speicher-Performance.
Transparent Huge Pages (THP)
# Aktueller THP-Modus:
cat /sys/kernel/mm/transparent_hugepage/enabled
# always [madvise] never
# Für Gaming: "always" (mehr Huge Pages nutzen):
echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# CachyOS Standard: "madvise" (nur wenn Prozess es anfordert)
# DXVK profitiert von Huge Pages:
echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
Statische Huge Pages (für VRAM-Mapping)
# Nur nötig bei NVIDIA mit speziellen Setups:
# Standard: THP = always ist ausreichend
# Huge Pages für DXVK:
cat /proc/meminfo | grep Huge
# HugePages_Total: 0 ← Standard
# Hugepagesize: 2048 kB
# Für 16 GB RAM: 128 Huge Pages = 256 MB reserviert
echo 'vm.nr_hugepages=128' | sudo tee -a /etc/sysctl.d/99-gaming.conf
sudo sysctl --system
NVIDIA: Vulkan und Wayland optimieren
NVIDIA Vulkan Performance-Flags
# /etc/environment für NVIDIA-Gaming:
sudo nano /etc/environment
# Bessere Performance auf NVIDIA unter Wayland:
GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia
# Hardware-Videodekodierung:
LIBVA_DRIVER_NAME=nvidia
# NVIDIA Thread-Optimierungen (OpenGL):
__GL_THREADED_OPTIMIZATIONS=1
# Vulkan ICD (falls mehrere GPUs/Treiber):
# VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
NVIDIA Kernel-Parameter für Gaming
# /etc/modprobe.d/nvidia-gaming.conf:
sudo nano /etc/modprobe.d/nvidia-gaming.conf
# DRM Kernel Mode Setting (KMS) — Pflicht für Wayland:
options nvidia_drm modeset=1
# Video Memory Preservation (kein Dump bei Suspend):
options nvidia NVreg_PreserveVideoMemoryAllocations=1
# GSP Firmware (bei Turing+):
options nvidia NVreg_EnableGpuFirmware=1
# Temporäre Dateien (verhindert /tmp vollzuschreiben):
options nvidia NVreg_TemporaryFilePath=/var/tmp
sudo mkinitcpio -P # Arch
sudo update-initramfs -u # Ubuntu
sudo reboot
NVIDIA VSync und Tearing
# Tearing unter X11 beheben (NVIDIA):
# /etc/X11/xorg.conf.d/20-nvidia.conf:
sudo mkdir -p /etc/X11/xorg.conf.d
sudo nano /etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
Identifier "NVIDIA Card"
Driver "nvidia"
Option "TripleBuffer" "True"
Option "AllowIndirectGLXProtocol" "off"
EndSection
# Unter Wayland: Explicit Sync (NVIDIA ≥ 555) löst Tearing
# Kein weiteres Setup nötig — automatisch mit kompatiblem Compositor
AMD: Mesa ACO und Radeon Performance
Mesa ACO-Compiler (Standard seit Mesa 20.2)
# ACO-Compiler-Status prüfen (sollte Standard sein):
RADV_PERFTEST=nggc glxinfo 2>&1 | grep -i "renderer"
# ACO explizit erzwingen (falls Mesa alt):
ACO_DEBUG=quiet %command%
# Mesa-Version prüfen:
glxinfo | grep "OpenGL version"
# OpenGL version string: 4.6 (Compatibility Profile) Mesa 24.x.x
# Vulkan (RADV) Version:
vulkaninfo --summary 2>/dev/null | grep -E "driverVersion|apiVersion" | head -4
AMD Freesync / VRR
# Freesync unter Wayland (KDE):
# Einstellungen → Anzeige und Monitor → Adaptiver Sync → Aktivieren
# Freesync unter X11 prüfen:
xrandr --props | grep "freesync\|VRR\|FREESYNC" -A 2
# In /etc/X11/xorg.conf.d/:
sudo nano /etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Device"
Identifier "AMD Radeon"
Driver "amdgpu"
Option "TearFree" "true"
Option "VariableRefresh" "true"
EndSection
AMD Overclocking (für Fortgeschrittene)
# AMD GPU Overdrive (via sysfs):
# ACHTUNG: Auf eigene Gefahr — falsche Werte können GPU beschädigen
# GPU-Frequenz prüfen:
cat /sys/class/drm/card0/device/pp_dpm_sclk
# 0: 500Mhz *
# 1: 1000Mhz
# 2: 1700Mhz
# Maximum-Performance-Level erzwingen:
echo "high" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
# Zurück auf Auto:
echo "auto" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level
Wayland vs. X11 für Gaming 2026
Wayland 2026: Die neue Empfehlung
| Aspekt | Wayland | X11 |
|---|---|---|
| Tearing | ✅ Kein Tearing (Compositor) | ❌ TearFree nötig |
| NVIDIA | ✅ Gut (Treiber ≥ 555) | ✅ Stabil |
| VRR/FreeSync | ✅ Nativ unterstützt | ⚠️ Treiber-abhängig |
| Latenz | ✅ Vergleichbar (mit Explicit Sync) | ✅ Gut |
| Screenshot/Capture | ⚠️ xdg-desktop-portal nötig | ✅ Einfach |
| Wine/Proton | ✅ XWayland funktioniert | ✅ Direkt |
| HDR | ✅ KDE Plasma 6 HDR-Support | ❌ Keine native Unterstützung |
Empfehlung 2026:
- AMD GPU: Wayland (nativ, kein proprietärer Treiber)
- NVIDIA GPU mit Treiber ≥ 555: Wayland (Explicit Sync löst frühere Probleme)
- NVIDIA GPU mit Treiber < 555: X11 (bis Treiber-Update)
Wayland für Gaming optimieren
# KDE Plasma: Kompositing für Spiele deaktivieren (Alt+Shift+F12):
# Oder über KWin-Script automatisch bei Vollbild-Spielen deaktivieren
# KWIN: Latenz-Optimierungen:
# Einstellungen → Anzeige und Monitor → Compositor
# Rendering-Backend: OpenGL 3.1
# Tearing-Prävention: Nie (für niedrigste Latenz)
# Latenz: Keine (VSync aus)
# GNOME: Framerate-Limit auf Monitorrate setzen:
gsettings set org.gnome.mutter experimental-features "['variable-refresh-rate']"
XWayland für Proton
Proton/Wine-Spiele laufen unter Wayland über XWayland (X11-Kompatibilitätsschicht):
# XWayland-Status prüfen:
xlsclients -display :0 2>/dev/null | head -5
# Zeigt alle XWayland-Clients
# Performance-Tipp: Nur bei Problemen XWayland-Session nutzen:
SDL_VIDEODRIVER=x11 %command% # Spiel explizit zu X11 zwingen
# NVIDIA XWayland:
# Explicit Sync Patch ab NVIDIA 555 + Compositor mit Explicit-Sync-Support
# KDE Plasma 6.1+ und GNOME 46+ unterstützen Explicit Sync
GameMode: Automatisches System-Tuning
# GameMode installieren:
sudo apt install gamemode # Ubuntu
sudo pacman -S gamemode # Arch
sudo dnf install gamemode # Fedora
# GameMode-Konfiguration:
nano ~/.config/gamemode.ini
[general]
reaper_freq=5000
desired_governor=performance
default_governor=schedutil
[cpu]
governor=performance
park_cores=no
[gpu]
apply_gpu_optimisations=accept-responsibility
gpu_device=0
# AMD:
amd_performance_level=high
# NVIDIA (auskommentieren wenn NVIDIA):
# nv_powermizer_mode=1
[io]
ionice=0
[inhibit]
inhibit_screensaver=1
[custom]
# Benutzerdefinierte Scripts (Start/Stop):
start=notify-send "GameMode" "Gaming-Modus aktiv"
end=notify-send "GameMode" "Gaming-Modus beendet"
# GameMode-Status:
gamemoded -s
# Mit Steam nutzen:
# Startoptionen: gamemoderun %command%
# Status während Spiel:
gamemoded -l # Aktive Clients anzeigen
Alle Optimierungen dauerhaft setzen
Gaming-Optimierungs-Script
#!/bin/bash
# /usr/local/bin/gaming-mode.sh
# Aufruf: sudo gaming-mode.sh start|stop
set -euo pipefail
start_gaming() {
echo "=== Gaming Mode: START ==="
# CPU: Performance-Governor
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo "✓ CPU-Governor: performance"
# AMD Boost aktivieren:
[ -f /sys/devices/system/cpu/cpufreq/boost ] && \
echo 1 > /sys/devices/system/cpu/cpufreq/boost && \
echo "✓ AMD Boost: aktiv"
# Huge Pages:
echo always > /sys/kernel/mm/transparent_hugepage/enabled
echo "✓ Transparent Huge Pages: always"
# IO-Scheduler NVMe:
for dev in /sys/block/nvme*/queue/scheduler; do
echo none > "$dev" 2>/dev/null && echo "✓ IO-Scheduler NVMe: none"
done
# AMD GPU Performance:
for card in /sys/class/drm/card*/device/power_dpm_force_performance_level; do
echo high > "$card" 2>/dev/null && echo "✓ AMD GPU: high performance"
done
echo "=== Gaming Mode aktiv ==="
}
stop_gaming() {
echo "=== Gaming Mode: STOP ==="
echo schedutil | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
for card in /sys/class/drm/card*/device/power_dpm_force_performance_level; do
echo auto > "$card" 2>/dev/null
done
echo "=== Normal Mode aktiv ==="
}
case "${1:-start}" in
start) start_gaming ;;
stop) stop_gaming ;;
*) echo "Usage: $0 start|stop" ;;
esac
sudo chmod +x /usr/local/bin/gaming-mode.sh
sudo gaming-mode.sh start # Vor dem Spielen
sudo gaming-mode.sh stop # Nach dem Spielen
Dauerhafte sysctl-Einstellungen
sudo nano /etc/sysctl.d/99-gaming-performance.conf
# /etc/sysctl.d/99-gaming-performance.conf
# VM: Weniger aggressives Swapping
vm.swappiness=10
# Dirty Pages: Mehr Daten im RAM puffern
vm.dirty_ratio=15
vm.dirty_background_ratio=5
# Huge Pages:
vm.nr_hugepages=256
# Inotify für Spiele-Assets:
fs.inotify.max_user_watches=524288
# Netzwerk (für Multiplayer):
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_congestion_control=bbr
sudo sysctl --system
Benchmarking: Vorher/Nachher messen
FPS-Benchmark mit MangoHud
# Benchmark-Log erstellen:
# 1. MangoHud aktivieren: mangohud %command%
# 2. Im Spiel: Rechts-Shift+F11 = Aufzeichnung starten
# 3. Benchmark-Sequenz spielen (selbe Szene vor/nach Optimierung)
# 4. Rechts-Shift+F11 = Aufzeichnung stoppen
# Log analysieren:
python3 -c "
import csv, sys
with open(sorted(__import__('glob').glob(r'~/MangoHud/*.csv'), reverse=True)[0].replace('~', __import__('os').path.expanduser('~'))) as f:
data = [float(r[0]) for r in csv.reader(f) if len(r) > 0 and r[0].replace('.','').isdigit()]
print(f'Avg FPS: {sum(data)/len(data):.1f}')
data.sort()
print(f'1% Low: {data[int(len(data)*0.01)]:.1f}')
print(f'Min: {data[0]:.1f} | Max: {data[-1]:.1f}')
"
CPU-Frequenz-Benchmark
# Stress-Test + Frequenz messen:
sudo apt install stress-ng # Ubuntu
sudo pacman -S stress-ng # Arch
# Performance-Governor:
echo performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
stress-ng --cpu 1 --timeout 5 &
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
# Powersave-Governor:
echo powersave | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
stress-ng --cpu 1 --timeout 5 &
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
# → Unterschied oft 1000–2000 MHz!
Vulkan-GPU-Benchmark
# Basemark GPU (kostenlos):
# https://benchmark.basemark.com/
# glmark2:
sudo apt install glmark2 # Ubuntu
sudo pacman -S glmark2 # Arch
glmark2
# Unigine Superposition (Proton):
# Im Steam als Free-to-Play verfügbar
Fazit: Die wichtigsten Optimierungen kurz zusammengefasst
| Optimierung | Aufwand | Performance-Gewinn |
|---|---|---|
| CPU-Governor performance | Sehr niedrig | +5–15% FPS in CPU-limitierten Spielen |
| GameMode aktivieren | Sehr niedrig | +3–8% FPS, weniger Stutter |
| ZRAM statt Swap | Niedrig | Weniger Stutter bei RAM-Druck |
| IO-Scheduler (NVMe: none) | Niedrig | -5–10ms Lade-Latenz |
| Shader-Cache aufwärmen | Kein Aufwand | Deutlich weniger Stutter |
| Wayland + Explicit Sync | Niedrig | Kein Tearing, VRR |
| BORE/scx_lavd (CachyOS) | Mittel | +5–20% Responsivität |
| THP auf always | Sehr niedrig | +2–5% Speicher-Performance |