Linux 5.5: Erster Linux-Kernel für 2020 veröffentlicht

Seit einiger Zeit gibt es Zoff zwischen Linus Torvalds und dem Entwickler von Bcachefs, Kent Overstreet.

Auf der Kernel-Mailingliste gab Chefentwickler Linus Torvalds gestern den ersten Linux-Kernel im neuen Jahr frei, der die Versionsnummer 5.5 trägt.

Die Entwickler von Dateisystemen, insbesondere von Btrfs und Cifs, warten im aktuellen Release-Zyklus wieder mit neuen und interessanten Features auf. Btrfs erlaubt neuerdings RAID1-Setups mit drei oder vier Kopien. Bei RAID1C34 handelt es sich um ein neues Blockgruppen-Profil. Der Btrfs-Entwickler Sterba empfiehlt in seiner Release-Nachricht, RAID1C34 als Ersatz für das RAID6-Profil für Metadaten zu verwenden, um sich besser gegen Ausfälle von zwei Geräten zu wappnen.

Außerdem unterstützt Btrfs neue Checksummen, die sich beim Anlegen der Dateisysteme erzeugen lassen: Fast Hash (“xxhash”) und Strong Hash (“sha256” und “blake2b”). Nicht zuletzt arbeitet “lseek” schneller, was parallele Suchvorgänge (“SEEK_CUR”/”SEEK_SET”/”SEEK_END”) bis zu 80 Prozent beschleunige.

Samba mit Root

Über SMB lassen sich ab Kernel 5.5 auch Root-Dateisysteme mounten. Dazu spendieren die Samba/Cifs-Entwickler ein neues virtuelles Interface namens “/dev/cifs”, das den Kernel anweist, das Root-Dateisystem über das SMB-Protokoll zu mounten. Die Funktion “cifs_root_data()” nimmt dabei die geparsten Informationen über die dafür eingeführte Kommandozeilen-Option “cifsroot=” entgegen. Dann ruft sie für das Kernelmodul “cifs.ko” die Funktion “do_mount_root()” mit den passenden Mount-Optionen auf.

Auch mit von der Partie ist “ipconfig”: Das Tool richtet den Network Stack ein und ermöglicht dann den Zugriff auf das SMB-Share mit dem Root-Dateisystem. Dafür braucht es die Option “CONFIG_CIFS_ROOT”.

Zugleich bringt Cifs Multichannel-Support mit. Nach einem erfolgreichen Mount und dem Start der SMB-Session, öffnet Cifs über “cifs_try_adding_channels()” möglichst viele Kanäle für zusätzliche Netzwerkverbindungen (über TCP oder RDMA), was den Dateitransfer beschleunigt. Die Master-Connection wird dabei automatisch zum ersten Channel. Beendet der Admin diese Sitzung, schließt das auch sämtliche Channels.

Jeder Channel verwendet nach dem Einbinden einen eigenen Signing Key. Für eine Verschlüsselung loopt “smb2_get_enc_key()” jedoch über alle Sessions, um die passende zu finden, da die Channels selbst keine eigenen Sitzungen aufbauen. Eine maximale Zahl an Channels lässt sich über den Mount-Parameter “max_channels=N” einstellen.

Änderungen an den Dateisystemen betreffen daneben auch Ext 4. Das erlaubt laut Ted Ts’o nun Direct I/O mithilfe der neuen Funktionen “ext4_dio_read_iter()” und “ext4_dio_write_iter()”, die sich über “iomap_dio_rw” in die Iomap-Infrastruktur einklinken. Daneben lassen sich “dioread-nolock” und eine Dateisystem-Verschlüsselung nach Änderungen an Ext4 auch dann verwenden, wenn die Block-Größe kleiner ist als die Page-Größe. Nicht zuletzt habe man am Credit-Handling des Journal gearbeitet, damit diesem bei vielen Revoke-Aktionen nicht mehr der Platz ausgeht.

Ab NFSv4.2 kann ein Client Kopiervorgänge zwischen Servern anstoßen, ohne dass die Daten zwischen Client und Server hin und her wandern müssen. Das beschleunigt die ganze Sache und nennt sich Server Side Copy (SSC). Ceph handelt behandelt ab Kernel 5.5 nur-lesbare Mappings für Rados Block Devices (“rbd”) optimaler und verwendet ein neues Mount-API.

