c't 5/2019
S. 56
Kernel-Log
Linux 5.0
Aufmacherbild

Kernel-Log

Linux 5.0: Ruckelfrei zocken, schnellerer Datenaustausch

Der nächste Linux-Kernel macht einen Teil des Performance-Verlusts wieder wett, den die Spectre-Gegenmaßnahmen kosten. Der endgültige Umstieg auf die modernere Block-Layer-Infrastruktur zwingt Storage-Admins zum Umdenken. Gamer dürfen sich über Support für AMDs Freesync freuen.

Eine der meist diskutierten Neuerungen des nächsten Linux-Kernels ist nur eine kosmetische: Der am 25. Februar erwartete Nachfolger von Linux 4.20 trägt nicht die Versionsnummer 4.21, sondern die 5.0. Zu sagen hat der Sprung nichts: Die Änderungen sind nicht zahlreicher oder bedeutender als sonst; auch wurden nicht mehr alte Zöpfe abgeschnitten als üblich. Denn wie schon bei ähnlichen Sprüngen zuvor erfolgte auch der jetzige nur, weil Torvalds die zweite Zahl der Versionsnummer zu groß wurde. Oder wie er sagte: „Mir gehen die Finger und Zehen zum Zählen aus.“

Zurückerobern!

Zu den wichtigsten Neuerungen zählen Optimierungen, durch die Linux 5.0 beim Versenden von UDP-Paketen und Einsatz des Netzwerk-Schnellverarbeitungswegs XDP wieder nahezu die Performance erreichen soll, die Linux Ende 2017 erzielt hat. Das ist einigen Änderungen am DMA- und Netzwerkcode zu verdanken, die den Overhead von Retpoline erheblich reduzieren, das vor der Anfang 2018 bekannt gewordenen Prozessor-Sicherheitslücke Spectre v2 schützt. Die Linux-Entwickler diskutieren derweil mit „Static Calls“ und „Optpolines“ zwei weitere Ansätze, um die Einbußen von Retpoline generell zu reduzieren; noch ist allerdings ungewiss, ob sie die Praxisreife erreichen.

Der Sprung von 4.x auf 5.0 erfolgte, weil Linus Torvalds die „Finger und Zehen zum Zählen ausgehen“.

Für viel Aufsehen sorgten bei Linux 5.0 vorgenommene Aufräumarbeiten, die ZFS On Linux (ZOL) kaputt gemacht haben, weil es eine bislang genutzte Funktion aufgrund einer Lizenzkennzeichnung und -Durchsetzungstechnik nicht mehr verwenden kann. Die ZOL-Entwickler haben das Problem in ihrem Hauptentwicklungszweig mittlerweile umschifft, wie der Artikel auf Seite 186 erläutert. Der beschäftigt sich auch mit weiteren Anpassungen des neuen Kernels, die proprietären Treibern gezielt Knüppel zwischen die Beine werfen. Damit wollen einige Linux-Entwickler vor allem Nvidia treffen.

Ruckelfrei spielen

Der für AMDs moderne Grafikchips zuständige Kernel-Treiber Amdgpu beherrscht jetzt Freesync, das Bildstörungen wie Tearing oder Ruckler vermeiden hilft. Das gelingt durch dynamische Anpassung der Bildwiederholrate, daher wird die auf VESA Adaptive Sync aufbauende Technik auch Variable Refresh Rate (VRR) genannt. Zum Freesync-Einsatz ist neben dem neuen Linux-Kernel auch das für Februar angesetzte Mesa 19.0 nötig, denn erst der darin enthaltene OpenGL-Treiber von AMD bringt alles Nötige mit; ferner muss auch der Treiber für den X-Server die Technik unterstützen, sofern man einen solchen einsetzt. AMDs proprietäres Treiberpaket beherrscht Freesync schon länger.

Die erstmals beiliegende Schriftart „Terminus 16x32“ verhilft der Textkonsolen auf HiDPI-Displays zu einer adäquaten Größe. Das ist vor allem für Bootprozess und Embedded-Systeme interessant, denn eine zu hochauflösenden Bildschirmen passende Schrift kann man schließlich auch zur Laufzeit einstellen (siehe Tipps & Tricks der c’t 4/19, S. 157).

NSA ausbooten

