Aus Linux-Magazin 04/2020

Kernel 5.5: RAID1C34 für Btrfs, CIFS mountet Root-FS

© foodandmore, 123RF

Die Dateisystem-Autoren im CIFS- und Btrfs-Projekt sparen im aktuellen Zyklus nicht an Features. Der Umgang mit BPF-Programmen erfordert deutlich weniger Ressourcen, und der Kryptocode für Wireguard landet im Kernel.

Auf der Kernel-Mailingliste gab Chefentwickler Linus Torvalds am 26. Januar 2020 den ersten Linux-Kernel im neuen Jahr frei [1]. Er trägt die Versionsnummer 5.5. Herunterladen lässt sich der fertige Kernel wie gewohnt auf Kernel.org und Github [2].

Die Entwickler von Dateisystemen, insbesondere jene von Btrfs und CIFS, warten im aktuellen Release-Zyklus wieder mit neuen und interessanten Features auf.

Btrfs erlaubt zum Beispiel neuerdings RAID1-Setups mit drei oder vier Kopien [3]. Bei RAID1C34 handelt es sich um ein neues Blockgruppen-Profil. Der Btrfs-Entwickler David 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: Strong Hash (»sha256« und »blake2b«) sowie Fast Hash (»xxhash«). Nicht zuletzt arbeitet »lseek« schneller, was parallele Suchvorgänge (»SEEK_CUR« / »SEEK_SET« / »SEEK_END«) um bis zu 80 Prozent beschleunigt.

Über SMB lassen sich ab Kernel 5.5 auch Root-Dateisysteme einhängen. 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 Kommandozeilenoption »cifsroot=« entgegen. Dann ruft sie für das Kernelmodul »cifs.ko« die Funktion »do_mount_root()« mit den passenden Mount-Optionen auf.

Ebenfalls mit von der Partie ist Ipconfig: Das Werkzeug richtet den Network Stack ein und ermöglicht dann den Zugriff auf das SMB-Share mit dem Root-Dateisystem. Dafür erlernt es den Umgang mit der 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 iteriert »smb2_get_enc_key()« jedoch über alle Sessions, um den zur Sitzung passenden Key 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 Ext4. 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« sowie eine Dateisystemverschlüsselung nun auch dann verwenden, wenn die Blockgröße kleiner ausfällt als die Page-Größe. Nicht zuletzt haben die Programmierer am Credit-Handling des Journals 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 Angelegenheit und nennt sich Server Side Copy (SSC). Ceph behandelt ab Kernel 5.5 Read-only-Mappings für Rados Block Devices (»rbd«) effizienter und verwendet eine neues Mount-API.

Performance, Testing, BPF

Von Ingo Molnár kommen Updates an Perf (Abbildung 1): So können das LSM (Linux Security Module) und SE-Linux 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 [4].

<a href="#artRef-f1">Abbildung 1</a>: Auch f&uuml;r Perf, das interne Linux-Tool f&uuml;r Performance-Messungen, gab es wieder Updates.

Abbildung 1: Auch für Perf, das interne Linux-Tool für Performance-Messungen, gab es wieder Updates.

Mit KUnit erhält der Kernel zudem 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 dessen Subsystemen einsetzen, soll aber auf andere Architekturen erweiterbar sein. Ebenfalls neu an Bord sind drei KUnit-Tests für »proc sysctl«, doppelt verlinkte Listen und Ext4.

