Echtzeitfähiges Linux 6.12 erschienen
Linux integriert nun PREEMPT_RT und ist Echtzeitfähig. Der eBPF-basierte "extensible Scheduler" ist ebenfalls enthalten.
In der Nacht von Sonntag auf Montag gab Linus Torvalds den nächsten Linux-Kernel frei. Wie so oft betreffen auch in Linux 6.12 weit über die Hälfte der Änderungen neue, angepasste und erweiterte Treiber. Etwa ein Zehntel der Neuerungen betreffen Performance- und Selbsttests sowie andere Nützlichkeiten aus dem Werkzeugkasten rund um den Kernel und seine Entwicklung. Außerdem ging einiger Aufwand in Verbesserungen und Optimierungen rund ums Thema Dateisysteme. Torvalds bezeichnete das vor gut zwei Monaten beim ersten Release Candidate als ein "bisschen was von allem".
Der neue Linux-Kernel ist dennoch alles andere als langweilig. Er hat endlich einige lang aufgeschobene Features im Gepäck. So sind die Reibereien rund um den "extensible Scheduler" (sched_ext) beigelegt. Der per eBPF erweiterbare Scheduler ist jetzt Bestandteil des Linux-Kernel. Außerdem ist nun der Realtime-Scheduler PREEMPT_RT im Mainline-Kernel angekommen. Er lässt sich nun über eine Config-Option im Experten-Modus beim Konfigurieren des Linux-Kernels einschalten.
Echtzeit im Kernel angekommen
Es ist an sich nichts Neues, dass Linux auch Echtzeitfähig ist. 2005 hob Thomas Gleixner PREEMPT_RT als Patch-Set für Linux aus der Taufe. Seither entwickelte ein stetig wachsendes Team kontinuierlich die Echtzeitfähigkeit (Realtime-Support) in zwei Jahrzehnten weiter. Mit dem für die jeweiligen Kernel-Versionen angepassten Set ließ sich die "Echtzeit" in Linux einimpfen. Die Entwicklung fand außerhalb des offiziellen Kernel-Sourcen (Mainline) statt.
Nachdem zahllose technische und politische Unwegsamkeiten umschifft waren, kam es am 19. September dieses Jahres zur feierlichen und ungewöhnlichen Übergabe. Den "Pull Request" zur Aufnahme von PREEMPT_RT in den Mainline-Kernel reichte Gleixner nicht nur elektronisch über die Versionsverwaltung git ein. Er übergab Linus Torvalds den Pull Request auch persönlich in gedruckter Form, in Goldfolie gewickelt und mit einem roten Bändchen samt Schleife verschnürt. So wie es sich Torvalds Jahre zuvor scherzhaft gewünscht hatte.
Mit dem PREEMPT_RT im Mainline-Kernel ist Linux offiziell ein echtes Echtzeitbetriebssystem. Es reiht sich damit in eine Schlange mit der überwiegend proprietären Konkurrenz ein, wie beispielsweise dem Realtime-Urgestein OS-9, dem unter anderem im Automobilbau eingesetzten QNX und VxWorks, das die Mars-Rover Spirit, Opportunity, Curiosity und Perseverance antreibt. Wohingegen die Konkurrenz schon am Zeichenbrett für Echtzeitbetrieb ausgelegt wurden, ist Linux vom Design her ein Allzweckbetriebssystem, dem erst nachträglich – erfolgreich – der Echtzeitbetrieb nachgerüstet wurde. In der Forschung galt das lange als nahezu "unmöglich".
Wie tickt Echtzeit?
Echtzeitbetrieb bedeutet, eintreffende Informationen, Signale oder Daten in einer festgelegten Zeitspanne verarbeiten zu können. Es dürfen keine Verzögerungen dabei auftreten. Keine Hardware und keine Software darf so sehr "dazwischenfunken", dass die vereinbarte Zeitspanne nicht mehr eingehalten werden kann. Die Anforderung bedienen Allzweckbetriebssysteme in der Regel nicht.
Ein plastisches Beispiel: Angenommen, Tastatureingaben wären Informationen, die zu verarbeiten sind. Wer flink und flott im Zehnfingersystem tippt, kann auf einem Allzweckbetriebssystem im normalen Betrieb flüssig tippen. Die Zeichen tauchen quasi zeitgleich zum Anschlag auf dem Bildschirm auf. Nun geht das System an seine Leistungsgrenze, weil es gerade Updates installiert, ein Bild ohne GPU-Unterstützung per KI generiert und dann noch in den Stromsparmodus wechselt, da der Akku kurz vor knapp ist. Dann geht das Tippen plötzlich wie bei einem alten 80er-Jahre-Fernschreiber vonstatten. Man tippt schon gar nicht mehr, aber die Buchstaben trudeln immer noch auf dem Bildschirm ein.
Beim Echtzeitbetrieb hingegen wären die Tastenanschläge immer noch in einer vordefinierten Zeit auf dem Bildschirm. Das impliziert einige Änderungen im System. So muss der Scheduler derart modifiziert sein, dass er Echtzeitverarbeitung priorisiert und garantiert die Daten oder Ereignisse in der vorgegebenen Zeit abarbeitet. Nicht Priorisiertes muss sich – anders als im Allzweckbetriebssystem – hinten anstellen und mit dem an Systemressourcen begnügen, was die Realtime-Verarbeitung übrig lässt. Wie das auch Probleme bereiten kann, reißt der Abschnitt zum "Realtime Throttling" in der Meldung zum Kernel 6.8.1 an. Ein System kann im Echtzeitbetrieb ohne sichernde Maßnahmen auch nicht mehr administrierbar werden.
Performance- und Power-Management sind beim Echtzeitbetrieb weitestgehend unerwünscht. Das Anpassen von CPU-Frequenz oder das Wechseln in einen herkömmlichen Sleep-Modus wären schädlich für den Echtzeitbetrieb. Spätestens hier wird auch klar, warum es Allzweck- und Echtzeitbetriebssysteme gibt. Niemand möchte einen dauerwachen Energiefresser als Büro-PC oder Notebook haben.
Integration in Linux
Hier deutet sich an, wie komplex der Umbau von Linux zum Realtime-OS war und warum es zwanzig Jahre bis zur vollständigen Integration gedauert hat. Neben politischen Unwägbarkeiten waren auch viele technische Hürden zu nehmen.
Linux 6.12 hat den Realtime-Betrieb für x86_64, x86, ARM64 und RISC-V im Gepäck. Das Aktivieren erfolgt über die Option CONFIG_PREEMPT_RT
im make menuconfig
. Damit lassen sich nun auch die seit Linux 5.10 schon in Teilen aus PREEMPT_RT eingeflossen, aber ruhenden Funktionen im Mainline-Kernel aktivieren.
Dateisysteme
Bislang war es möglich, ein Dateisystem unter /proc
einzuhängen. Ein typisches Beispiel ist /proc/PID/fd
, wobei PID für die Prozess-ID steht. Linux 6.12 schiebt dem einen Riegel vor. Fortan können keine Dateisysteme mehr dort eingehängt werden. Zum einen ergibt das ohnehin recht wenig Sinn, Dateisysteme an einen solchen "flüchtigen" Punkt einzuhängen. Zum anderen ist das auch ein Sicherheitsrisiko.
Die Userspace-Dateisysteme (FUSE) unterstützen nun auch "ID-mapped Mounts". Es handelt sich um die grundlegende Unterstützung, die nächsten Kernel-Versionen werden dafür noch etwas nachlegen. NTFS3 weitet den Support von komprimierten Dateien aus. XFS wartet mit neuen ioctls auf, um multigranulare und feingranulare Zeitstempel zu unterstützen.
Mit den Patches für "Device Memory TCP" optimiert der neue Kernel TCP-Datentransfers. Hierzu nutzt er den DMA-Puffer-Mechanismus, um Daten zwischen Netzwerk und Peripheriegeräten ohne Umweg über die CPU auszutauschen.
Rust geht voran
Die Arbeiten an der Rust-Integration machen Fortschritte. Insbesondere kann Rust jetzt mit einer Reihe von Kernel-Entwicklungs- und Security-Features umgehen. Erwähnenswert sind hier die Anbindung an den "Kernel Address Sanitizer" (KASAN), die Spectre-Mitigation und die Kernel-Control-Flow-Integrity.
Die meisten gcc-Plugins lassen sich nun auch aus Rust heraus nutzen. Auch gibt es neue Rust-Module fĂĽr doppelt-verkette Listen und Red-Black-Trees.
Zusammengefasst
Linux 6.12 ist mehr als ein Wartungsrelease. Mit dem integrierten extensible Scheduler und dem Einsaugen der Realtime-Patches sind jetzt wesentliche neue Features Standard. Insbesondere die Integration und Wartung von Echtzeit-Kerneln in Distributionen erleichtert das.
Auch abseits dieser "Brocken" bietet Linux 6.12 eine Reihe neuer Treiber und Optimierungen. Ein gelungener Abschluss für dieses Jahr, denn der nächste Kernel steht erst 2025 wieder an. Traditionsgemäß als letztes Release im Jahr wird Linux 6.12 auch zum nächsten LTS-Release mit Langzeit-Support.
Der Quelltext von Linux 6.12 steht wie gewohnt auf kernel.org zum Download bereit. Alle Änderungen und Neuerungen finden sich erschöpfend im Kernel-Changelog aufgelistet.
(dmk)