Linux 4.20 freigegeben: Performance-Optimierungen und neue Treiber

Seite 2: Performance-Probleme und -Optimierungen

Inhaltsverzeichnis

Mitte November machten Vorabfassungen von Linux 4.20 und Versionen wie 4.19.2 und 4.14.81, 4.9.137 von sich reden, weil sie schlechtere Performance lieferten als ihre Vorgänger – besonders bei Intel-CPUs mit Hyper-Threading. Das lag an Erweiterungen der Maßnahmen gegen die Sicherheitslücke "Spectre v2", die zu Jahresbeginn bekannt wurde und in Prozessoren verschiedener Hersteller klafft. Einige der Änderungen sollen Prozesse besser voreinander schützen, andere den Schutz speziell bei Hyper-Threading; dazu griffen diese Kernel-Versionen noch stärker auf die Spectre-v2-Schutztechniken IBPB respektive STIBP zurück, die Prozessorhersteller mit neuem Microcode nachrüsten (1, 2).

Eine grundlegende Überarbeitung des verbesserten Spectre-v2-Schutz beseitigt das Performance-Problem, das im November für Aufsehen sorgte.

(Bild: git.kernel.org – 4b78317679c4)

Aufgrund der Performance-Regression wurden die Erweiterungen bereits nach wenigen Tagen aus Linux 4.19.4, 4.14.83 und 4.9.140 wieder entfernt. In den Vorabversionen von 4.20 verblieben sie, wurden Ende November mit Linux 4.20-rc5 aber nochmal grundlegend überarbeitet; einige der da vorgenommenen Verbesserungen waren ohnehin schon in Arbeit, noch bevor das Geschwindigkeitsproblem bekannt wurde. Letztlich soll Linux 4.20 durch die Überarbeitung das gewohnte Performance-Niveau erreichen, zugleich aber besser schützen.

Die nach den Umbauten (u.a. 1, 2, 3, 4, 5) standardmäßig genutzten Maßnahmen sollen für typische Einsatzzwecke reichen. Über den neuen Parameter spectre_v2_user= kann man allerdings einen noch umfangreicheren Schutz aktivieren, wie die Kernel-Dokumentation erläutert; Anwendungen können den besseren Schutz auch explizit für sich anfordern. Auch das Verhalten des älteren Parameters spectre_v2= wurde in dem Zug leicht angepasst. Der bessere Schutz ist beispielsweise für sicherheitskritische Systeme und Anwendungen gedacht, bei denen der damit einhergehende Performance-Verlust das kleinere Übel darstellt. Die Änderungen sind auch in die Linux-Versionen 4.19.7 und 4.14.86 eingezogen.

In Linux 4.20 können PCIe-Geräte jetzt Daten direkt austauschen, wenn die Hardware und Treiber das unterstützen. Die P2PDMA (Peer-To-Peer Direct Memory Access) genannte Funktion kann so Prozessor und Hauptspeicher von dieser Aufgabe entlasten, was die System-Performance steigert (u. a. 1, 2, 3, 4). Die Technik ist etwa zur Kopplung von Grafikkarten interessant. Linux beherrscht P2PDMA aber vorerst nur in einigen Treibern. Einer davon ist der NVMe-Treiber, damit NVMe-SSDs von Servern die Daten direkt an den Netzwerkchip übergeben können, die Clients per Remote DMA (RDMA) anfordern. Details hierzu finden sich im LWN.net-Artikel "Device-to-device memory-transfer offload with P2PDMA".

Apropos PCI: Die Kernel-Entwickler haben die Infrastruktur für PCI-Hotplug überarbeitet, um einige altbekannte Probleme beim Zu- und Wegschalten von PCI/PCIe-Geräten im Betrieb zu beseitigen und neue Einsatzmöglichkeiten zu unterstützten (u. a. 1). Details hierzu erläutert der LWN.net-Artikel "The modernization of PCIe hotplug in Linux".

Der von der NSA entwickelte und daher umstrittene Crypto-Algorithmus Speck wurde wieder Rausgeworfen, weil Google ihn doch nicht bei Android nutzen will.

(Bild: git.kernel.org – 578bdaabd015 )

Beim Dateisystem Btrfs gab es eine Reihe von Performance-Verbesserungen. Selbiges gilt für den SMB3-Support von CIFS, mit dem der Kernel Dateifreigaben von Samba- oder Windows-Servern einbinden kann. Beim unter anderem von Gluster genutzten Fuse (Filesystem in Userspace) gab es gleich mehrere Änderungen, die die Geschwindigkeit zu steigern versprechen. Der NFS-Server (NFSd) beherrscht jetzt asynchrones Kopieren.

Mit der neueren und mit mehreren Warteschlangen arbeitenden Infrastruktur zum Ansprechen von Datenträgern, Blk-MQ, lassen sich nun auch Stromspartechniken verwenden. Die Entwickler haben zudem einige Vorarbeiten erledigt, um die ältere Block-Layer-Infrastruktur bald rauszuwerfen. Vermutlich passiert das schon beim Nachfolger von Linux 4.20. Daran hat auch das vermeintliche und viel Aufsehen erregende Datenverlustproblem in 4.19 und Vorabversionen von 4.20 nichts geändert, das erst Ext4 zugeschrieben wurde, sich dann aber als Fehler in Blk-MQ entpuppte.

Einige weitere Neuerungen rund um Storage- und Dateisysteme nennen die Merges der Subsysteme 9p, Block (1, 2, 3), Ceph, Device Mapper, Ext4, F2FS, Fsnotify, Libata, Libnvdimm, MD, NFSd, NFS, SCSI und XFS (1, 2).

Das bei Linux 4.18 integrierte "AF_XDP" kann Netzwerkpakete jetzt weiterverarbeiten, ohne die Daten erst im Arbeitsspeicher kopieren zu müssen (u. a. 1, 2, 3, 4, 5). Der Zero-Copy-Support des für High Performance Packet Processing gedachten Frameworks legt dadurch an Geschwindigkeit zu. Laut dem zuständigen Entwickler soll AF_XDP dadurch in einigen Anwendungsszenarien fast das Performance-Niveau erreichen, das das komplett im Userspace arbeitende DPDK (Data Plane Development Kit) erzielt.

Das neue "Early Departure Time Model" soll TCP-Pacing verbessern.

(Bild: git.kernel.org – a88e24f270eb )

Der TCP-Stack und der Fair-Queue-Scheduler verwenden jetzt ein neues Verfahren, um über den Versendezeitpunkt von Netzwerkpaketen zu entscheiden. Der "Earliest Departure Time" genannte Ansatz soll Skalierbarkeit, Kalkulation der Round-Trip-Time (RTT) und dadurch auch die Schrittsteuerung (das "Pacing") verbessern. Er ist von einem Vortrag (Präsentationsfolien, Videoaufzeichnung) inspiriert, den Netzwerk-Urgestein Van Jacobson vor einigen Monaten auf einer Konferenz der Netzwerk-Stack-Entwickler von Linux gehalten hatte. Einige weitere Änderungen im Netzwerkbereich nennt der wichtigste Merge dieses Subsystems.