Der Enhanced Berkeley Packet Filter (eigentlich eBPF, meist aber einfach als BPF bezeichnet) ist eine Art direkt im Kernel ansässige virtuelle Maschine, die den Aufrufkonventionen der Programmiersprache C folgt. 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 Kernel-Code dank des neu eingeführten BPF-Trampoline “praktisch mit null Overhead” auf BPF-Programme zugreifen. Der von Alexej Starovoitov eingeführte Mechanismus wirkt als Brücke zwischen dem Kernel-Code, einem BPF-Programm und seinen BPF-Kollegen. Das ermöglicht nicht nur ein kostenfreies Tracing, sondern auch das Beobachten von netzwerkbezogenen Programmen ohne Extrakosten; BPF kommt ja, wie der Name verrät, auch zum Filtern von Netzwerkpaketen zum Einsatz. Zugleich lassen sich Funktionsargumente des BPF-Type-Formats (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 gepushten 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 hält nicht länger Teile im Kernel zurück. Darüber hinaus unterstützt das Makefile nun die gängigen Kernel-Kompressionsformate Bzip2, LZ4, LZMA und LZO.

Rufnummer

Eric Biederman hat den Systemaufruf »sysctl()« 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, dass der System Call veraltet sei. Sollte sich Biedermans Eindruck als falsch herausstellen, ließe sich der entfernte Code problemlos wieder reaktivieren.

Ein Aufruf von »statx()« zeigt hingegen künftig ein »fs-verity«-Bit an, was über das Return-Flag »FS_VERITY_FL« läuft [5]. Auf dieser Basis stellen Programme mühelos fest, ob es sich bei einer Datei um ein Verity-File handelt, ohne sie dafür explizit öffnen zu müssen. Hier zeichnet sich also ein Leistungsgewinn ab.

Auch die Arbeit an »clone3()« geht weiter. Der Systemaufruf reicht das TLS-Argument statt über ein Register über die »struct clone_args« weiter. 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 ebenfalls »clone3()« einsetzen möchten, jedenfalls 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, über diverse Subsysteme verstreute Optimierungen und Änderungen. Die »cpuidle«-Einheiten werden jetzt in Nanosekunden gemessen, nicht mehr in Mikrosekunden. Der EFI-RNG-Code für x86-Plattformen liefert im frühen Boot-Stadium eine zusätzliche Quelle an Zufall. Ji?í Pírko hat den Netzwerkcode 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 die »Late-Loading«-Methode durch paralleles Laden, was das Einlesen von Microcode beschleunigt und vor allem in der Cloud interessant zu sein scheint. 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 5.5 die Logitech-G15-Tastatur unterstützt und den Support für mehrere weitere Geräte verbessert, darunter für das Windows Precision Touchpad und Produkte von Primax.

Die Entwickler rund um Jens Axboe haben auch am »io_uring«-Support gearbeitet, wobei ein Fokus auf dem Umgang mit Netzwerkverkehr lag. So ist die Ringgröße für CQ nicht mehr an die SQ-Ringgröße gekoppelt. Das hilft Netzwerkanwendungen bei bestimmten Workloads: Sie 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« nun 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.Die Entwickler zerlegen nicht nur ASoC in Komponenten und refaktorieren sowie 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 den 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 Letztere bietet der AMDGPU-Treiber auch eine Reset-Option an.

Der Wireless-Treiber »mac80211« übernimmt den Code zur Airtime-Kalkulation aus dem Treiber »mt76«, um ein Airtime Queue Limit [6] 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 Devices mit schnellem und langsamen WLAN besteht. Zudem bringt der Treiber »qtnfmac« Support für 802.11ax im Access-Point-Modus mit und aktiviert Offload-Bridging-Support.

Ausblick: Wireguard

Lange hat es gedauert, aber ab Kernel 5.6 soll die VPN-Alternative Wireguard nun fest im Linux-Kernel landen. Voraussetzung dafür war, dass Wireguard auch das Krypto-API des Linux-Kernels verwendet. Im Laufe des Merge Window für Kernel 5.5 hat Linus Torvalds auch die Bibliotheksschnittstellen für Wireguard von Herbert Xu in seinen Kernel-Tree geholt [7]. Kurze Zeit später integrierte David Miller Code für den Wireguard-Secure-Tunnel in seinen Netzwerk-Zweig (»net-next«). Im Merge Window für Kernel 5.6 hat Kernel-Chef Torvalds bereits den Code für Wireguard selbst in seinen Tree integriert [8].

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 3 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben