linux-kernel-advanced kernel real-time rt performance determinism advanced

Real-Time Linux: PREEMPT_RT Kernel (Artikel 380)

Analyse der Echtzeitfähigkeiten von Linux. Erfahren Sie alles über den PREEMPT_RT-Patch, die Erreichung von Determinismus und den Einsatz von Linux in kritischen industriellen Umgebungen.

# Real-Time Linux: Determinismus statt purer Geschwindigkeit

TL;DR / Management Summary In der Standard-IT zählt Durchsatz. In der Welt der Industriesteuerungen, Robotik und Audio-Technik zählt Determinismus: Eine Aktion muss garantiert innerhalb einer bestimmten Zeit (z.B. 100 Mikrosekunden) ausgeführt werden. Ein Senior Admin nutzt den PREEMPT_RT Kernel-Patch, um Linux in ein Hard-Real-Time System zu verwandeln. Er opfert dabei Gesamtdurchsatz für garantierte Antwortzeiten.


# 1. Einführung & Architektur

Durchsatz vs. Latenz.

Ein normaler Kernel (Artikel 379) kann einen Prozess jederzeit unterbrechen (Preemption), außer er befindet sich in einem kritischen Bereich (Critical Section). Der RT-Kernel macht fast den gesamten Kernel-Code unterbrechbar.

# Der Architektur-Unterschied (Mermaid)

graph TD
    subgraph "Standard Kernel"
        A[App Request] --> B[Kernel: SoftIRQ / Spinlock]
        B -->|Wait| B
        B --> C[Execution]
    end
    subgraph "PREEMPT_RT Kernel"
        D[App Request] --> E[Kernel: Threaded IRQ / Sleepable Lock]
        E -->|Immediate Preemption| F[High Priority RT Task]
        F --> G[Execution]
    end
    B --- H[High Throughput / High Latency]
    E --- I[Lower Throughput / Guaranteed Latency]

# 2. Den RT-Status prüfen

Habe ich einen Echtzeit-Kernel?

Die meisten Distributionen bieten einen RT-Kernel als Paket an.

uname -a
# Achten Sie auf den String 'PREEMPT_RT'

# Installation (Beispiel Arch)

sudo pacman -S linux-rt linux-rt-headers

# 3. High-Resolution Timers

Präzision im Nanosekunden-Bereich.

Ein RT-Kernel nutzt hochauflösende Timer, um Prozesse exakt zu wecken.

cat /proc/timer_list | grep "resolution"
# In RT-Systemen sollte hier '1 nsecs' stehen.

# 4. Day-2 Operations: Priority Inheritance

Das Umkehren der Hierarchie verhindern.

Ein häufiges Problem in RT-Systemen ist die Priority Inversion: Ein niedrig-priorisierter Prozess hält ein Lock, das ein hoch-priorisierter Prozess braucht.

  • Lösung: Der RT-Kernel nutzt “Priority Inheritance”. Der niedrige Prozess erbt temporär die hohe Priorität, um seine Arbeit fertigzustellen und das Lock freizugeben.

# 5. Troubleshooting & “War Stories”

Wenn ‘Echtzeit’ das System einfriert.

# Story 1: “Der total-Lockup durch FIFO”

Symptom: Der Server reagiert auf keine Tasteneingabe mehr, der Schirm ist eingefroren, aber der Cursor blinkt noch. Ursache: Ein Admin hat eine Endlosschleife (Bug) in einer Applikation, die mit SCHED_FIFO und Priorität 99 läuft. Da dieser Prozess die CPU niemals freiwillig abgibt, bekommt selbst der Kernel-Schreibprozess oder SSH keine Rechenzeit mehr. Lösung: Nutzen Sie beim Testen immer RT Throttling: sysctl -w kernel.sched_rt_runtime_us=950000. Dies reserviert 5% der Zeit für Notfall-Aufgaben.

# Story 2: “Das Latenz-Loch durch SMI”

Symptom: Trotz RT-Kernel gibt es alle 10 Minuten einen Latenz-Peak von 5 Millisekunden. Ursache: System Management Interrupts (SMI). Die Firmware (BIOS) des Mainboards übernimmt die CPU für interne Aufgaben (Lüftersteuerung, Thermal-Check). Der Kernel kann dies nicht unterbrechen. Lösung: Deaktivieren Sie Energiesparmodi (C-States) im BIOS und nutzen Sie Tools wie cyclictest, um die Hardware-Latenz zu messen.


# 6. Fazit & Empfehlung

  • Wahl: Nutzen Sie PREEMPT_RT nur, wenn Ihre Applikation harte Deadlines hat. Für 99% aller Web- und Datenbank-Server ist der Standard-Kernel performanter.
  • Wartung: Nutzen Sie CPU Isolation (isolcpus Boot-Parameter), um RT-Aufgaben komplett von Hintergrundprozessen zu trennen.
  • Wissen: Echtzeit-Linux ist kein “schnelles” Linux, sondern ein “vorhersehbares” Linux.

# Anhang: Cheatsheet

Aufgabe Befehl
RT Status cat /sys/kernel/realtime
Latenz-Test sudo cyclictest -l100000 -m -sp99 -i200 -h400
RT Throttling sysctl kernel.sched_rt_runtime_us
IRQ Analyse cat /proc/interrupts
Threaded IRQs `ps -eo pid,class,rtprio,ni,pri,comm
Zeitquelle cat /sys/devices/system/clocksource/clocksource0/current_clocksource
Paket (SLES) zypper install kernel-rt