Gaming-Performance unter Linux optimieren: CPU-Governor, ZRAM, Vulkan und Wayland

Linux für Gaming tunen: CPU-Governor auf performance, ZRAM konfigurieren, IO-Scheduler anpassen, NVIDIA vs. AMD Vulkan, Wayland vs. X11 für Gaming — messbare Verbesserungen.

12 min Lesezeit

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

War dieser Artikel hilfreich?