Performance, Testing, BPF

Von Ingo Molnar kommen Updates an Perf: So können LSM (Linux Security Module) und SELinux und den Zugriff auf den “perf”-Systemaufruf blockieren. Auch die Bibliotheken rund um Perf haben Updates erhalten, etwa die Libperf und Libtraceevent. Eine Liste mit aktualisierten Perf-Werkzeugen liefert die Ankündigung.

Mit KUnit erhält der Kernel ein „leichtgewichtiges Framework für Unit-Tests und Mocking“, das sich allerdings nicht für Ende-zu-Ende-Tests eignet. Aktuell lässt es sich nur mit User Mode Linux (UML) und seinen Subsystemen einsetzen, soll aber auf andere Architekturen erweiterbar sein. Auch neu an Bord sein drei KUnit-Tests für “proc sysctl”, doppelt verlinkte Listen und Ext4.

Der Berkley Packet Filter ist eine Art direkt im Kernel ansässige virtuelle Maschine mit den Aufruf-Konventionen der Programmiersprache C. Die JIT-kompilierten BPF-Programme laufen mit wenig Overhead direkt auf der CPU. Auch für diesen Bereich kündigen sich mit Linux 5.5 Optimierungen an.

So darf Kernelcode dank des neu eingeführten BPF-Trampoline “praktisch mit Null Overhead” auf BPF-Programme zugreifen. Der von Alexej Starowoitof eingeführte Mechanismus wirkt als Brücke zwischen Kernelcode, einem BPF-Programm und weiteren BPF-Programmen. Das ermöglicht nicht nur ein kostenfreies Tracing, sondern auch das Beobachten von Netzwerk-bezogenen Programmen ohne Extrakosten. Denn BPF kommt, wie der Name verrät, auch zum Filtern von Netzwerk-Paketen zum Einsatz. Zugleich lassen sich Funktionsargumente des BPF Type Format (BTF) neuerdings mit tatsächlichen Typen vergleichen.

Risc V

Die RISC-V-Entwickler haben im aktuellen Release-Zyklus ebenfalls nicht gekleckert, sondern geklotzt: Zu den von Paul Walmsley gezogenen Features gehören SECCOMP-, Nommu-, und M-Mode-Support. Zudem gibt der Kernel den von den CPU-Kernen unterstützten vollständigen RISC-V ISA-String an den Userspace weiter und behält nicht mehr Teile im Kernel zurück. Darüber hinaus unterstützt das Makefile nun die gängigen Kernel-Kompressionsformate “bzip2”, “lz4”, “lzma” und “lzo”.

Neue Rufnummern

Eric Biederman den “sysctl()”-Systemaufruf aus dem Kernel entfernt. Man sei an einem Punkt angekommen, an dem niemand mehr den entsprechenden Code im Kernel brauche und aktiviere. Übrig bleibt eine Warnung, laut welcher der System Call veraltet ist. Sollte sich Biedermans Eindruck als Falsch herausstellen, ließe sich der entfernte Code problemlos wieder einfügen.

Der Aufruf von “statx()” zeigt hingegen künftig auch ein “fs-verity”-Bit an, was über “FS_VERITY_FL” läuft. Auf dessen Basis stellen Programme mühelos fest, ob eine Datei ein Verity-File ist, ohne sie dafür explizit öffnen zu müssen. Auch hier zeichnet sich also ein Performance-Gewinn ab.

Auch die Arbeit an “clone3()” geht weiter. Der Systemaufruf reicht das TLS-Argument über das “struct clone_args” weiter und nicht über ein Register. Das stört alle Architekturen, die aktuell nicht “copy_thread_tls()” implementieren, sondern noch “CLONE_SETTLS” verwenden.

Ein Patch repariert das Problem für alle Architekturen, die “clone3()” verwenden möchten (laut “__ARCH_WANT_SYS_CLONE3”). Zugleich stellt ein neuer Check beim Kompilieren sicher, dass künftige Architekturen, die “clone3()” einführen wollen, auch “copy_thread_tls()” implementieren.

Verstreutes

Ansonsten finden sich zahlreiche weitere Optimierungen und Änderungen über diverse Subsysteme verstreut. Die “cpuidle”-Einheiten werden jetzt in Nanosekunden, nicht mehr in Mikrosekunden gemessen. Der EFI-RNG-Code für x86-Plattformen liefert eine zusätzliche Quelle an Zufall im frühen Bootstadium. Jiri Pirko hat den Netzwerk-Code um die Möglichkeit ergänzt, alternative Namen für Netzwerkgeräte zu verwenden. Ein neues API hilft dabei, von Livepatch-Callbacks veranlasste Änderungen am Systemzustand zu tracken.

Im Microcode-Bereich ergänzt Borislav Petkov “Late-Loading”-Methode durch paralleles Laden, was vor allem in der Cloud interessant zu sein scheint und das Laden von Microcode beschleunigt. Für TPM 2.0 liegt der Trusted-Keys-Code ab Kernel 5.5 nicht mehr unter “drivers/char/tpm”, sondern in “security/keys”. Gamer könnte interessieren, dass Linux nun die Logitech-G15-Tastatur unterstützt, und den Support für ein paar Geräte verbessert, darunter das Windows Precision Touchpad und Produkte von Primax.

Die Entwickler rund um Jens Axboe feilen weiterhin am “io_uring”-Support, wobei ein Fokus auf dem Umgang mit Netzwerk-Traffic lag. So ist die Ringgröße für CQ nicht mehr an die SQ-Ringgröße gekoppelt. Das hilft Netzwerk-Anwendungen bei bestimmten Workloads: Diese brauchen nur eine kleine SQ-Ringgröße für kleine IO-Sequenzen, aber eine große CQ-Ringgröße, um noch nicht bearbeitete Anfragen vorzuhalten. Auch spärliche und große Sets an Dateien unterstützt “io_uring” besser und macht Updates ohne Registrierungen möglich. Nicht zuletzt unterstützt “io_uring” Tracing und trackt Poll-Anfragen schneller.

Multimedia und WLAN

Für Alsa und ASoC kündigt Takashi Iwai in den Sound-Updates signifikante Änderungen an. Nicht nur zerlegen die Entwickler ASoC in Komponenten, refaktorieren und vereinfachen den Code. Es gibt neuerdings auch “Wake-on-Voice”-Support für Chromebooks sowie SPI-Support und Trigger-Wort-Detection für den RT5677-Audiotreiber. Hinzu kommen einige neue Treiber für verschiedene Audiogeräte und Verbesserungen im HD-Audio-Bereich.

Auch im Grafikbereich erwarten Linux-Nutzer Änderungen. So gibt es für AMDs Kernel Fusion Treiber (AMDKFD) Support für Navi 12, 14 und die Renoir APU. Für letztgenannte bietet der AMDGPU-Treiber auch eine Resets-Option an.

Der Wireless-Treiber “mac80211” übernimmt den Code zur Airtime-Kalkulation aus dem Treiber “mt76”, um ein Airtime Queue Limit zu berechnen. Die Kernel-Patches stammen von Kan Yan (Google) und Toke Høiland-Jørgensen (Red Hat). Sie sind nötig, um Airtime Fairness umzusetzen, was “mt76” bereits tut. Dabei geht es darum, Daten fair an einen gemischten Gerätezoo zu verteilen, der aus Geräten mit schnellem und langsamen WLAN besteht. Zudem bringt der “qtnfmac”-Treiber Support für 802.11ax im Access-Point-Modus mit und aktiviert Offload-Bridging-Support.

Wireguard

Lange hat es gedauert, aber ab Kernel 5.6 soll die VPN-Alternative Wireguard nun voraussichtlich fest im Linux-Kernel landen. Voraussetzung dafür war, dass Wireguard auch das Krypto-API des Linux-Kernel verwendet.

Im Laufe des Merge Window für Kernel 5.5 hat Linus Torvalds auch die Bibliotheks-Schnittstellen für Wireguard von Herbert Xu in seinen Kernel-Tree geholt. Kurze Zeit später hat David Miller Code für den Wireguard Secure Tunnel in seinen Netzwerk-Zweig (“net-next”) integriert und dürfte ihn dann im Merge Window für Kernel 5.6 an Kernel-Chef Torvalds schicken. Herunterladen lässt sich der fertige Kernel wie gewohnt auf kernel.org und über Github.

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben