Linux 5.5 freigegeben: Wireguard-Fundament und Performance-Verbesserungen

Seite 5: Firewall-Offloading und Feintuning für WLANs

Inhaltsverzeichnis

Die von den Entwicklern des Netzwerk-Subsystems vorangetriebene BPF Virtual Machine beherrscht jetzt "BPF Trampolines", über die sich BPF-Programme nahezu ohne Overhead ganz am Anfang oder Ende beliebiger Funktionen (fentry/fexit) einklinken können. Das gelingt durch Verändern des Kernel-Codes zur Laufzeit (Live Patching) und ermöglicht zwei Dinge:

  • Eine Instrumentierung für eine Ablaufverfolgung (Tracing), die weniger Overhead ausweist als Kprobes/Kretprobes oder Tracepoints; das verbessert nicht nur die Performance der Analyse, sondern reduziert auch deren Störeinfluss.
  • Mit dem BPF ausgeführte Programme können leichter andere BPF-Programme aufrufen; das erleichtert ein effizientes Tracing von BPF-Programmen, die der Kernel im Rahmen von XDP (eXpress Data Path), TC (Traffic Control) oder Control Groups (Cgroups) ausführt.

Der Ansatz beseitigt so einige Engstellen, die Nutzern des BPF bislang in die Quere gekommen sind. Zusammen mit der besseren Performance ermöglicht das neue Einsatzgebiete für BPF-Programme.

Den Trick, den Kernel zur Laufzeit zu modifizieren, nutzen die BPF-Entwickler daher noch in einem anderen Bereich: Sie eliminieren den Retpoline genannten Kniff zum Schutz vor der Prozessorlücke Spectre v2 an einer zentralen Stelle der BPF Virtual Machine. Dadurch können sie dort den Overhead von Retpoline vielfach vermeiden und die Performance der BPF VM weiter verbessern.

Apropos Ablaufverfolgung: Ein mit den Worten "Revolutionize BPF Tracing and BPF C-Programmierung" angepriesener Schwung von Änderung ermöglicht eine effiziente Typ-Überprüfung von Pointern in BPF-Code. Dadurch sollen populärer werdende Analysewerkzeuge wie bpftrace sowie Werkzeuge und Analyseprogramme der BPF Compiler Collection (BCC) zuverlässiger und flotter arbeiten. Details hierzu liefert LWN.net im Artikel "Type checking for BPF tracing".

Bessere WLAN-Performance verspricht die neue Unterstützung für Airtime-based Queue Limit (AQL) im WLAN-Stack des Kernels. Der Code kann einerseits übermäßige und dadurch störende Datenpufferung ("Bufferbloat") vermeiden, hilft aber auch dabei, das Funkspektrum besser ausnutzen (u. a. 1, 2, 3).

Der neue Multi-Transport-Support für Vsock (VM Sockets) verspricht, die Performance bei Nested Virtualization zu verbessern: Dank dieser Infrastruktur kann ein Betriebssystem in virtuellen Maschinen (VMs) nicht nur über Sockets effizient mit dem Host kommunizieren, sondern zugleich auch mit Betriebssystemen in VMs, die es selbst gestartet hat.

Alternative Namen für Netzwerkschnittstellen sprengen eine 16-Zeichen-Beschränkung, die dieser Tage gelegentlich kneift.

(Bild: git.kernel.org – 7a56493f0620 )

Der Kernel kann Netzwerk-Interfaces jetzt mehrere alternative Bezeichnungen geben. Das gelingt über einen neuen Mechanismus, der auch das Limit von Gerätenamen für Netzwerkschnittstellen auf 16 Zeichen beseitigt, das durch die Vielfältigkeit moderner Netzwerk-Hardware mehr und mehr kneift.

Das für Firewalls und Routing zuständige Netfilter-Subsystem kann ab Linux 5.5 weitere Aufgaben beim Abarbeiten von Flusstabellen (Flow Tables) an Netzwerkchips delegieren, die diese Aufgabe übernehmen können. Das kann den Hauptprozessor entlasten und verbessert vielfach die Performance. Details dazu finden sich in den den Vortragsfolien und der Videoaufzeichnung eines Vortrags, in dem der zuständige Entwickler den Ansatz im September auf der Linux Plumbers Conference 2019 vorgestellt hat.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Das für die effiziente Kommunikation in Rechnerverbunden (Clustern) entworfene Protokoll "Transparent Inter-Process Communication" (TIPC) beherrscht nun Authentifizierung und überträgt Daten auf Wunsch verschlüsselt (1, 2). Userspace-Code zur Nutzung dieser Funktion wird Version 5.5 der Netzwerk-Werkzeugsammlung Iproute2 mitbringen.

Nachdem der CIFS/SMB-Dateisystemcode bei Linux 5.4 gelernt hat, Samba- oder Windows-Freigaben als Root-Dateisystem einzuhängen, erhielt der Netzwerk- und Init-Code jetzt Änderungen, um die IP-Konfiguration und alles andere erforderliche zu unterstützen. Das experimentelle Feature funktioniert ähnlich wie beim Einbinden einer NFS-Freigabe als Root-Dateisystem.

Der neuer Code zum Einhängen einer SMB-Freigabe als Root-Dateisystem enthält einen Fallback, um ein solches im ersten Diskettenlaufwerk zu suchen.

(Bild: git.kernel.org – init/do_mounts.c#n573 )

Der zuständige Entwickler hat dabei Teile des Codes vom Nfsroot-Support kopiert und leicht angepasst – darunter kurioserweise auch ein paar Zeilen heute vollkommen unzeitgemäß scheinenden Codes, durch die der Kernel bei Problemen mit Cifsroot laut Log-Meldung versucht, ein Root-Dateisystem auf einer Diskette im ersten Laufwerk (/dev/fd0) zu finden.

Eine ganze Reihe weiterer wichtiger Neuerungen bei der Netzwerk-Unterstützung von Linux nennt der Kommentar des Git-Merges, mit dem das Gros der Änderungen dieses Subsystems zum Kernel stieß. Darunter etwa Unterstützung für Übertragungen mit 400 GBit/s (50 GBit/s pro Lane) im Ethtool-Interface und dem Netzwerktreiber Mlxsw. Außerdem unterstützen die Netzwerktreiber Mvneta (Marvell Armada 370/38x/XP/37xx), SFC (Solarflare SFC9000/SFC9100) und Ice (Intel 800er-Serie) jetzt den Netzwerk-Schnellverarbeitungsweg XDP (eXpress Data Path). Der letztgenannten Treiber rüstet auch gleich Unterstützung für AF_XDP nach, mit dem Userspace-Programme seit Linux 4.18 effizient Netzwerkpakete abgreifen können.

Außerdem gab es eine Änderung am Flow-Code von Open-vSwitch, die den Durchsatz in einem Test-Szenario des zuständigen Entwicklers von 8 MBit/s auf 46 MBit/s zu steigern vermag. Das ist nur eine von vielen Detailoptimierungen im Netzwerkbereich, um die Performance zu verbessern; weitere Änderungen samt Messwerte nennen die Git-Merges zu Patch-Serien wie "Control action percpu counters allocation by netlink flag", "page_pool: API for numa node change handling", "add DMA-sync-for-device capability to page_pool API" und die einzelnen Commits der Serie "net: introduce and use route hint".