Netzwerk-Zerocopy & anfänge eines Kernel-Proxys Update

Linux-Kernel 4.14

Trends & News | Kernel-Log

Seite 4: Netzwerk-Zerocopy & anfänge eines Kernel-Proxys

Linux kann dank "Socket Sendmsg MSG_ZEROCOPY" jetzt von Programmen aufbereitete Daten direkt per TCP verschicken, ohne diese zuerst aus dem Speicherbereich einer Anwendung (dem "Userspace") in jenen das Kernels ("Kernelspace") kopieren zu müssen. Das vermeidet Arbeit und soll so die Geschwindigkeit steigern. Der Trick ist keineswegs neu, denn per sendfile() kann Linux schon länger Daten verschicken, ohne diese erst in den Kernelspace kopieren zu müssen. Dieser Ansatz funktioniert aber nur mit Dateien. Der neue setzt hingegen bei sendmsg() an und eignet sich dadurch für Daten, die ein Programm im Speicher hat. Das können einmalig zum Versand aufbereitete Daten sein, wenn beispielsweise ein CMS auf Anfrage eines Nutzers eine individuelle Webseite kompiliert und ausliefert. Bei beiden Ansätzen dupliziert der Kernel die Daten aber sehr wohl, falls die Umgebungsbedingungen das erfordern.

MSG_ZEROCOPY soll den Prozessor in bestimmten Situationen deutlich entlasten. (Bild:  kernel.org )

Laut dem zuständigen Entwickler kann der Zerocopy-Ansatz die Prozessorlast in Micro-Benchmarks deutlich verringern. Bei Tests mit weitgehend aus dem Produktionsbetrieb übernommenen Workloads hätte die Technik einen Performance-Vorteil von 5 bis 8 Prozent erzielt. Der Kernel kann das Ganze aber nicht automatisch nutzen: Programme müssen die die Zerocopy-Funktion unterstützen und explizit anfordern, schließlich dürfen sie den Speicherbereich nicht modifizieren, bevor der Kernel die darin enthaltenen Daten auf den Weg geschickt hat.

Weitere Hintergründe zu MSG_ZEROCOPY und dessen Einsatz finden sich in dem Kommentar eines Merge Commit, einigen Commit-Kommentaren (1, 2, 3, 4, 5), der Kernel-Dokumentation und einem Artikel von LWN.net. Noch mehr Details liefern die Videoaufzeichung eines Vortrags des zuständigen Entwicklers sowie die dort gezeigten Präsentationsfolien und ein zugehöriges Paper.

Die Netzwerk-Schnellstraße Express Data Path (XDP) lässt sich dank "XDP Generic" seit Linux 4.12 mit beliebigen Netzwerk-Schnittstellen verwenden. Jetzt beherrscht der dafür verantwortliche Code auch XDP_REDIRECT, um Pakete umzuleiten. Die zum Speichern von Geräte-Referenzen gedachte "Devmap" soll dabei helfen, diese Aufgabe möglichst schnell zu erledigen. XDP Generic unterstützt jetzt auch virtuelle Netzwerkgeräte. Darüber hinaus implementiert der Tun-Treiber nun XDP, was die Performance bei Tests um mehr als 40 Prozent verbessern konnte.

Linux 4.14 enthält Grundlagen für einen derzeit entwickelten Kernel Proxy. (Bild:  www.mail-archive.com )

Die zum SK-Redirect geeignete "Sockmap" und einige andere Umbauten schaffen Grundlagen, auf die ein derzeit in Entwicklung befindlicher "Kernel Proxy" aufbauen soll. Dieser verspricht SSL-Proxies, Application Firewalls und L7 Load Balancer beschleunigen, indem er den Overhead beim Layer-7-Processing reduziert. Ein anderer Kernel-Entwickler hatte zuvor schon einen ähnliche Ansatz für einen Proxy im Kernel umrissen.

Linux 4.14 bringt zahlreiche Verbesserungen am Code des BPF – der aus dem klassischen Berkeley Packet Filter (BPF) hervorgegangenen Virtual Machine, mit der XDP, Seccomp, Perf, tcpdump und anderer Kernel- und Userspace-Code den oftmals dynamisch erzeugten Programmcode ausführen, dem diese Techniken oft die Schwerarbeit aufbürden. Zum BPF-Code stieß beispielsweise ein JIT (Just in Time) Compiler für 32-Bit-ARM-Prozessoren, der die Ausführungsgeschwindigkeit auf solchen CPUs steigern soll. Die BPF-VM beherrscht neben den Instruktionen BPF_JGT (>), BPF_JGE (>=), BPF_JSGT (s>) und BPF_JSGE (s>=) nun auch die Gegenstücke BPF_JLT (<), BPF_JLE (<=), BPF_JSLT (s<) und BPF_JSLE (s<=); das soll Overhead vermeiden, der bislang durch Spiegeln der Vergleichsargumente entstand.

Einige weitere Neuerungen rund um Netzwerk-Support des Kernels finden sich im Kommentar eines Merge-Commits, mit denen die wesentlichen Änderungen am Netzwerkcode zum Kernel stießen. Mit ihnen haben die Entwickler den IRDA-Code, mit dem sich Netzwerkverbindungen über Infrarot-Sender und -Empfänger aufbauen lassen, in den Staging-Bereich verschoben. Dieser Umzug in den Bereich für Code mit bekannten Qualitätsmängeln läutet den Rauswurf des IRDA-Netzwerk-Supports ein; Anwender, die das verhindern wollen, müssen jetzt an die Kernel-Hacker herantreten. Damit rechnen diese aber nicht, denn bislang habe sich auch niemand beschwert, dass der diese Tage ohnehin eher exotische Kommunikationsweg in aktuellen Linux-Versionen bereits eine Weile nicht mehr richtig funktioniert.

Kommentare

Kommentare lesen (241 Beiträge)