Kernel-Log – Was 3.15 bringt (2): Performance-Optimierungen

Der Datenträger-Cache passt sich schneller an neue Arbeitsbedingungen an, was die Geschwindigkeit deutlich steigern kann. PAE-Kernel starten nun auch auf alten Pentium-M-CPUs. Über Unterstützung von Link-time optimization (LTO) wird noch debattiert.

In Pocket speichern vorlesen Druckansicht 5 Kommentare lesen
Lesezeit: 5 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Der Speichermanagement-Code des Linux-Kernels erkennt nun, wenn er Daten mehrfach nacheinander erst in den Page Cache holt, um sie kurz darauf aus Platzmangel wieder rauszuwerfen (u. a. 1, 2, 3). Solche Daten versucht der Kernel daraufhin im Zwischenspeicher zu behalten; dazu entfernt der Kernel jetzt nötigenfalls auch Daten, die in der Vergangenheit sehr viel, in jüngster Zeit aber kaum mehr abgefragt wurden.

Dadurch soll sich der Page-Cache, der Zugriff auf wiederholt verwendete Datenträgerinhalte erheblich beschleunigt, jetzt erheblich flotter an veränderte Arbeitsbedingungen anpassen. Das steigert die Performance in manchen Situationen um ein Vielfaches; etwa wenn ein Programm eine große Datei eine Weile intensiv bearbeitet, bevor es sich einer neuen Datei ebenso ausführlich widmet. Details und einige Messwerte zum neuen Vorgehen liefern Mails aus der Entwicklungsphase und ein LWN.net-Artikel.

Mehr Infos

Die "Was Linux 3.15 bringt"-Serie

Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Linux-Version 3.15 geben, da alle größeren Änderungen bereits in den ersten zwei Entwicklungswochen integriert wurden; das Ende Mai oder Anfang Juni erwartete Linux 3.15 befindet sich seit dem in der Stabilisierungsphase, in der die Kernel-Hacker nur selten größere Umbauten vornehmen.

Über einige der Neuerungen von Linux 3.15 hat das Kernel-Log bereits im Rahmen der Artikelserie "Was 3.15 bringt" berichtet:

  1. Dateisysteme & Storage

In den kommenden Wochen erscheinen noch Artikel zu den Änderungen an Infrastruktur und Treibern.

Bei Angabe des neuen Bootparameters "forcepae" verwendet Linux die Physical Address Extensions (PAE) jetzt auch, wenn die Hardware meldet, sie würde die x86-32-Technik zum Ansprechen von mehr als 4 GByte RAM nicht beherrschen. Diese Änderung steckt auch im x86-32-Kernel des Mitte April veröffentlichten Ubuntu 14.04 LTS. Mit PAE-Unterstützung kompilierte Kernel laufen durch die Option auch auf manchen Notebooks, die Prozessoren der ersten Pentium-M-Generation enthalten. Diese "Banias" genannte CPUs enthalten PAE-Support, melden das aber nicht, weil Intel das so vorgegeben hat – entweder aus Vermarktungsgründen oder weil die Funktion nicht zuverlässig arbeitet. Die Kernel-Entwickler betonen in der Dokumentation daher deutlich, der Parameter könne zu verschiedensten Fehlern führen.

Änderungen an der Speicher- und Prozessplatzierung sollen die Performance verbessern, wenn ein Prozess auf Mehrprozessorsystem mit NUMA (Non-Uniform Memory Access) mehr Arbeitsspeicher nutzt, als einem Prozessor lokal zur Verfügung steht. Auf diesen Änderungen zum "Pseudo-interleaving NUMA placement" sollen bald weitere Patches aufbauen; durch sie soll sich der Kernel noch besser in solchen Situationen verhalten, die bei Servern und im High-Performance Computing (HPC) gelegentlich auftreten.

Der Kernel erhielt einige Grundlagen, auf die eine Unterstützung für Link-time optimization (LTO) aufbauen soll. Diese von GCC und LLVM unterstützte Technik analysiert und optimiert Code beim Linken – also wenn es die aus einzelnen Quellcodedateien entstandenen Objektdateien verbindet. Dadurch können die Compiler unter anderem Code aus Funktionen inline einbinden, der in anderen Objektdateien steckt; zudem kann LTO nicht verwendeten Code und Datenstrukturen finden und eliminieren.

Durch diese und andere Tricks ist der später ausgeführte Code oft kleiner und schneller. Ob der Kernel-Bauprozess LTO aber überhaupt lernen wird, ist noch ungewiss, denn Torvalds hat die für 3.15 eingereichten Patches zur LTO-Unterstützung vorerst links liegen gelassen– nicht nur, weil sie noch unreif sind, sondern weil er auch überzeugt werden wollte, dass sich der mit LTO verbunden Aufwand beim Kernel auch lohnt.

Die Speicherverwaltung nutzt statt Adressraum-spezifischer Caches für Virtual Memory Areas (VMA) jetzt Thread-spezifische Caches. Das kann die Effizienz des Caches erheblich steigern, der unter anderem die Abarbeitung der häufig auftretenden Page Faults beschleunigt; in Situationen, wie sie etwa Ebizzy simuliert, verbessert sich die Performance daher erheblich. Details dazu erläutert ein LWN.net-Artikel.

Der Kernel-Code für Control Groups (Cgroups) nutzt jetzt Kernfs, um die virtuellen Dateisysteme bereitzustellen, über die man den Code zur Regelung des Ressourcenverbrauchs konfiguriert. Kernfs ist für solche Zwecke designt und bei den letzten Kernel-Versionen nach und nach aus dem Code hervorgegangen, den zuvor nur das unter /sys/ gemountete Sysfs verwendet hat.

Mehr Infos

Entwicklungsstand

Die fünfte Vorabversion von Linux 3.15 ist bereits mehr als eine Woche alt, aber dennoch gibt es bislang keine neue Vorabversion; im Hauptentwickungszweig hat es auch schon mehrere Tage keine Änderungen mehr gegeben. Grund ist eine Reise Torvalds, auf die der leitenden Linux-Entwickler bei der Freigabe von 3.15-rc5 bereits hingewiesen hat. Es bleibt abzuwarten, ob die Entwicklung von Linux 3.15 dadurch länger als gewohnt dauert.

Das bei Linux 3.14 eingeführte Kernel Address Space Layout Randomization (KASLR) wurde weiter ausgebaut; Schadsoftware und Angreifer haben es dadurch auf x86-Systemen noch schwerer, Kernel-Code zu finden, der ihnen zusätzlicher Rechte verschafft.

Der Arbeitsspeicher-Komprimierer Zram, der bei 3.14 den Staging-Bereich verlassen hat, beherrscht jetzt den Kompressionsalgortihmus LZ4.

Daneben gab es an dem Kernel-Code der beschriebenen Bereiche hunderte andere Änderungen. Informationen dazu finden Sie über die folgenden Links auf Git-Merge-Commits, mit denen die wesentlichsten Neuerungen in Linux 3.15 eingeflossen sind; die zugehörigen Commit-Kommentare enthalten zumeist eine Beschreibung der wichtigsten Änderungen des jeweiligen Subsystems.

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf dem Twitter-Konto "@kernellog" annonciert. (thl) (thl)