Systemtuning für X-Plane
Work in Progress
Die Parameter für das Kernel-Tuning sind aktuell noch in der Überprüfung und funktionieren möglicherweise nicht alle wie beschrieben. Änderungen vorbehalten.
Distributionen und ihre Zielausrichtung
Linux-Distributionen unterscheiden sich nicht nur in Paketmanager und Desktop-Umgebung, sondern vor allem in der Abstimmung zwischen Kernel und Systemsoftware. Jede Distribution trifft Konfigurationsentscheidungen für einen bestimmten Einsatzzweck:
- Allzweck-Distributionen (Debian, Ubuntu, Fedora) — optimieren auf Stabilität und breite Hardwarekompatibilität. Der Kernel ist konservativ konfiguriert, Energiesparen hat hohe Priorität.
- Gaming-/Multimedia-Distributionen (Nobara, Pop!_OS) — liefern bereits angepasste Kernel-Parameter, Scheduler-Einstellungen und Treiber-Konfigurationen für niedrige Latenz.
- Audioproduktion (Ubuntu Studio, AV Linux) — setzen auf Realtime-Kernel und priorisieren Audio-Pipelines.
- Server-Distributionen (Debian Server, Rocky Linux) — maximieren Durchsatz und Stabilität unter Dauerlast.
Das Zusammenspiel aus Kernel-Version, Scheduler-Konfiguration, Energieverwaltung, Treibern und sysctl-Parametern ergibt das Systemverhalten. Distributionen, die bereits auf niedrige Latenz oder Gaming optimiert sind, bringen viele der hier beschriebenen Einstellungen bereits mit.
Debian als Basis
Die folgenden Anleitungen beziehen sich auf Debian (Trixie/13) als Ausgangspunkt — eine Allzweck-Distribution, die für allgemeine Nutzung keine Anpassung erfordert, aber für latenzsensitive Anwendungen wie X-Plane gezielt optimiert werden kann. Der Standardkernel wird dabei durch den optimierten Liquorix Kernel ersetzt.
Wer eine bereits getunte Distribution wie Nobara oder Ubuntu Studio verwendet, sollte die Empfehlungen nicht pauschal übernehmen. Dort kann ein Kerneltausch bestehende Optimierungen zerstören, und doppeltes Tuning führt oft zu schlechteren Ergebnissen. In diesem Fall ist es sinnvoller, einzelne Parameter gezielt zu prüfen, anstatt das gesamte Profil anzuwenden.
Performance und Latenz — ein wichtiger Unterschied
Wer von „Performance" spricht, meint oft hohe FPS. Das ist bei Shootern oder Rennspielen richtig — dort zählt Durchsatz: möglichst viele Bilder pro Sekunde. Bei einem Flugsimulator wie X-Plane liegt der Fall anders.
X-Plane berechnet eine komplexe Welt mit Physik, Wetter, Szenerie und Eingabegeräten. Einzelne Frames sind aufwändig, und die Ziel-Framerate liegt typisch bei 25–35 FPS. Entscheidend ist nicht der Durchschnitt, sondern die Gleichmäßigkeit — also die Frame-Time-Konsistenz. Ein System, das stabil 35 FPS liefert, erzeugt flüssigere Bewegung als eines, das zwischen 25 und 50 schwankt.
Die Ursache für Ungleichmäßigkeit ist in den meisten Fällen nicht fehlende Rechenleistung, sondern Latenz — kurze Verzögerungen durch Systemereignisse, die den Hauptthread unterbrechen.
Typische Symptome schlechter Latenz:
- Mikroruckler trotz stabiler CPU/GPU-Auslastung
- Verzögerte Eingabereaktion (Joystick, Ruderpedale)
- Inkonsistente Reaktionszeit bei gleicher Szene
Kernaussage: Bei X-Plane ist Latenzoptimierung wichtiger als Durchsatzmaximierung. Zeitliche Vorhersagbarkeit schlägt maximale Rechenleistung.
Latenzquellen verstehen
Systemlatenz entsteht nicht an einer Stelle, sondern aus vier unabhängigen Kategorien:
| Kategorie | Einfluss | Typisches Symptom |
|---|---|---|
| Scheduling | Verzögerter Threadstart | Ruckler nach Lastspitzen |
| Energieverwaltung | Aufwachlatenz aus Schlafzuständen | Periodische kurze Unterbrechungen |
| Interrupts | Konkurrenz um CPU-Zeit | Ruckler bei I/O oder Eingabe |
| Speicher/IO | Blockierende Hintergrundoperationen | Stotterer beim Laden neuer Szenerien |
Scheduling
Der Linux-Scheduler entscheidet, wann ein Thread Rechenzeit bekommt. Ein konservativer Scheduler wartet länger, bevor er reagiert — das spart Energie, erhöht aber die Latenz. Moderne Scheduler nutzen Deadline-basierte Aufgabenauswahl und adaptive Preemption, sodass latenzsensitive Threads effizienter eingeplant werden.
Energieverwaltung
Nicht die CPU-Last verursacht Ruckler, sondern Übergänge zwischen Energiestufen. Wenn ein Kern aus einem tiefen Schlafzustand aufwacht, entstehen Verzögerungen von bis zu mehreren hundert Mikrosekunden. Auch NVMe-SSDs im Energiesparmodus erzeugen spürbare Aufwachlatenzen (Details unter NVMe Energiesparen deaktivieren).
Interrupts
Hardware-Interrupts (USB-Geräte, Netzwerk, Storage) unterbrechen den laufenden Thread. Ein einzelner Interrupt zur falschen Zeit kann eine Frame-Deadline verletzen:
Speicher/IO
Der Kernel optimiert Durchsatz durch gebündelte Hintergrundarbeit (Writeback, Cache-Bereinigung, Paging). Das erzeugt seltene, aber spürbare Blockierungen — besonders beim Laden großer Ortho-Texturen.
Zwei Optimierungsmodelle
Die richtige Tuning-Strategie hängt vom Kernel ab. Standardkernel und Liquorix verfolgen grundlegend verschiedene Ansätze:
Standardkernel = offener Regelkreis → Reaktion muss erzwungen werden
Der generische Debian-Kernel priorisiert Fairness und Durchsatz. Er reagiert konservativ auf Lastveränderungen. Tuning bedeutet hier: der Anwendung explizit Vorrang einräumen.
Liquorix = geschlossener Regelkreis → Störungen müssen entfernt werden
Liquorix nutzt den PDS-Scheduler (Priority and Deadline based Skiplist) mit kürzeren Preemption-Fenstern und einer Timer-Frequenz von 1000 Hz. Er reagiert selbstständig auf Laständerungen. Tuning bedeutet hier: externe Störquellen minimieren.
Gleiche Einstellung, gegenteiliges Ergebnis
Identische Parameter können je nach Kernel gegensätzliche Effekte haben. Ein performance-Governor hilft beim Standardkernel, kann aber unter Liquorix kontraproduktiv sein (thermischer Spielraum geht verloren). CPU-Isolation hilft beim Standardkernel, verhindert aber unter Liquorix die adaptive Optimierung.
| Parameterbereich | Standardkernel | Liquorix |
|---|---|---|
| CPU-Takt | Konstant hoch | Adaptiv |
| Scheduler-Einfluss | Verstärken | Nicht einschränken |
| CPU-Bindung | Möglich | Vermeiden |
| Interrupt-Routing | Optional | Wesentlich |
| Energiesparen | Begrenzen | Fein abstimmen |
| Writeback | Neutral | Glätten |
Welchen Kernel nutze ich?
- Enthält
liquorix→ Profil B (Liquorix) - Sonst → Profil A (Standardkernel)
Für die Installation von Liquorix siehe Liquorix Kernel.
Profil A: Debian Standardkernel
Ziel: Scheduler reagiert konservativ → Anwendung aktiv bevorzugen.
1. CPU Governor
Den Governor auf festen Hochleistungstakt setzen, um Reaktionszeit zu verkürzen und fehlende Lastvorhersage zu kompensieren.
Sofort umschalten:
Überprüfung:
Für dauerhafte Einstellung über Neustarts hinweg in /etc/default/grub den Parameter GRUB_CMDLINE_LINUX_DEFAULT erweitern:
2. CPU Schlafzustände begrenzen
In /etc/default/grub den Parameter GRUB_CMDLINE_LINUX_DEFAULT erweitern:
AMD vs. Intel
AMD Zen: Exportiert per ACPI nur C1 und C2 an das OS. Tiefere Hardware-C-States (C6) werden firmware-autonom verwaltet. Der Wert 2 stellt sicher, dass alle verfügbaren OS-sichtbaren C-States genutzt werden. Zusätzlich kann amd_pstate=active für moderne Zen-Prozessoren mit CPPC-Unterstützung gesetzt werden.
Intel: Tiefere ACPI-C-States (C3, C6, C8, C10) sind sichtbar und steuerbar. Hier kann processor.max_cstate=3 sinnvoll sein, um tiefe Zustände zu begrenzen. Auf Systemen mit dem intel_idle-Treiber (Standard bei modernem Intel) wird ggf. zusätzlich intel_idle.max_cstate benötigt.
Anwenden:
Neustart erforderlich.
3. Anwendung bevorzugen (Affinität + Priorität)
Ein Starter-Script, das X-Plane auf bestimmte Kerne bindet und mit erhöhter Scheduling-Priorität startet:
Starten:
Zur Priorität
SCHED_FIFO Priorität 45 liegt unterhalb kritischer Kernel-Threads wie IRQ-Handler (Priorität 50), aber deutlich über normalen Prozessen. Werte über 50 können Kernel-Housekeeping preemptieren und zu Instabilität führen.
4. Optional: CPU-Isolation
Nur sinnvoll bei hoher Hintergrundlast. In /etc/default/grub ergänzen:
Hinweis zur Abkündigung
isolcpus ist in der Kernel-Dokumentation als deprecated gekennzeichnet. Die modernere Alternative sind cpusets, die zur Laufzeit ohne Neustart konfiguriert werden können. Für einen einfachen Desktop-Anwendungsfall bleibt isolcpus jedoch die unkompliziertere Variante.
5. Speicherverhalten
vm.swappiness=20
vm.dirty_ratio=20
vm.dirty_background_ratio=10
vm.vfs_cache_pressure=100
Anwenden:
Ergebnis Profil A
Der Kernel reagiert schneller, da Rechenzeit für die Anwendung garantiert wird.
Profil B: Liquorix Kernel
Ziel: Scheduler arbeitet bereits optimal → externe Störungen entfernen.
Wichtig: Kein isolcpus, kein taskset — diese würden die adaptive Optimierung des Schedulers verhindern.
1. Adaptiver CPU-Governor
Sofort umschalten:
Überprüfung:
Warum ondemand statt schedutil?
schedutil bezieht Auslastungssignale direkt vom Mainline-CFS/EEVDF-Scheduler. Liquorix nutzt jedoch den alternativen PDS-Scheduler, der diese Signale nicht bereitstellt — schedutil wird daher gar nicht erst einkompiliert. ondemand passt den CPU-Takt ebenfalls lastabhängig an, arbeitet aber unabhängig vom Scheduler.
Optional Energy Performance Preference setzen:
echo balance_performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference
Für dauerhafte Einstellung über Neustarts hinweg in /etc/default/grub den Parameter GRUB_CMDLINE_LINUX_DEFAULT erweitern:
Persistenz
Die Terminal-Befehle gelten bis zum nächsten Neustart. Die GRUB-Variante macht die Einstellung dauerhaft. Für permanente EPP-Einstellung eine systemd-Unit oder udev-Regel erstellen.
2. C-States und Energiesteuerung
AMD vs. Intel
AMD Zen: Nur C1/C2 sind OS-sichtbar — keine C-State-Begrenzung nötig. Tiefere Hardware-C-States helfen dem thermischen Budget.
Intel: processor.max_cstate=5 erlaubt moderate Schlafzustände und vermeidet die tiefsten Zustände. Auf Systemen mit intel_idle (Standard) zusätzlich intel_idle.max_cstate=5 setzen.
In /etc/default/grub — für Intel:
3. Interrupt-Shielding
Die wichtigste Maßnahme unter Liquorix. Hardware-Interrupts auf die ersten Kerne konzentrieren, damit der Scheduler die restlichen Kerne ungestört für die Anwendung nutzen kann.
IRQ-Affinität auf modernen Kerneln
Moderne Kernel verwenden Managed Interrupts für MSI-X-Geräte (NVMe, GPU, etc.). Der Kernel steuert die Affinitätszuordnung dieser IRQs, und Schreibzugriffe auf /proc/irq/*/smp_affinity werden vom Kernel abgelehnt — unabhängig von der Kernel-Variante. Das ist kein Liquorix-Spezifikum, sondern ein allgemeiner Kernel-Mechanismus.
Der Userspace-Daemon irqbalance übernimmt die Verteilung nicht verwalteter IRQs und berücksichtigt diese Kernel-Einschränkungen automatisch.
Für nicht verwaltete IRQs bietet irqbalance eine effektive CPU-Ausgrenzung. In /etc/default/irqbalance eintragen:
Das schließt die angegebenen Kerne von der Interrupt-Verteilung aus. CPU 0–3 = System/Interrupts, Rest = Anwendung.
Warum irqbalance statt manueller Affinität?
irqbalance mit BANNED_CPULIST ist wartungsfreundlicher als manuelle Affinität: Es passt sich automatisch an neue Hardware-IRQs an und verteilt die Last intelligent auf die erlaubten Kerne.
4. NVMe Energiesparen deaktivieren
NVMe-SSDs können im Energiesparmodus Aufwachlatenzen im Millisekundenbereich haben — länger als ein kompletter Frame bei 60 Hz. Die Exit-Latenzen variieren je nach Hersteller und Energiesparstufe.
Um NVMe-Energiesparen zu deaktivieren, in /etc/default/grub den Parameter GRUB_CMDLINE_LINUX_DEFAULT erweitern:
Neustart erforderlich.
Laufzeitänderungen
Der sysfs-Parameter /sys/module/nvme_core/parameters/default_ps_max_latency_us wirkt nur auf neu initialisierte NVMe-Geräte. Für bereits aktive Geräte per-Device PM QOS verwenden:
5. Speicher-Writeback glätten
vm.swappiness=10
vm.dirty_background_ratio=3
vm.dirty_ratio=10
vm.vfs_cache_pressure=100
Anwenden:
6. Leichte Priorisierung
Unter Liquorix genügt eine moderate nice-Anpassung:
Ergebnis Profil B
Keine maximale Leistung — sondern minimale Frame-Time-Spikes. Der Scheduler kann frei optimieren, weil äußere Störungen reduziert sind.
Zwischen Kerneln wechseln
Wer beide Kernel parallel installiert hat (Standard-Debian + Liquorix), kann beim Booten wählen, welcher geladen wird. So lässt sich das passende Tuning-Profil je nach Einsatzzweck nutzen — ohne einen der Kernel deinstallieren zu müssen.
Installierte Kernel anzeigen
GRUB-Menüeinträge ermitteln
GRUB nummeriert die Einträge ab 0. Kernel im Untermenü „Advanced options" werden mit > adressiert:
Das Format für Untermenü-Einträge ist "Übermenü>Eintrag", z.B.:
Einmaliger Wechsel
Voraussetzung
grub-reboot erfordert GRUB_DEFAULT=saved in /etc/default/grub (siehe Dauerhafter Wechsel weiter unten). Ohne diese Einstellung ignoriert GRUB den gespeicherten Eintrag.
Beim nächsten Neustart einen bestimmten Kernel starten, danach wieder den Standard:
sudo grub-reboot "Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 6.12.6-1-liquorix-amd64"
sudo reboot
Dauerhafter Wechsel
Den Standard-Boot-Eintrag permanent ändern:
-
In
/etc/default/grubsetzen: -
Gewünschten Kernel als Standard setzen:
Nach dieser Einrichtung funktioniert auch grub-reboot für einmalige Abweichungen vom gespeicherten Standard.
Aktuellen Kernel prüfen
Was lässt sich zur Laufzeit umschalten?
Nicht alle Einstellungen erfordern einen Neustart. Die folgende Tabelle zeigt, welche Parameter im laufenden Betrieb geändert werden können:
| Parameter | Zur Laufzeit änderbar? | Methode |
|---|---|---|
| Governor | Ja | echo ... \| sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor |
| NVMe APST | Nein | Nur per GRUB — sysfs-Parameter wirkt nur auf neu initialisierte Geräte |
| sysctl (vm.*) | Ja | sudo sysctl --system |
| irqbalance-Dienst | Ja | sudo systemctl stop/start irqbalance |
| nice / chrt / taskset | Ja | Wird beim Anwendungsstart gesetzt |
| IRQ-Affinität | Nein (Managed IRQs) | Kernel verwaltet MSI-X-Affinität — irqbalance mit BANNED_CPULIST für nicht verwaltete IRQs nutzen |
| processor.max_cstate | Nein | Nur per GRUB, Neustart nötig |
| isolcpus | Nein | Nur per GRUB (Alternative: cpusets) |
Tuning-Profil anpassen
Nach einem Kernel-Wechsel das passende Profil verwenden: Profil A für den Standardkernel, Profil B für Liquorix. Die Governor- und sysctl-Einstellungen unterscheiden sich grundlegend — falsche Kombination verschlechtert die Performance.
Gesamtvergleich
| Bereich | Standardkernel | Liquorix |
|---|---|---|
| Governor | performance |
ondemand |
| CPU-Bindung | Ja (taskset) |
Nein |
| Interrupt-Trennung | Optional | Wichtig |
| NVMe APST | Optional deaktivieren | Deaktiviert |
| Writeback | Normal | Geglättet |
| Priorisierung | SCHED_FIFO + Affinität |
nice -n -10 |
| Ziel | Reaktionszeit erzwingen | Störungen verhindern |
Kernregel
Standardkernel braucht Priorisierung — Liquorix braucht Ruhe.
Wenn beide Kernel gleich konfiguriert werden, verschlechtert sich das Ergebnis fast immer.
Quellen
Die wichtigsten Quellen zu den auf dieser Seite behandelten Themen:
- CPU Performance Scaling — Linux Kernel Documentation — CPU-Frequenz-Governor und Skalierungstreiber
- CPU Idle Time Management — Linux Kernel Documentation — C-States und Idle-Treiber (acpi_idle, intel_idle)
- amd-pstate CPU Performance Scaling Driver — Linux Kernel Documentation — AMD P-State-Treiber und Modi
- Liquorix Kernel — PDS-Scheduler, Zen Interactive Tuning, Kernel-Features
- irqbalance(1) — Debian Man Page — IRQ-Verteilungs-Daemon-Konfiguration
- Solid State Drive/NVMe — Arch Wiki — NVMe-Energieverwaltung (APST)
- sysctl.d(5) — Linux Man Page — sysctl Drop-in-Konfiguration
- GNU GRUB Manual — GRUB-Konfiguration und Kernel-Auswahl