Kernel-Log – Was 3.16 bringt (1): Storage & Netzwerk

Trends & News | Kernel-Log

Btrfs und NFS sollen robuster und etwas schneller arbeiten. Der gerade erst erneuerte Berkeley Packet Filter (BPF) wurde nochmal erheblich verbessert; ebenso die noch junge Infrastruktur zum Zugriff auf besonders schnelle Datenträger.

Kernel-Log-Logo

Am letzten Juni-Tag hat Linus Torvalds die dritte Vorabversion von Linux 3.16 veröffentlicht. Sie enthält nur kleine Korrekturen, denn wie üblich hat der leitende Kernel-Entwickler alle wesentlichen Änderungen für die neue Version bereits aufgenommen, bevor er die dessen erste Vorabversion veröffentlicht hat.

Die wichtigsten Neuerungen des in drei bis fünf Wochen erwarteten Linux 3.16 sind daher bereits jetzt absehbar. Wir beschreiben die wesentliche Änderungen dieser Kernel-Version wie üblich in einer mehrteiligen Artikelserie, die mit den Neuerungen rund um Dateisysteme und Storage-Hardware beginnt. In den kommenden Wochen folgen Artikel zu Prozessor-Unterstützung, Kernel-Infrastruktur und Treibern.

Das Btrfs-Dateisystem unterstützt nun das bei 3.11 eingeführte Open-Flag O_TMPFILE ; damit lassen sich temporäre Dateien anlegen, die beim Auflisten der Directories nie zu sehen sind und beim Schließen gelöscht werden. Über einen neuen Ioctl können Userland-Prozesse den Kernel anweisen, nach Elementen im Btree von Btrfs-Dateisystemen suchen; er ähnelt einem älteren Funktionsaufruf, der weniger flexibler und langsamer sein soll. Ferner haben die Kernel-Entwickler einige Macken am Quota-Support von Btrfs beseitigen (u. a. 1, 2).

NFS soll bessere Performance liefern, wenn Verzeichnisse viele Dateien enthalten oder Access Control Lists im Spiel sind. Zudem kann der Kernel nun auch NFS-Freigaben mounten, die er selbst exportiert; solche "Loop-back NFS mounts" können für eine simple Hochverfügbarkeits-Lösung mit NFS interessant sein, bei der ein Node des Clusters anfangs nur ein Dateisystem per NFS-Client einbindet, später dann aber auch die Funktion des NFS-Servers im Cluster übernehmen muss. Details erläutert ein LWN.net-Artikel, der vom Autor der Änderungen stammt, die diese Funktion nun ermöglichen.

Für die Freunde alter Computer-Hardware soll eine Änderung nicht unerwähnt bleiben, durch die der Kernel FAT-Dateisysteme im DOS-1.x-Format unterstützt. Die ersten PCs haben dieses Format bei Disketten mit 160, 180, 320 und 360 KByte verwendet. Die jetzt integrierte Unterstützung entstand, nachdem ein Anwender gemeldet hat, er könne Images alter Disketten nicht mit Linux öffnen.

Der bei 3.15 erneuerte Berkeley Packet Filter (BPF) kann auf x86-64-Systemen nun auf einen Just in Time Compiler zurückgreifen. Er ersetzt einen x86-64-JIT, der für den alten BPF-Interpreter geschriebenen Code ausführen konnte. Solchen Code soll der neue JIT ebenso schnell ausführen wie der alte, der jedoch drei BPF-Extensions nicht unterstützt hat. Der neue JIT kennt alle Extensions und kann so auch von dem bei 3.5 eingeführten Seccomp Filters Mechanism genutzt werden, der Funktionsaufrufe filtert, um Software in eine Sandbox zu sperren. Durch den neuen JIT sollen Filter, die auf solche BPF-Erweiterungen zurückgreifen, deutlich schneller arbeiten; einige Micro-Benchmarks sollen zwanzig Mal bessere Werte liefern.

Der auch beim Filtern von Netzwerkpaketen mit Tcpdump involvierte BPF bietet durch die bei 3.15 durchgeführte Erneuerung bereits mehr Funktionen und passt besser zu modernen Prozessoren; zusammen mit dem neuen JIT wird er so für neue Aufgaben interessant. Einen Eindruck davon liefert eine kürzlich veröffentlichte Patch-Sammlung von Alexei Starovoitov, der eine der treibenden Kräfte hinter den BPF-Umbauten ist. Durch seine Patches soll sich der BPF auch für Tracing-Aufgaben und weitere Aufgaben beim Filtern von Netzwerkpaketen eignen; dabei soll der mit dem JIT ausgeführte BPF-Code einige Aufgaben ähnlich schnell erledigen wie C-Code.

TCP Fast Open (TFO), das seit 3.13 den Aufbau von HTTP-Verbindungen beschleunigen kann, funktioniert nun auch mit IPv6. Die Netzwerk-Treiber für Xen-Hosts und Gäste verwenden in 3.16 mehrere Warteschlangen und sollen so schneller arbeiten (1, 2, 3). Der Kernel bringt jetzt einen "amd-xgbe" genannten Treiber für die 10-Gigabit-Ethernet-Funktion eines nicht näher genannten SoC (System-on-Chip) von AMD mit (1, 2, 3, 4).

Der Netzwerk-Stack enthält nun eine Funktion, um TCP Segementation Offload (TSO) zu emulieren. Das ist für Treiber von Netzwerkchips gedacht, die die Technik nicht unterstützen. TSO soll den Durchsatz steigern und die CPU-Belastung reduzieren, indem es gewisse Aufgaben an den Netzwerkchip delegiert; das schafft aber auch die TSO-Emulation, wie Messwerte in Kommentaren zu Commits zeigen, durch die einige Treiber für SoCs die Emulation nutzen (1, 2, 3).

Die Kernel-Entwickler haben das Locking des Storage-Treiber virtio-blk optimiert. Der vor allem bei der KVM-Virtualisierung anzutreffende Gast-Treiber soll dadurch in bestimmten Situationen erheblich schneller arbeiten. Der Treiber für die Micron RealSSD PCIe verwendet nun den Multi-Queue Block IO Queueing Mechanism (blk-mq). Diese für sehr schnelle Storage-Hardware entwickelte Infrastruktur bietet Basis-Funktionen für Storage-Treiber. Sie wurde bei 3.13 integriert und erhielt jetzt mehrere Verbesserungen. Blk-mq soll damit nun nahe am gewünschten Funktionsumfang sein und in bestimmten Situationen schneller arbeiten (u. a. 1).

Bei 3.17 werden vermutlich noch weitere Treiber auf blk-mq portiert; darunter soll auch der NVMe-Treiber sein, daher kitzelt diese Linux-Version möglicherweise mehr Leistung aus Hardware wie Intels kürzlich angekündigten Server-SSDs mit PCIe-3.0-Interface. Zudem sind Änderungen in Vorbereitung, durch die auch SCSI-Treiber auf blk-mq zurückgreifen können.

Es gab noch hunderte andere Änderungen am Code der beschriebenen Kernel-Bereiche. Informationen zu diesen finden Sie über die folgenden Links, die auf Git-Merge-Commits verweisen, mit denen die wesentlichsten Neuerungen dieser Bereiche in Linux 3.16 eingeflossen sind; die Kommentare zum Merge enthalten zumeist eine Beschreibung, die die wichtigsten Änderungen des jeweiligen Subsystems nennt.

Netzwerk:

Dateisysteme

Storage

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf dem Twitter-Konto "@kernellog" annonciert. (thl)

Kommentare

Anzeige