Linux 5.4 freigegeben: exFAT-Support und Einschränkungen für Root Update

Linux Kernel 5.4

Trends & News | Kernel-Log

Die neue Kernel-Version kann Verzeichnisse effizienter in virtuelle Maschinen hineinreichen. Sie führt zudem eine von manchen ungeliebte Sicherheitstechnik ein und spricht viele neue Grafikchips von AMD an.

Linus Torvalds hat zum Wochenstart die Linux-Version 5.4 freigegeben. Wie jeder neue Kernel der Hauptentwicklungslinie von Linux bringt auch der neueste weit über zehntausend Änderungen. Einige rüsten neue Features nach, andere verbessern existierende. Die wichtigsten Neuerungen im Kurzüberblick, bevor der Text in die Details geht:

  • Eine der herausragendsten Neuerungen ist der Support für Microsofts exFAT-Dateisystem; vieles deutet allerdings darauf hin, dass der jetzt integrierte Code schon bald durch einen von zwei moderneren Ansätzen ersetzt wird.
  • Der neue Kernel kann dem Root-Anwender einige bislang mögliche Dinge verwehren; das kann die Sicherheit des Systems steigern und ist vor allem zur Unterstützung von UEFI Secure Boot gedacht.
  • Linux 5.4 bringt einen neuen Ansatz, um die Verwendung von Storage-Hardware zu limitieren, damit wildgewordene Programme nicht andere übermäßig verlangsamen können.
  • Von Google-Entwicklern beigesteuerte Erweiterungen versprechen die App-Performance bei Android zu verbessern.
  • Der neue Kernel weist eine Sicherheitstechnik in die Schranken, damit Wine einige 64-Bit-Windows-Spiele auch auf den neuesten AMD- und Intel-Prozessoren ausführen kann.
  • Linux 5.4 bringt Support für die gerade am Markt eintrudelnde Radeon RX 5500; anders als zwischenzeitlich erwartet ist der auch nicht als experimentell gekennzeichnet und daher standardmäßig aktiv. Außerdem haben die Entwickler die Performance des Grafiktreibers für AMDs moderne Grafikchips verbessert.
  • Der Kernel kann die Prozessortemperatur jetzt auch bei Ryzen-3000-CPUs auslesen.
  • Die Storage-Treiber wissen jetzt endlich die NVMe-Datenträger moderner Macs anzusteuern.
  • Um ein schwelendes Problem beim Erzeugen von Zufallszahlen ein für allemal aus der Welt zu schaffen, hat Linus Torvalds überraschenderweise mal wieder selbst eine signifikante Änderung programmiert.
  • Kernel-Entwickler können jetzt den Zugriff auf Funktionen begrenzen, die ihr Code anderen Modulen offeriert. Die Funktion könnte über kurz oder lang die Möglichkeiten extern gewarteter Kernel-Treiber einschränken – egal ob quelloffen oder proprietär.
  • Mit dem BPF ausgeführte Tracing- und Performance-Monitoring-Programme lassen sich jetzt so kompilieren, dass sie unter verschiedenen Kernel-Images laufen.
  • Mit Virtio-Fs stößt ein frischerer Ansatz zum Kernel, um aus Virtual Machines (VMs) effizient und schnell auf Dateien und Verzeichnisse des Hosts zuzugreifen.
  • Eine Vielzahl neuer und erweiterter Treiber verbessern die Hardware-Unterstützung wieder deutlich. Ein Beispiel: Ein neuer Treiber ermöglicht die Steuerung des Flugsimulators Flightgear über Fernbedienungen, die eigentlich zur Steuerung von Drohnen oder Modell-Helikoptern und -Flugzeugen gedacht sind.
  • Die neue Linux-Version erhält Langzeitpflege – ob zwei oder sechs Jahre, ist derzeit aber noch ungewiss.

Die folgenden Seiten liefern zahlreiche Details zu diesen Neuerungen von Linux 5.4 und erläutern zahlreiche weitere. Die letzte Artikelseite enthält zudem einen kleinen Ausblick auf die Änderungen, die 5.5 bringen dürfte; Wireguard ist vermutlich noch nicht dabei, aber eine für die VPN-Technik wichtige Infrastruktur.

Linux 5.4 bringt endlich Code zur Unterstützung von Microsofts exFAT-Dateisystem mit. Damit dürfte das Gros der Linux-Distributionen das bei Speicherkarten aktueller Foto- und Video-Kameras häufig anzutreffende Dateisystem bald endlich von Haus aus unterstützen. Bislang war exFAT-Support beim Kernel und einigen Distributionen bewusst außen vor geblieben, da die Gefahr von Patentklagen bestand. Diese Sorge ist jetzt weitgehend vom Tisch, weil Microsoft die exFAT-Patente und -Spezifikationen für Linux öffnet.

Dies war ein schrittweise aktualisierter Artikel

Dieser Text wurde mehrfach erweitert, um nach und nach alle wesentlichen Änderungen in Linux 5.4 zu beschreiben. Zur am 25. November erfolgten Freigabe dieser Kernel-Version haben wir die Erzählreihenfolge verändert und Abschnitte zu wichtigeren Neuerungen an den Anfang gestellt. Von nun an behält der Text seine jetzige Form. Details zur Versionshistorie des Artikels finden Sie am Artikelende.

Der integrierte, vor Jahren von Samsung freigegebene und zwischenzeitlich verbesserte exFAT-Code hat allerdings einige größere Qualitätsprobleme, daher landete er nur im Staging-Bereich; dort wird Code mit solchen Mängeln akzeptiert, um ihn dort im Rahmen der Kernel-Entwicklung auf Vordermann zu bringen. Die Aufnahme war allerdings ziemlich umstritten, wie LWN.net in den Artikeln "On-disk format robustness requirements for new filesystems" und "Examining exFAT" erläutert.

Hinzu kommt: Der integrierte exFAT-Code wird vermutlich schon bald wieder verworfen, denn rund um dessen Aufnahme stellte sich heraus, dass Samsung den Code intern weiter entwickelt hat und dadurch mit "sdFAT" jetzt eine deutlich robustere Lösung zur exFAT-Unterstützung hat. Einige Wochen später gegen Ende September erklärten sich Mitarbeiter des Unternehmens dann bereit, eine Variante dieses sdFAT-Codes bald in den offiziellen Kernel einzubringen. Damit aber nicht genug: In der zweiten Oktoberhälfte veröffentlichte dann auch noch ein Entwickler von Paragon Software GmbH anderen, ganz unabhängig vom Samsung-Ansatz entstandenen Code zur exFAT-Unterstützung mit dem Ziel, diesen in den offiziellen Kernel einzubringen. Die Entwickler müssen sich nun noch abstimmen, welche der Ansätze jetzt in den Kernel einfließen soll.

Nach vielen Entwicklungsjahren, mehreren Dutzend Anläufen durch zwei verschiedene Programmierer sowie zahlreichen hitzigen Diskussionen hat Linus Torvalds endlich Patches zum "Kernel Lockdown" integriert. Damit kann Linux selbst dem Root-Anwender (User-ID/UID == 0) ein paar bislang mögliche Dinge verwehren, um die Sicherheit des Systems zu verbessern.

Das ist vorwiegend zum Support von Techniken wie UEFI Secure Boot interessant, denn ohne die Einschränkungen, die der Kernel Lockdown ermöglicht, können Angreifer solche Sicherheitsfunktionen leicht aushebeln. Dass das so leicht ist, liegt vor allem an einigen veralteten und dieser Tage vielfach zweifelhaften Kernel-Treibern und -Funktionen, durch die der Root-Anwender teilweise überall im Arbeitsspeicher schreiben kann. Ohne den Lockdown können Angreifer darüber andere Selbstschutzmechanismen des Kernels aushebeln und so etwa hinterrücks Schadcode in den laufenden Kernel einschleusen.

UEFI Secure Boot soll gerade solch ein Umgehen von Schutztechniken verhindern, daher enthalten die Kernel nahezu aller großen Distributionen schon lange Vorläufer der jetzt integrierten Lockdown-Patches. Letztere setzen aber etwas anders an, denn um Kritiker zufrieden zu stellen, wurden der Code zwischenzeitlich angepasst, um wie SELinux, AppArmor & Co. als Linux Security Module (LSM) beim Kernel anzudocken.

Außerdem lässt sich der Lockdown jetzt auch vollkommen unabhängig von UEFI Secure Boot nutzen, um ein Ausprobieren zu erleichtern und die Sicherheit auch unabhängig von solchen Firmware-Mechanismen verbessern zu können. Der Lockdown macht es dadurch etwa Root-Kits schwerer, sich tief einzunisten und dabei so gut zu verstecken, dass man den Schadcode nur schwer entdecken kann.

Durch die Umbauten kam auch der Kernel-Parameter lockdown={integrity|confidentiality} und die Sysfs-Datei /sys/kernel/security/lockdown hinzu, über die man das Verhalten steuern kann, sofern Firmware-, Boot-Loader sowie Lockdown-Konfiguration das denn erlauben.

Wie so häufig bringt auch dieser Sicherheitsgewinn einige Nachteile und Einschränkungen mit. So blockieren gängige Lockdown-Konfigurationen einige Funktionen, die manche Anwender sehr schätzen. Darunter ist etwa der Ruhezustand (Hibernate) oder die Möglichkeit, lokal für Distributionskernel kompilierte Kernel-Module nachzuladen, ohne sie zu signieren und Verifikationsschlüssel zu hinterlegen.

Details zum Ganzen finden sich im Merge Commit zu den Lockdown-Patches, einigen der darüber eingeflossenen Commits (u. a. 1) und dem LWN.net-Artikel "Lockdown as a security module".

Über den neuen I/O-Controller Blk-Iocost können Admins besser regeln, wie stark die einer Prozessgruppe zugeordneten Prozesse die Storage-Hardware eines Systems befeuern dürfen. Damit lässt sich etwa verhindern, dass ein Container die Festplatten oder SSDs so stark mit Anfragen beschäftigt, dass andere Prozesse kaum mehr zum Zug kommen und dadurch letztlich extrem langsam laufen.

Für diese Problematik gibt es bereits I/O-Controller. Sie weisen allerdings allerlei bekannte Schwächen auf, die der von einem Facebook-Entwickler eingebrachte Blk-Iocost zu vermeiden verspricht. Mit diesem Cgroup-v2-Controller lässt sich beispielsweise das Leistungspotenzial der Datenträger leichter ausschöpfen, denn er drosselt erst, wenn tatsächlich Engpässe entstehen.

Weitere Details nennt der Kommentar zum Commit mit Blk-Iocost und der darin enthaltenen Erweiterung einer Dokumentationsdatei. Sie beschreibt die für Blk-Iocost eingeführten Cgroup-v2-Konfigurationsschrauben io.cost.qos und io.cost.model. Einige weitere Hintergründe zum Ansatz erläutert ein Artikel bei LWN.net, der noch aus einer Zeit stammt, als der Ansatz noch "Io.Weight Controller" hieß.

Das neue Virtio-Fs stellt einen weiteren Weg zur Verfügung, über den virtuelle Maschinen (VMs) ausgewählte Dateien oder Verzeichnisse des Hosts in ihrem Dateisystem bereitstellen können. Laut den Entwicklern soll die Lösung bald in VMs eine Zugriffsperformance erzielen, die nahe an die heranreichen soll, die beim Zugriff direkt auf dem Host erzielt wird.