Linux unterstützt jetzt die Stromchiffren XChaCha12 und XChaCha20. Auf ihnen baut der ebenfalls neue Verschlüsselungsalgorithmus Adiantum auf, den Dm-Crypt/Cryptsetup/LUKS und das von Ext4 und F2FS verwendete Fscrypt jetzt nutzen können, um Daten zu ver- und entschlüsseln. Adiantum stammt von Google und wurde für leistungsschwache Android-Geräte entwickelt, denen Kryptobeschleuniger für das üblicherweise bei der Datenträgerverschlüsselung verwendete AES fehlen. Ursprünglich hatte das Unternehmen geplant, das von der National Security Agency (NSA) entwickelte und daher viel kritisierte Speck zu nutzen. Kaum dass Mitarbeiter von Google den Speck-Support in den Linux-Kernel integriert hatten, verkündete das Unternehmen allerdings eine Kehrtwende und stellte wenig später HPolyC vor, aus dem Adiantum hervorging. Letzteres soll sogar schneller als Speck sein, das wieder entfernt wurde, weil niemand sonst Interesse daran vorbrachte.

Apropos NSA: Linux unterstützt nun auch den in RFC 6986 definierten Hash-Algorithmus Streebog, der zu den russischen Standardalgorithmen für Kryptografie („GOST Algorithmen“) zählt. Er wurde vom russischen Inlandsgeheimdienst FSB als Alternative zu SHA-3 mitentwickelt. Genau wie bei der von der NSA beigesteuerten und schon lange in Linux enthaltenen Sicherheitstechnik SELinux sind solche Ursprünge aber kein Ablehnungsgrund, solange die Implementierung sauber scheint.

Moderner speichern

Die Kernelentwickler haben den älteren der beiden Block-Layer-Ansätze rausgeworfen; damit verschwinden auch I/O-Scheduler wie Deadline und CFQ, die viele Admins vom Performance-Tuning kennen. Wer Datenträgerzugriffe optimieren will, muss sich daher mit dem neueren, seit Linux 3.13 im Kernel enthaltenen Ansatz auseinandersetzen – dem Multi-Queue Block IO Queueing Mechanism (Blk-Mq), der mit mehreren Warteschlangen arbeitet und nun die Basis der gängigen Storage-Treiber bildet. Der zugehörige Scheduler Mq-Deadline arbeitet ähnlich wie der entfernte Namensverwandte und ist daher recht simpel und vorhersehbar. Komplexer ist der im weiteren Sinne aus CFQ hervorgegangene BFQ, der die anstehenden I/O-Aufgaben eher mal umsortiert oder wartet, um Reaktionsgeschwindigkeit oder Durchsatz zu steigern.

Auf Btrfs-Dateisystemen lassen sich jetzt Auslagerungsdateien ablegen. Das ist für Distributionen wie Ubuntu interessant, die standardmäßig mit Auslagerungsdateien arbeiten. Das Ganze klappt aber nur unter bestimmten Bedingungen, daher darf das Btrfs-Volume etwa nur aus einer Partition bestehen.

Der neben Virtio-SCSI vielfach beim Virtualisieren eingesetzte Storagetreiber Virtio-Blk kann den Host nun per Discard darüber informieren, wenn Speicherbereiche virtueller Datenträger keine Daten mehr enthalten, weil dort liegende Dateien gelöscht wurden. Das kann Performance und Lebensdauer von SSDs verlängern, wenn der Host das per Trim-Befehl an die SSD weitergibt. Außerdem ist das Ganze interessant, um Image-Dateien virtueller Maschinen (VMs) zu schrumpfen.

Schneller netzwerken

Linux bringt jetzt einen Client (auch Initiator oder Host genannt) und einen Server (Target) mit, um über TCP-Verbindungen auf NVMe-Datenträger zuzugreifen (NVMe over Fabrics). Außerdem kann der Kernel per UDP eingehende Pakete jetzt sammeln und in größeren Bündeln an die Zielapplikation übergeben, was den Durchsatz steigert und zugleich den Prozessor entlastet. Durch dieses „Generic Receive Offload (GRO) für Plain UDP Sockets“ legte der Durchsatz bei einem Test des Entwicklers von 1079 auf 1466 MByte/s zu.

Im Speicherbereich von Programmen liegende Daten kann Linux jetzt via UDP versenden, ohne sie zuerst im Arbeitsspeicher duplizieren zu müssen. Dieser Zerocopy-Ansatz reduziert den Overhead und verspricht, die Performance zu steigern; TCP unterstützt Ähnliches bereits seit Linux 4.14.

