Linux-Echtzeitsteuerung: Prozesspriorisierung mit chrt

Einführung: Determinismus und Priorisierung im Linux-Kernel

Latenzkritische Workflows verlangen dem Betriebssystem deterministisches Verhalten ab. Standardmäßig verteilt der Linux-Kernel Rechenzeit nach Fair-Share-Prinzipien – doch wer Audioverarbeitung, Messdatenerfassung oder Regelungstechnik betreibt, benötigt direkte Kontrolle über die Task-Reihenfolge. Mit dem Dienstprogramm chrt aus der util-linux-Suite lässt sich das Scheduling-Verhalten laufender und neuer Prozesse punktgenau justieren. Dieser Leitfaden demonstriert praxisnah unter Ubuntu, wie Sie POSIX-Echtzeitklassen (insbesondere FIFO und Round-Robin) einrichten, Prioritäten auditieren und laufende Dienste gezielt beschleunigen.

Unterstützte Scheduling-Klassen und Wertebereiche analysieren

Bevor wir die Prozesssteuerung manipulieren, stellen wir sicher, dass alle Diagnosewerkzeuge auf dem aktuellen Stand bereitstehen:

Paketquellen aktualisieren und util-linux sowie procps installieren

Über das Kommandozeilentool chrt interagieren Administratoren direkt mit den Scheduler-Attributen des Kernels. Mittels des Flags -m offenbart das System sämtliche implementierte Strategien samt deren zulässiger Prioritätsspannen.

⚙️ [Wesentliche Parameter im Überblick]

-m : Zeigt alle vom Kernel bereitgestellten Richtlinien inklusive minimaler und maximaler Priorität an.
-p : Zielt auf eine bestehende Prozess-ID (PID) zur Abfrage oder Rekonfiguration ab.
-f : Aktiviert das First-In-First-Out-Echtzeitmodell (SCHED_FIFO).
-r : Schaltet auf das zeitgesteuerte Round-Robin-Echtzeitverfahren (SCHED_RR) um.
-o : Setzt den Prozess auf die standardmäßige Time-Sharing-Richtlinie (SCHED_OTHER) zurück.
-b : Kennzeichnet rechenintensive Hintergrundverarbeitung ohne Interaktivitätsanspruch (SCHED_BATCH).
-i : Stuft Tasks auf niedrigste Priorität für absolute Leerlaufzeiten ein (SCHED_IDLE).
-d : Erzwingt Deadlines nach Earliest-Deadline-First-Algorithmen (SCHED_DEADLINE).

Übersicht der unterstützten Kernel-Richtlinien mit chrt -m

Standard-Scheduling und Ausgangsprioritäten laufender Tasks ermitteln

Für die folgenden Tests starten wir zunächst einen harmlosen Dummy-Dienst im Hintergrund, der für zehn Minuten pausiert:

Hintergrundprozess mit sleep 600 starten

Damit nachfolgende Kommandos reibungslos auf diesen Task zugreifen können, sichern wir die zuletzt erzeugte Prozesskennung in einer Umgebungsvariablen:

PID in TARGET_PID sichern

Ein Aufruf von chrt -p deckt den aktuellen Status unseres Hintergrundprozesses auf: Wie bei gewöhnlichen Linux-Programmen üblich, unterliegt der Task der dynamischen Zeitscheibenverwaltung SCHED_OTHER bei einem internen Echtzeitwert von 0.

Aktuelle Attribute mit chrt -p auslesen

Zur Gegenprobe befragen wir ps mit spezifischen Ausgabeformaten. Die Spaltenzuordnung für Scheduling-Klasse (CLS), Realtime-Priorität (RTPRIO) sowie Kernel-Gesamtrang (PRI) bestätigt: Unter Standardbedingungen (TS) existiert keine Echtzeit-Einstufung (gekennzeichnet durch -), während der Kernel dem Thread eine reguläre Ausgangspriorität von 19 zuweist.

Scheduler-Klasse und Priorität per ps prüfen

Rekonfiguration auf Echtzeitmodi (SCHED_FIFO und SCHED_RR)

Nun heben wir den Zielprozess in den Echtzeitbereich an. Da Echtzeitprozesse herkömmliche Tasks aushungern können, erfordert dieser Eingriff zwingend Root-Rechte (sudo). Mit folgendem Aufruf wechseln wir auf SCHED_FIFO bei mittlerer Priorität 50:

Umstellung auf SCHED_FIFO mit Priorität 50

Eine erneute Statusabfrage validiert die Anpassung umgehend: Der Kernel führt den Prozess nun mit Vorrang über die FIFO-Warteschlange, verknüpft mit dem definierten Prioritätslevel 50.

Verifikation der FIFO-Konfiguration mit chrt -p

Im nächsten Schritt konfigurieren wir das Verhalten auf SCHED_RR um und vergeben Priorität 30. Im Unterschied zu FIFO sorgt dieser Modus dafür, dass gleichrangige Echtzeittasks innerhalb fester Zeitscheiben (Time Slices) abwechselnd CPU-Zyklen erhalten und so Blockaden vermieden werden:

Wechsel auf Round-Robin mit Priorität 30

Ein erneuter Blick in die Prozesstabelle verifiziert die Neukonfiguration im Kernel-Subsystem: Das Attribut CLS weist nun RR aus, während RTPRIO exakt den gesetzten Wert 30 widerspiegelt und die interne Gesamtpriorität (PRI) auf 70 angehoben wurde.

ps-Ausgabe validiert die RR-Einstufung

Neue Prozesse direkt in Echtzeit starten und Umgebung bereinigen

Ein großer Vorteil von chrt liegt darin, dass Vorgaben nicht erst nachträglich injiziert werden müssen. Befehle lassen sich von der ersten Millisekunde an mit maßgeschneiderten Attributen initiieren. Hier starten wir eine weitere Instanz direkt im Round-Robin-Modus mit Priorität 25:

Direktstart eines Prozesses mit SCHED_RR und Priorität 25

Mittels gefilterter Prozessliste kontrollieren wir beide Instanzen parallel. Das Ergebnis verdeutlicht das Zusammenspiel beider Instanzen: Beide sleep-Prozesse laufen deterministisch in der Klasse RR, sauber getrennt nach ihren Prioritätsstufen 30 und 25.

Laufende sleep-Prozesse und deren Prioritäten filtern

Nach Abschluss der Versuchsreihe säubern wir die Prozesstabelle. Ein kombinierter Befehl beendet sowohl die zuvor gespeicherte PID als auch die zusätzlich gestartete Instanz rückstandslos:

Aufräumen der Hintergrundprozesse

Mit chrt erhalten Systemadministratoren ein präzises Skalpell, um dem Linux-Scheduler bei anspruchsvollen, zeitkritischen Anwendungen klare Prioritäten vorzugeben. Setzen Sie diese Werkzeuge überlegt ein, um Audio-, Steuerungs- oder Streaming-Diensten maximale Reaktionsschnelligkeit zu garantieren, ohne die Systemstabilität zu gefährden.