Die Entwickler wollen mit Virtio-Fs das Plan 9 Filesystem Protocol (p9) zugleich ausstechen und beerben, das bislang meist für das Einbinden genutzt wird. Der neue Ansatz wurde nicht von Grund auf neu entwickelt, sondern verwendet Teile des Codes von FUSE (Filesystem in Userspace) wieder. Weitere Details zum neuen Dateisystem finden sich in einem Merge-Commit-Kommentar, dem Commit mit dem Kern von Virtio-Fs und der begleitenden Dokumentation. Noch mehr Einblicke liefern die Vortragsfolien oder die Videoaufzeichnung eines kürzlich auf dem KVM Forum 2019 gehaltenen Vortrags zu Virtio-Fs:

Aktueller Vortrag zu Virtio-Fs.

Das neue Device-Mapper-Target Dm-Clone kann in Sekundenschnelle einen Klon eines Device-Mapper-Volumes anlegen, der sofort nutzbar ist und die Daten nach und nach im Hintergrund vervielfältigt. Die Funktion ist dazu gedacht, um auf die Schnelle eine lokale VM auf Basis eines im Netz liegenden VM-Datenträger-Images zu erzeugen. Darüber hinaus gab es beim Device Mapper noch einen Schwung kleinere Optimierungen und Verbesserungen.

IO-Uring erhielt allerlei Feinschliff (u.a. 1, 2, 3). Das verbessert die Performance des modernen und jüngst bei Linux 5.1 integrierten IO-Interface für asynchrone Datenträgerzugriffe und rüstet zugleich eine Timeout-Funktion nach. Einige weitere seit der Einführung von IO-Uring vorgenommene Verbesserungen hat der zuständige Entwickler jüngst in einem Dokument zusammengefasst.

Google-Entwickler haben Fs-Verity eingebracht, mit dem sich die Integrität von Dateien in schreibgeschützten Ext4- und F2FS-Dateisystemen sicherstellen lässt. Das soll offenbar bei Android zum Einsatz kommen, um das Basissystem vor Modifikationen zu schützen. Details zum Ansatz erläutern einige Commits von Fs-Verity (1, 2, 3, 4, 5, 6, 7), die begleitende Dokumentation und der LWN.net-Artikel "Yet another try for fs-verity".

Ab Linux 5.4 kann der Kernel endlich auch die NVMe-Datenträger ansprechen, die Apple in seine seit 2018 eingeführten Systeme einbaut. Die dazu nötigen Änderungen entstanden per Reverse Engineering; sie waren unter anderem nötig, weil Apples NVMe-Implementierung einige Macken hat, die der normalerweise generische NVMe-Treiber jetzt mit einer Soderbehandlung abfängt (u. a. 1, 2).

Über den neuen Kernel-Parameter cifsroot= kann man den CIFS-Code jetzt anweisen, beim Start eine Samba- oder Windows-Freigabe als Root-Dateisystem einzubinden.

Unter den Änderungen an F2FS waren welche, durch die das für simple Flash-Datenträger entwickelte Dateisystem fortan die Groß- und Kleinschreibung per Casefolding ignorieren kann, wie es Ext4 jüngst bei Linux 5.2 gelernt hat.

Das Read-only-Dateisystem EROFS, das Huawei bei einigen Android-Geräten statt Squashfs verwendet, ist weiter gereift; dadurch konnte EROFS jetzt den Staging-Bereich hinter sich lassen, in dem Code mit bekannten Qualitätsmängeln im Rahmen der normalen Entwicklung auf Vorderman gebracht wird. Dieser Aufstieg war genau wie die Aufnahme des exFAT-Codes sehr umstritten, wie der LWN.net-Artikel "On-disk format robustness requirements for new filesystems" erläutert.

Die Linux-Entwickler sind zudem zahlreiche Design-Schwächen in der Infrastruktur Fs-Crypt angegangen, mit der Ext4 und F2FS Dateien verschlüsseln können (u. a. 1, 2, 3, 4, 5).

Einige weitere relevante Änderungen rund um Storage-Support und Dateisysteme nennen die Kommentare, die sich in den wichtigsten Merge Commits der Subsysteme Block Layer (1, 2, 3), Btrfs, Ceph, CIFS/SMB, Ext4, FUSE, GFS, Libnvdimm, NFS, NFSd, SCSI, VFS (Y2038) und XFS (1, 2) finden.

Der Amdgpu-Treiber von Linux 5.4 unterstützt fünf Grafikchips von AMD, die jüngst eingeführt wurden oder in nächster Zeit auf den Markt kommen sollen. Darunter sind die Navi14-GPUs (1, 2, 3) der Anfang Oktober angekündigten Radeon-Serie RX 5500, die noch in diesem Jahr in den Handel kommen soll. Auf dem Kernel-Support aufbauende Treiber zur 3D-Beschleunigung via OpenGL und Vulkan sowie Video-Beschleunigungstreiber bringt Mesa 19.2 bereits mit; das im Dezember erwartete Mesa 19.3 unterstützt diese Chips noch besser.