Die Sicherheitsfunktion Seccomp (Secure Computing) kann jetzt ein Userspace-Programm zurate ziehen, um zu entscheiden, ob eine Tätigkeit eines anderen Programms erlaubt oder verboten wird. Container-Managementprogramme sollen diese Funktion nutzen können, um Containern etwa das Anlegen grundlegender und ungefährlicher Gerätedateien (etwa /dev/zero oder /dev/null) zu erlauben, das Erstellen anderer jedoch zu unterbinden. So ein Managementprogramm könnte auch Kernel-Module auf dem Host nachladen, wenn Software in Containern diese anfordert. Dabei geht es somit um Regeln, die sich mit einem Userspace-Programm einfacher und flexibler programmieren lassen als im Kernel.

Steuern, was wo läuft

Über die modernere Variante der Control Cgroups (Cgroups v2) lässt sich jetzt steuern, welche Prozessorkerne oder Speicherbereiche die zugeordneten Prozesse nutzen; das ist etwa für besonders leistungsstarke NUMA-Systeme interessant, damit die Prozesse (und somit auch Container oder VMs) wenn möglich lokalen Arbeitsspeicher verwenden.

Intels Ablaufverfolgungs- und Performance-Monitoring-Technik Processor Trace (PT) lässt sich jetzt auch in VMs nutzen. Außerdem hat KVM eine neue Betriebsart gelernt, um Gastsysteme ohne BIOS zu booten und so den Start zu beschleunigen.

Linux 5.0 unterstützt Nvidias als Tegra194 oder Xavier bekannte ARM-Prozessoren. Ebenfalls neu ist Basissupport für die von Freescale Semiconductor/NXP gefertigten Prozessoren der i.MX8-Familie. Zu der gehört auch der SoC, den Purism beim Linux-Smartphone Librem 5 einsetzen will; Support für dessen Entwicklerboard oder das Smartphone selbst enthält Linux 5.0 aber nicht.

Linux unterstützt jetzt das Bussystem MIPI I3C, das auch als SenseWire bekannt ist; es soll das weit verbreitete I2C beerben, um Sensoren oder andere Prozessoren anzubinden.

Viele neue Treiber

Die Entwickler haben ferner den Hardware-Support wieder signifikant erweitert, denn sie haben Dutzende neuer Treiber integriert und Hunderte existierende verbessert. Alles aufzulisten würde mehrere c’t-Seiten füllen, daher folgen nur einige Beispiele.

Der neue Kernel unterstützt die Touch-Funktion des 7-Zoll-Touch-Displays für den Raspberry Pi, das raspberrypi.org vertreibt. Neu dabei ist auch ein Treiber für das Cougar 700K Gaming Keyboard. Ferner haben die Entwickler den Support für Mäuse mit hochauflösendem Scrollrad verbessert. Die neue Kernelversion kann bereits die Temperatur der zweiten Generation von AMDs Zen-Prozessoren auslesen. Linux 5.0 unterstützt zudem die Audio-Einheit einiger neuer Ryzen-G-Prozessoren besser und weiß weitere Varianten der VEGA-Grafikchipfamilie von AMD anzusprechen. Der Kernel bringt ferner Basis-Support für GPUs aus Nvidias Turing-Reihe, die bei der GeForce-RTX-2000-Serie zum Einsatz kommt. Neu dabei ist auch ein Treiber für einen AQtion 2.5/5-Gbit-USB-Ethernet-Adapter von Aquantia.

Das neue Energy Aware Scheduling (EAS) soll helfen, den Energieverbrauch bei Prozessoren mit ARMs big.LITTLE zu senken, in denen unterschiedliche energiehungrige CPU-Kerne stecken. Durch EAS kann der Scheduler bekanntermaßen simple und kurzlebige Prozesse an schwache und sparsame Kerne senden, während er rechenintensive gleich stärkeren zuteilt. Ohne eine Lösung wie EAS verbrauchen solche SoCs mehr Strom als nötig und spielen zugleich ihr Performance-Potenzial nicht aus. Mit solchen SoCs bestückte Android-Geräte bringen daher meist einen der vielen Vorläufer von EAS mit, die in den vergangenen sieben Jahren entstanden. Keiner davon konnte allerdings die Ansprüche der Entwickler des Prozess-Schedulers erfüllen. EAS hat das jetzt geschafft – ist aber auch bewusst simpel gehalten, daher bietet es noch viel Raum für Verbesserungen, an denen bereits gearbeitet wird. (thl@ct.de)