Linux 5.2 freigegeben: Änderungsrekord und Geschwindigkeitsverbesserungen

Seite 5: Stromsparverhalten; Hardware durchreichen; Performance- & Detailverbesserungen

Inhaltsverzeichnis

Mit Intels Scalable I/O Virtualization soll sich Hardware kleinteiliger an VMs oder Container überstellen lassen.

(Bild: Vortragsfolien )

Die IOMMU-Infrastruktur des Linux-Kernels bietet jetzt "AUX domain support" und unterstützt damit Intels Scalable I/O Virtualization – eine Technik, mit der sich Funktionen von Hardwarekomponenten unter die Kontrolle von virtuellen Maschinen (VMs), Containern oder Prozessen stellen lassen, ohne die Sicherheit des Systems zu gefährden (u. a. 1, 2, 3, 4, 5, 6). Auf diese Weise kann der Kernel etwa virtuelle, vom Netzwerkchip bereitgestellte virtuelle Netzwerkschnittstellen zur freien Verfügung an VMs oder Container überstellen. Für derlei wird bislang meist Single Root I/O Virtualization (SR-IOV) genutzt, das allerdings mehr Overhead hat und unter anderem dadurch nicht hunderte oder gar tausende Sub-Funktionen exportieren kann, wie es heutige hoch-skalierbare Systeme manchmal erfordern. Details zur mit VT-d 3.0 spezifizierten Scalable I/O Virtualization liefern ein Blog-Beitrag und einige Vortragsfolien von Intel-Mitarbeitern. Wie bei SR-IOV muss die Hardware aber auch für Scalable I/O Virtualization ausgelegt sein.

Beim Erzeugen eines neuen Prozesses über den Systemaufruf clone() können Programme mit dem neuen Syscall-Flag CLONE_PIDFD jetzt gleich den seit Linux 5.1 unterstützten PID File Descriptor (PIDFD) erhalten, der auf den neu erstellten Prozess verweist. Die neue Funktion ist unter anderem für System-Management-Werkzeuge gedacht, die mit diesem File Descriptor hundertprozentig sicher gehen können, dass sie später an diesen Prozess gesendete Signale nicht versehentlich an einen anderen, vollkommen unbeteiligten Prozess schicken. Details zu dem Feature, das die Android- und Systemd-Entwickler nutzen wollen, erläutert der LWN.net-Artikel "Rethinking race-free process signaling".

Die zweite Generation der Control Groups (Cgroups v2) bringt nun auch einen Controller mit, um Prozesse vorübergehend einzufrieren – etwa um derweil in Ruhe einige Ressourcen für den Weiterbetrieb frei schaufeln zu können, falls Überlastung droht. Dieser Freezer ist einer der letzten Controller, die zum kompletten Umstieg auf Cgroup v2 noch fehlten. Im Commit-Kommentar und der Dokumentation weist der zuständige Entwickler indes darauf hin, dass der neue Freezer Controller etwas anders vorgeht als der ältere.

Wie bei jeder neuen Kernel-Version haben die Kernel-Entwickler zahlreiche Optimierungen vorgenommen – die sorgen bei bestimmten Umgebungsbedingungen manchmal für einen größeren Geschwindigkeitsgewinn, können bei anderen Systemen aber nur geringen oder gar keinen Einfluss auf die Performance haben. Unter diesen Optimierungen sind etwa Umbauten am Code zur Speicherplatz-Anforderung via Vmalloc, die Latenzen reduziert und dadurch die Performance deutlich verbessern kann. Durch diese "Improve Vmap Allocation" genannten Änderungen konnte der zuständige Entwickler ein Testprogramm in viereinhalb Minuten ausführen, das auf seinem Einplatinencomputer mit ARM64-Prozessor zuvor nach 24 Stunden noch nicht fertig war.

Eine effizientere Nutzung der Prozessor-Caches verspricht die Patch-Serie "Randomize free memory". Laut dem Entwickler wirkt sich das in vielen Tests nicht sonderlich aus, führt in bestimmte Szenarien aber zu enormen Performance-Gewinnen.

Der Kernel kann jetzt die mit GCC 9 eingeführte Option -flive-patching nutzen, um Optimierungen zu umgehen, die Kernel Live Patching (KLP) verkomplizieren. Laut den Entwicklern schnitten einige Scheduler-Benchmarks durch die neue Option allerdings ein bis drei Prozent schlechter ab.

Unter den wie üblich zahlreichen Änderungen an Infrastruktur und Werkzeugen zum Performance Monitoring mit perf war Support für Adaptive PEBSv4 (Precise Event-Based Sampling), das Intel in neue CPUs verbaut und den Overhead bei Geschwindigkeitsanalysen erheblich reduzieren kann. Ebenfalls neu: Die Perf-Record-Option --mmap-flush=<number>, Unterstützung zur Kompression mit Zstandard (Zstd) sowie Support für Intels-CPUs der Generationen Tremont und Ice Lake.

Für Entwickler wichtig: Die Kernel-Macher haben das mmiowb() genannte Macro für Memory-Mapped I/O (MMIO) entfernt, das allerlei Tücken hatte, die LWN.net im Artikel "Memory-mapped I/O without mysterious macros" erläutert.

Neu dabei ist auch ein Dokument, das einige Performance-Aspekte bei Arbeitsspeicherzugriffen in NUMA-Systemen näher erläutert. Ferner gab es einen ganzen Schwung Änderungen (u. a. 1, 2, 3), um den Support für Heterogenous Memory Management (HMM) zu verbessern – die in Linux 4.14 integrierte Infrastruktur, die die effiziente Nutzung von Zusatzprozessoren wie Crypto-Beschleunigern oder GPUs erleichtert, denen eigener Arbeitsspeicher zur Seite steht.

Die Kommentare der Git-Merges zahlreicher Subsysteme nennen einige weitere wichtige Änderungen – etwa in dem Bereichen ACPI, Dokumentation (1, 2), Cgroup, EFI, Ftrace, Iommu, Kbuild (1, 2), Kgdb, Ktest, Kselftest (1, 2), Locking Core, Livepatching, Objtool, PCI, Percpu, Pidfd, Power Management, Printk, RCU Core, Scheduler, SMP Hotplung, Thermal und VFIO.