Bei Linux 5.3 stieß Support für die AMD Radeon RX 5700 zum Kernel, mit 5.4 folgt Unterstützung für einige andere Karten der 5000er-Serie. (Bild: Carsten Spille/c't)

Neben dem Navi14 spricht Linux jetzt auch den eng verwandten Navi12 (u. a. 1) sowie die Arcturus-GPU (u. a. 1, 2, 3, 4) an. Letztere beruht wohl auf der älteren Vega-Architektur und soll vermutlich auf Beschleunigerkarten zum GPGPU (General Purpose Computation on Graphics Processing Units) sitzen.

Darüber hinaus unterstützt der Kernel auch schon die Grafikeinheit der mit Zen2-Kern ausgestatteten Renoir-Prozessoren (u. a. 1, 2, 3, 4). Berichten zufolge will AMD diese Anfang 2020 als Ryzen 4000U/H einführen, die auf Desktop-PCs und Notebooks zielen. Ferner unterstützt Linux auch schon die GPU von Dali-Prozessoren – offenbar eine Weiterentwicklung der Raven-Ridge-CPUs, die AMD für Mobilgeräte und Billig-Systeme vorsieht.

Der Navi14-Support ist standardmäßig aktiv, was einer Anpassung zu verdanken ist, die erst zwei Tage vor der Freigabe von Linux 5.4 vorgenommen wurde. Der Support für die vier anderen erwähnten GPUs gilt hingegen noch als experimentell. Man muss ihn daher explizit über einen Modul-Parameter aktivieren, etwa indem man Linux beim Start den Parameter amdgpu.exp_hw_support=1 mitgibt.

Der Amdgpu-Treiber nutzt jetzt wieder "bulk moves", was die Grafikperformance in manchen Fällen verbessern kann.

Um die Leistungsaufnahme im Mehrschirmbetrieb zu reduzieren, senkt der Treiber jetzt den Takt des Grafikspeichers automatisch, sofern alle Monitore denn synchron laufen. Falls sie das nicht tun, kann man das Verhalten über den Boot-Parameter amdgpu.dcfeaturemask=2 veranlassen. Wie viel das Ganze spart, hängt von der Grafikkarte ab; Berichten und einem Kurzversuch zufolge lassen sich damit im Leerlauf manchmal 20 bis 30 Watt sparen, was auch die Lüfter entlastet und so den Geräuschpegel senkt.

Über geringere Leistungsaufnahme und somit längere Akkulaufzeit dürfen sich auch Besitzer des Dell Latitude 5495 freuen: Der Kernel bringt jetzt eine Sonderbehandlung für eine Marotte ("Quirk") dieses Notebooks mit, durch die es dessen diskreten AMD-Grafikchip bei Nichtverwendung jetzt endlich schlafen legen kann.

Intels Entwickler haben den Grafiktreiber i915 und andere Stellen des Kernels um Support für die bislang nur als "Tiger Lake" bekannte Prozessorplattform erweitert. Diese enthält eine neue, "Gen12" genannte GPU-Generation und soll offenbar Intels dieses Jahr eingeführten Ice Lake ("Gen11"-GPU) beerben; anfängliche 3D-Unterstützung für Gen12-GPU wird Mesa 19.3 mitbringen. Zum Kernel stieß ferner auch Code zur Unterstützung des für die Embedded- beziehungsweise IoT-Schiene gedachten "Elkhart Lake".

Der Nouveau-Treiber warnt jetzt, wenn man das Stromkabel anzuschließen vergisst. Außerdem unterstützt der Treiber für GeForce-Karten von Nvidia jetzt die Farbkalibration besser (u. a. 1, 2.).

Darüber hinaus gab es noch eine ganze Reihe anderer Verbesserungen bei den Grafiktreibern. Darunter etwa prozess-spezifische Adressräume bei Etnaviv-Treiber für Vivante-GPUs und allerlei Optimierungen und Feintuning beim Treiber Panfrost, mit dem Linux seit Version 5.2 viele moderne ARM-Mali-GPUs unterstützt.

Details zu diesen und weitere Neuerungen nennt ein Merge-Commit, der die wesentlichen Änderungen bei Grafiktreibern gebracht hat. Dessen Kommentar informiert über die wichtigsten Änderungen bei rund zwei Dutzend Grafiktreibern. Hinter dem Merge-Commit stecken über tausende weitere Commits mit Änderungen an 1621 Quellcodedateien, die 262.504 Codezeilen hinzufügen und 38.411 entfernen.

Der Treiber R8169 spricht jetzt auch Realteks 2.5-GBit/s-Ethernet-Chip RTL8125 an. Der bei Linux 5.2 aufgenommene Treiber Rtw88, der für die 802.11ac-WLAN-Chips RTL8822BE und RTL8822CE von Realtek zuständig ist, aktiviert jetzt auch deren Bluetooth-Funktion.

Der Thunderbolt-Treiber unterstützt jetzt den Controller, den einige im Spätsommer angekündigten Ice-Lake-CPUs von Intel enthalten.

Die Eingabegerätetreiber bringen Support für die Logitech Laser-Gaming-Mouse G700 und das von ihr verwendete Logitech-Wireless-Interface "Lightspeed" mit. Linux versteht sich jetzt auch mit der Tastatur von Microsoft-Surface-Geräten der fünften und sechsten Generation. Der Treiber für Zeichentabletts von Wacom unterstützt jetzt auch das MobileStudio Pro 13. Neu dabei ist auch ein Treiber für den IR-Empfänger SB0540, den Creative als Add-On für manche Audigy-Soundkarte verkauft hat. Außerdem bringt Linux jetzt einen Joystick-Treiber für den FlySky FS-iA6B RC Receiver mit, mit dem sich beispielsweise der Flugsimulator Flightgear über die FlySky-Fernbedienungen bedienen lässt, die zur Steuerung von Drohnen oder Modell-Helikoptern und -Flugzeugen gedacht sind.

Flightgear mit der FlySky-Fernbedienung FS-i6 RC steuern.

Die Entwickler wollen den Support für Wireless USB (WUSB) hinauswerfen: Entsprechende Hardware ist ihrer Auffassung nach nicht mehr im Einsatz und der Quellcode daher Ballast, der die Weiterentwicklung erschwert. Die Kernel-Macher haben den Code daher in den Staging-Bereich verschoben und warten bis zum eigentlichen Rauswurf jetzt einige Wochen oder Monate, um zu sehen, ob jemand Einspruch erhebt.

Der Thinkpad-Treiber unterstützt jetzt die PrivacyGuard genannte Funktion. Diese findet sich bei einigen Lenovo Thinkpads der Serien T480s, T490 und T490s; sie soll etwa im Zug vor neugierigen Blicken von der Seite schützen, indem sie den Monitor in eine stark blickwinkelabhängige Betriebsart schaltet, damit Inhalte nur direkt von vorn klar erkennbar sind.

Die in den oberen Absätzen beschriebenen Optimierungen und Erweiterungen beim Hardware-Support sind nur die Spitze des Eisbergs, denn alle aufzuzählen würde den Rahmen sprengen: Allein durch neue und verbesserte Treiber unterstützt Linux 5.4 über 400 Geräte oder Geräteklassen mehr als sein Vorgänger; bei rund 150 davon handelt es sich um PCI/PCIe-Geräte, wie die Datenbanken der Linux Kernel Driver DataBase (LKDDb) zeigen.

Weitere Neuerungen rund um Treiber nennen die Kommentare der wichtigsten Commits für die Subsysteme Char, Driver-Core, EDAC, Hardware-Monitoring, Human Input Devices, Input, Media, Platform Drivers, Rdma, Sound, Soundwire, Staging, TTY, USB und Watchdog. Das sind übrigens längst nicht alle größeren Merges rund um Hardware-Support und Treiber, sondern nur jene, die der Autor für erwähnenswert hielt. Dutzende weitere haben diese Hürde nicht geschafft; ähnlich verhält es sich mit verschiedenen Aufzählungen an anderer Stelle dieses Kernel-Logs.

Linus Torvalds, der dieser Tage nur noch selten eigenhändig größere oder signifikante Kernel-Änderungen für der Linux-Kernel entwickelt, hat ausnahmsweise selbst eine umfangreichere Änderung am Zufallszahlengenerator des Kernels vorgenommen. Damit generiert der Pseudo Random Number Generator (PRNG) bei Engpässen nun neue Zufallszahlen mithilfe von Entropie, die er selbst erzeugt, indem er Prozessorbefehle absetzt und deren Ausführungsdauer mit CPU-Cycle-Countern misst.

Diese Änderung geht ein in der Endphase der 5.3-Entwicklung viel diskutiertes Problem an: Nach einer Optimierung am Ext4-Code kam der Startvorgang bei einigen Anwendern ins Stocken, weil plötzlich nicht mehr genug Entropie erzeugt wurde und Userspace-Anwendungen dadurch endlos auf neue Zufallszahlen warteten. Der für den Generator zuständige Entwickler und Torvalds kamen zu der Zeit in längeren Diskussionen nicht zu einer adäquaten Problemlösung, woraufhin der Linux-Vater die Ext4-Optimierung wenige Tage vor der Fertigstellung von 5.3 überraschend entfernte.

Als im folgenden niemand eine Lösung vorantrieb, schritt Torvalds schließlich am Ende der Hauptentwicklungsphase von Linux 5.4 kurzerhand selbst zur Tat: Er setzte die von ihm vorgeschlagene Entropie-Erzeugung über Cpu-Cycle-Counter direkt im Hauptentwicklungszweig um und überging dabei die sonst übliche öffentliche Vorabbegutachtung vollkommen. Direkt danach pflegte er dann auch die Ext4-Optimierung wieder ein. Kurz darauf ließ er auf der Mailingliste durchblicken, durch sein direktes und weitgehend unabgesprochenes Vorgehen vielleicht andere Entwickler zu motivieren, einen noch besseren Ansatz zu entwickeln – was aber nicht passierte, daher bleibt jetzt vorerst alles, wie es ist. Weitere Details dazu finden sich im LWN.net-Artikel "Really fixing getrandom()".

Die neuen Symbol Namespaces könnten über kurz oder lang auch ein Problem für Entwickler externer Treiber werden – egal ob proprietär oder Open Source. Über die Symbol Namespaces können die Kernel-Programmierer nämlich die Verfügbarkeit der Symbole einschränken, über die Kernel-Module einzelne ihrer Funktionen exportieren können, damit Code anderer Kernel-Module auf diese zurückgreifen können.

Beispielhaft implementiert wurde solch ein Namespace bei den USB-Storage-Treiber: Code, der deren Funktionen nutzen will, muss sie daher jetzt über MODULE_IMPORT_NS(USB_STORAGE); explizit einbinden, sofern die neue Bauoption CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS denn beim jeweiligen Kernel-Image gesetzt ist. Prinziell kann man die Symbol Namespaces aber auch nutzen, um bestimmte Symbole nur zur internen Nutzung freizugeben, was zu einer Hürde für unabhängig gewartete Kernel-Module werden könnte.

Details zu diesem Thema finden sich in einigen Commit-Kommentaren (u. a. 1, 2, 3), der Dokumentation und dem LWN.net-Artikel "Kernel symbol namespacing".

Nachdem bei Linux 5.3 klargestellt wurde, dass Linux bald von Haus aus Echtzeitfähigkeiten bieten soll, folgten bei Kernel 5.4 einige im PREEMPT-RT-Zweig vorangetriebene Umbauten und Erweiterungen, um diesem Ziel näher zu kommen (u. a. 1, 2, 3, 4, 5, 6). Eines der wichtigen Features, was zum Realtime-Support noch fehlt, ist eine neue Printk-Infrastruktur, die sicherstellt, dass beim Protokollieren von Kernel-Ereignissen keine langen Wartezeiten entstehen. Von den dafür nötigen Umbauten ist bislang aber nicht viel zu sehen, daher dürften sie frühestens bei Linux 5.6 folgen.

Das "Scheduler Utilization Clamping" lässt sich jetzt auch über Control Groups (Cgroups) steuern; über diese kurz Uclamp genannte und bei Linux 5.3 nachgerüstete Technik können Admins oder Entwickler einzelne Programme speziell auszeichnen, um deren Reaktionsfreude zu steigern oder die Leistungsaufnahme des Systems im Zaum zu halten.

Mit dem neuen P_PIDFD-Flags des Syscall waitid() können Prozess-Management-Programme jetzt auf Prozesse warten, um so automatisch über deren Ableben zu erfahren und dabei auch dessen Rückgabewert zu erhalten. Mit dieser und einigen zugehörigen Änderungen ist die Basis des neuen Pidfs-APIs jetzt komplett; Christian Brauner hat es im Verlauf der letzten zwei Jahre vorangetrieben, um das Prozess-Management und damit auch den Container-Betrieb robuster zu machen. Details hierzu liefern die LWN.net-Artikel "Completing the pidfd API" und "Adding the pidfd abstraction to the kernel". Letzterer fasst einen Vortrag zusammen, von dem sowohl Vortragsfolien als auch eine Videoaufzeichnung frei abrufbar sind:

Jüngst zum neuen Pidfs-API gehaltener Vortrag.

Die Kernel-Dokumentation liefert jetzt Hinweise zum reproduzierbaren Bau ("Reproducible Build") von Linux. Bei so einem Bauprozess entsteht beim wiederholten Übersetzen stets ein bitgleiches Resultat, daher kann man damit untersuchen, ob ein vorliegender Kernel tatsächlich aus einem bestimmen Quellcode entstanden ist.

Einige Umbauten versprechen die Performance der Vsock-Infrastuktur deutlich zu verbessern, über die bei Virtualisierung der Host und sein Gast effizient kommunizieren können.

Zwei Erweiterungen sollen aktiven Android-Apps zu mehr Arbeitsspeicher verhelfen. (Bild: Folien eines LPC2019-Vortrags )

Android-Entwickler haben einige Änderungen beigesteuert, mit denen sie die Performance und den Start von Apps beschleunigen wollen. Dazu rüsten die Patches die madvise()-Flags MADV_COLD und MADV_PAGEOUT nach. Mit ihnen kann das Smartphone-Betriebssystem dem Kernel einige Hinweise auf Arbeitsspeicherbereiche von Programmen geben, die höchstwahrscheinlich in naher Zukunft ohnehin nicht benötigt werden, weil die Anwendung vielleicht gerade geschlossen wurde; dadurch kann der Kernel die Arbeitsspeicherinhalte bei Bedarf früher verwerfen und so Platz für wichtigere Dinge schaffen.

Mit Linux 5.4 scheinen auch endgültig Streitereien um einen Patch zu Ende zu gehen, der die transparente Handhabung großer Speicherseiten (Transparent Hugepages/THP) zu optimieren versuchte. Er wurde bereits einmal aufgenommen und nach Beschwerden eines Entwicklers wieder entfernt, nach mehreren Monaten und allerlei Diskussionen aber jüngst bei Linux 5.3 erneut eingepflegt. Details hierzu erläutert LWN.net im Artikel "Dueling memory-management performance regressions". Der Kritiker meldete sich erneut zu Wort und fand schließlich zusammen mit den zuständigen Entwicklern und Linus Torvalds eine für alle zufriedenstellende Lösung – in dem Zug wurde der Patch dann aber ein zweites Mal hinausgeworfen, was zur leicht verwirrenden Commit-Überschrift 'Revert "Revert "Revert "mm, thp: consolidate THP gfp handling into alloc_hugepage_direct_gfpmask""'' führte.

Einige weitere Neuerungen rund um Infrastruktur des Kernels nennen die wichtigsten Merge-Commits der Bereiche ACPI, Compiler-Attributes, Dokumentation, EFI, Heterogeneous Memory Management (HMM), Kbuild, Kgdb, PCI, Perf, Power-Management, RCU, Prozess-Scheduler, Tracing und Vfio.

Die Kernel-Entwickler haben große Teile einer "Compile Once, Run Everywhere" (CO-RE) genannten Infrastruktur für die BPF Virtual Machine integriert. Damit sollen einige BPF-Programme bald nicht mehr nur mit dem Kernel laufen, für den sie kompiliert wurden, sondern mit ganz verschiedenen harmonieren. Das sollte vor allen den universellen Einsatz von Performance-Analyse- beziehungsweise Tracing-Werkzeugen ermöglichen, die sich die mächtige BPF Virtual Machine zunutze machen. Solche Programme brauchen für ihre Arbeit allerdings einige Kernel-spezifische Informationen, die sie ab jetzt aus den seit Linux 5.2 unterstützten Datenstrukturen holen können, die sich das bei Linux 4.18 eingeführte BPF Type Format (BTF) zunutze machen. Details zum Ganzen erläutern die Folien von Vorträgen, die auf der Linux Plumbers Conference (LPC) 2018, der Bpfconf 2019 oder der Linux Plumbers Conference (LPC) 2019 gehalten wurden.

Apropos BTF: Über /sys/kernel/btf/ exportiert der Kernel jetzt Informationen zu BTF-Datenstrukturen sowie darin gespeicherten Daten.

Für Netzwerkverbindungen, die der Kernel mit Programmen für den Netzwerk-Schnellverarbeitungsweg eXpress Data Path (XDP) verarbeitet, können XDP-Programme den BPF nun SYN-Cookies erzeugen lassen, die beim Schutz vor Denial-of-Service-Angriffen mit SYN-Flooding helfen.

Weitere Änderungen rund um Netzwerk-Support nennt der wichtigste Merge-Commit dieses Subsystems.

Eine ganze Reihe aktueller 64-Bit-Windows-Spiele, die bislang auf den neuesten AMD- und Intel-Prozessoren mit Wine & Co. bocken, sollen ab Linux 5.4 laufen: Diese Kernel-Version zäumt die Sicherheitstechnik UMIP (User Mode Instruction Prevention), die diese CPUs bieten und die daher dort dazwischenfunkt.

Linux kann jetzt die Temperatur von Ryzen-3000-Prozessoren auslesen. Außerdem gibt der zuständige Treiber k10temp bei einigen CPUs jetzt auch eine zweite Temperatur aus, die für die Lüftersteuerung relevant sein kann.

Einige Detail-Optimierungen am Prozess-Scheduler sollen die Performance von Systemen mit zwei oder mehr AMD EPYC verbessern.

Bei modernen Intel-Prozessoren kann man den Wert TCC (Thermal Control Circuitry) jetzt über Dateien wie /sys/bus/pci/drivers/proc_thermal/0000\:00\:04.0/tcc_offset_degree_celsius lesen und manuell anpassen, sofern das jeweilige System das erlaubt. Darüber kann man die Performance verbessern, wenn das BIOS den Wert unnötig konservativ setzt, wie es etwa bei einige BIOSen von Thinkpad-X1-Extreme-Modellen passiert. Alternativ kann man den Prozessor darüber aber auch früher drosseln lassen, um das System kühler zu halten.

Neu dabei ist auch Basis-Support für den Qualcomm Snapdragon 855, der in einigen mit Windows ausgelieferten ARM-Notebooks sitzt (u. a. 1). Vorgänger des 855 sitzen in den Geräten Asus NovaGo TP370QL, HP Envy X2, Lenovo Miix 630 und Lenovo Yoga C630, die Linux jetzt unterstützt – teilweise aber nur rudimentär.

Ebenfalls neu: Support für den ASpeed AST2600, der als Baseboard Management Controller (BMC) auf einigen Server-Boards sitzt und Fernwartung ermöglicht. Darüber hinaus lernt Linux mit Version 5.4, zahlreiche weitere System-on-Chip (SoC) und damit gebaute Systeme zu unterstützten; darunter der Allwinner V3, der Mediatek MT7629, der NXP i.MX8M Nano und einige andere, die der gut dokumentierte Commit-Kommentar zu ARM-DT-Updates nennt.

Auch der KVM-Hypervisor unterstützt jetzt die x86-Instruktionen UMONITOR, UMWAIT und TPAUSE, die Linux seit 5.3 kennt und Intel bald bei Server-Prozessoren implementieren will. Mit ihnen können VM und darin laufende Software kurzzeitig warten, belasten dabei die CPU aber nicht mit unnützer Arbeit, wie es die bislang für kurzes Warten oft verwendeten Busy Loops tun. Details dazu liefert der LWN.net-Artikel "Short waits with umwait".

Eine weitere Änderung verspricht die Performance zu verbessern, wenn man mit KVM auf einem System virtualisiert, das unterhalb von Hyper-V läuft (Nested Virtualization). Weitere Neuerungen rund um KVM nennen zwei Merge Commits (1, 2).

Der neue "Haltpoll Treiber" und der darauf aufbauende "Cpuidle Haltpoll Governor" können eine eigentlich untätige CPU noch eine Weile beschäftigt halten, bevor der Kernel sie schlafen legt. Das erhöht naturgemäß die Leistungsaufnahme, kann laut den Entwicklern aber in manchen Situationen die Performance verbessern – insbesondere beim Einsatz in VMs, weil es das vorübergehende Wegschalten von der VM (den VM-Exit) reduzieren kann.

Unter den Änderungen an der s390-Architektur war Unterstützung für IBMs z15-Systeme.

Die Kernel-Entwickler haben die Performance des Treibers verbessert, der sich beim Raspberry Pi um das SPI (Serial Peripheral Interface) kümmert (1, 2). Apropos Raspi: Vieles deutet derzeit darauf hin, dass Linux 5.5 Basis-Unterstützung für den Raspberry Pi 4 bringen wird (u. a. 1, 2).

Einige weitere Änderungen am Architektur-Support nennen die wichtigsten Merge-Commits für die Subsysteme ARM64, IA64, ARM (Core, Driver, LAte, SoC defconfig), MIPS, Parsic, PPC, RISC-V (1, 2), UML, x86 (ASM, CPU, VMware).

Linux 5.4 wird mindestens zwei Jahre gewartet. (Bild: Screenshot von kernel.org )

Die neue Kernel-Version wird nach derzeitiger Planung ein "Longterm Kernel". Solche landläufig manchmal auch LTS-Kernel genannte Versionsreihen pflegen die Linux-Entwickler nicht nur rund dreieinhalb Monate, sondern mindestens zwei Jahre. In letzter Zeit wurde der Supportzeitraum bei den meisten Longterm-Kerneln aber später noch auf sechs Jahre ausgedehnt. Ob das bei 5.4 der Fall sein wird, ist noch nicht absehbar.

Mit der Freigabe von Linux 5.4 beginnt zugleich die "Merge Window" genannte Phase, in der Linus Torvalds das Gros der Änderungen für den Nachfolger integriert. In den nächsten Tagen fließen daher viele tausend Patches in den Hauptentwicklungszweig von Linux ein, die Entwickler in den letzten Wochen zur Aufnahme in 5.5 vorbereitet und gesammelt haben.

Unter diesen Patches sind Änderungen am Krypto-Subsystem, die alles Wesentliche nachrüsten, was die populäre VPN-Technik Wireguard braucht. Dessen Kernel-Teile wurden kürzlich auf die so geschaffene Krypto-Infrastruktur angepasst und für eine grobe Erstbegutachtung an die Entwickler des Netzwerk-Subsystems von Linux geschickt. Eine Einreichung zum ordentlichen Review soll folgen. Da die Zeit knapp wird, ist es derzeit eher unwahrscheinlich, dass Wireguard schon in 5.5 einzieht – es ist aber durchaus noch im Bereich des Möglichen, falls die Entwickler des Netzwerkcodes nicht viel zu kritisieren finden.

Linus Torvalds beendet die Aufnahme aller wesentlichen Änderungen typischerweise nach zwei Wochen, indem er die erste Vorabversion einer neuen Kernel-Version veröffentlicht. Das beendet das Merge Window und läutet zugleich die Stabilisierungsphase ein, die derzeit fast immer sieben oder acht Wochen dauert. Linux 5.5 erscheint daher wahrscheinlich am 27. Januar oder 3. Februar 2020.

Kernel-
Version
Anzahl
Dateien¹
Zeilen
Quelltext
(Ohne
Doku)²
Entwick-
lungs-
zeitraum
Commits
(Ohne
Merges)³
Diffstat⁴
Linux 4.18 61.003 25.280.872
(23.183.236)
70 Tage 14.432
(13.283)
13.141 files changed,
583.336 insertions(+),
682.028 deletions(-)
Linux 4.19 61.734 25.588.455
(23.449.221)
70 Tage 15.204
(14.043)
11,693 files changed,
552.223 insertions(+),
244.235 deletions(-)
Linux 4.20 62.481 25.955.520
(23.776.585)
63 Tage 14.995
(13.844)
11402 files changed,
685.027 insertions(+),
317.959 deletions(-)
Linux 5.0 63.135 26.203.035
(23.933.016)
70 Tage 13.921
(12.808)
12.100 files changed,
579.084 insertions(+),
331.570 deletions(-)
Linux 5.1 63.873 26.459.776
(24.141.004)
63 Tage 14.160
(13.034)
11.977 files changed,
545.423 insertions(+),
288.683 deletions(-)
Linux 5.2 64.587 26.552.127
(24.175.296)
63 Tage 15.089
(14.024)
30.888 files changed,
624.857 insertions(+),
532.510 deletions(-)
Linux 5.3 65.261 27.141.312
(24.708.822)
70 Tage 15.784
(14.605)
13.983 files changed,
1.189.832insertions(+),
600.665 deletions(-)
Linux 5.4 65.701 27.538.212
(25.059.661)
70 Tage 15.725
(14.619)
12.800 files changed,
821.993 insertions(+),
435.081 deletions(-)
¹ git ls-tree -r --name-only HEAD | wc -l
² find . -type f -not -regex '\./\.git/.*' | xargs cat | wc -l; echo "($(find . -name *.[hcS] -not -regex '\./\.git/.*' | xargs cat | wc -l))"
³ git-log --pretty=oneline vx.(y-1)..vx.(y) | wc -l; echo "($(git-log --pretty=oneline --no-merges vx.(y-1)..vx.(y) | wc -l))"
⁴ git diff --shortstat vx.(y-1)..vx.(y)

Den neuen Linux-Kernel herunterladen und einrichten

In den ersten Stunden nach der Freigabe steht die neue Linux-Version nur über einen Git-Checkout des "Mainline" genannten Hauptenwicklerzweigs von Linux bereit; die Download-Möglichkeit über die Frontseite von Kernel.org folgt meist erst, wenn sich die Büros in Europa richtig füllen und jemand die Archive signiert hat.

Auf Kernel.org findet sich auch eine Anleitung, wie Sie die Authentizität und die Unversehrtheit des Quelltextes von Linux prüfen; dort gibt es auch ein Skript, das eine Version herunterlädt und diese Aufgaben durchführt.

Fedora und Rolling-Release-Distributionen wie Arch Linux, Gentoo und OpenSuse Tumbleweed erhalten die neue Linux-Version in den nächsten Tagen und Wochen im Rahmen der regulären Systemaktualisierung. Bei bereits erhältlichen oder kurz vor der Veröffentlichung stehende Releases von Debian, OpenSuse Leap, Ubuntu und den meisten anderen klassisch gewarteten Distributionen macht der Kernel normalerweise keine größeren Versionssprünge; deutlich neuere Linux-Versionen erhält man dort meist nur beim Wechsel auf eine neuere Version der Distribution.

Einzelne Distributionen werden den neuen Kernel über Backports-Repositories zur einfachen Installation anbieten. In der Regel sind solche aber standardmäßig inaktiv, weil dort andere Pflegerichtlinien gelten; Sicherheitskorrekturen beispielsweise gibt es dort meist zeitnah, werden aber vielfach nicht garantiert.

Bei vielen populären Distributionen wird man die neue Linux-Versionen auch über Kernel-Pakete aus Repositories nachrüsten können, die Fans oder Entwickler pflegen. Anwender sollten sich bewusst sein, dass sie über solche Angebote den zentralen Baustein ihrer Distribution austauschen. Wer solche Repositories verwendet, sollte deren Machern daher ähnlich trauen wie seinem Distributor, denn über darin liegende Pakete lassen sich kinderleicht Hintertüren einschleusen. Nach dem Einbinden solcher Repositories obliegt es zudem den Machern dieser Depots, die ausgetauschten Pakete fortan mit Sicherheitskorrekturen zu versorgen. Das vorübergehende oder dauerhafte Aktivieren solcher Repositories kann zudem zu Abhängigkeitsproblemen bei späteren Updates der Distribution führen. Da zentrale Software ausgetauscht wird, kann es zudem leicht zu Instabilitäten kommen; im dümmsten Fall startet das ganze System nicht mehr.

Wer die neue Linux-Version eigenhändig kompilieren und einrichten will, findet Hinweise dazu im c't-Artikel "Linux-Kernel maßgeschneidert". Das darin beschriebene Make-Target make localmodconfig erzeugt weitgehend automatisch eine recht gut auf das jeweilige System zugeschnittene Kernel-Konfiguration, mit der Sie in wenigen Minuten eine neue Linux-Version einrichten können.

Allerlei weitere Informationen zu Linux liefern der erste, zweite, dritte und vierte Teil einer c't-FAQ-Reihe mit "Basiswissen zum Linux-Kernel".

Versionshistorie dieses Artikels

  • 2019-11-25, 06:30 – v2.0: Highlight-Überblick vorne eingefügt und Text umstrukturiert, damit etwa die wichtigsten Neuerungen vorne stehen. Text angepasst, um zu erwähnen, dass der Radeon-RX-5500-Support doch nicht experimentell ist.
  • 2019-11-21, 06:30 – v1.3: Verbesserungen rund um Infrastruktur, Sicherheit und Netzwerk hinzugefügt
  • 2019-11-19, 06:30 – v1.2: Änderungen bei Treibern und Architektur-Unterstützung beschrieben
  • 2019-11-14, 06:30 – v1.1: Neuerungen bei Storage und Dateisystemen näher erläutert
  • 2019-10-01, 06:50 – v1.0: Anlässlich der ersten Vorabversion von Linux 5.4 die Highlights dieser Kernel-Version kurz angerissen.

Der Newsticker von heise online erwähnt alle größeren Texterweiterungen, auf die auch der Twitter-Account @kernellog hinweist.

(thl)

Kommentare

Kommentare lesen (192 Beiträge)