Kernel-Log – Was 3.3 bringt (3): Architektur und Infrastruktur | heise online

Kernel-Log – Was 3.3 bringt (3): Architektur und Infrastruktur

Änderungen am Code zur Speicherverwaltung sollen Ruckler während des Schreibens auf langsame Datenträger beseitigen und die Performance verbessern. Der Kernel bootet auf X86-EFI-Systemen ohne Boot-Loader direkt aus der Firmware; der ARM-Port unterstützt nun die Large Physical Address Extension (LPAE).

vorlesen Druckansicht 13 Kommentare lesen
Lesezeit: 32 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Einige für Linux 3.3 vorgenommene Anpassungen sollen verschiedene Probleme aus der Welt schaffen, durch die Systeme in bestimmten Situationen ins Stocken geraten, während der Kernel große Datenmengen auf einen langsamen Datenträger (etwa einen USB-Stick) schreibt. Bereits 3.2 hatte Probleme dieser Art beseitigt, bei denen der Writeback-Code das Ruckeln verursachte – jetzt betreffen die Änderungen den Memory-Compaction-Code und beseitigen Probleme, die mit Transparent Huge Pages (THP) in Verbindung stehen.

LWN.net hat im November die Hintergründe in dem Artikel "Huge pages, slow drives, and long delays" thematisiert; das dort angesprochene Deaktivieren von "Synchronous Compaction" konnten die Entwickler durch einen Ansatz umgehen, den sie nach Erscheinen des Artikels entwickelt haben. Details und Messwerte zu den Auswirkungen liefert ein fast vierhundert Zeilen langer Kommentar eines Commits, der lediglich drei Zeilen entfernt, aber nur eine von mehreren Änderungen am Compaction-Code ist (u. a. 1, 2, 3, 4, 5, 6).

Eine andere Änderung am Memory-Management-Code soll eine weitere Ursache für Ruckler vermeiden helfen, die sich ebenfalls gerne beim Schreiben auf langsame Datenträger zeigte und mit der Writeback-Infrastuktur in Zusammenhang steht. Nebenbei kann sie beim Einsatz des Fuse-Treibers ntfs-3g die Schreib-Performance unter gewissen Bedingungen um zirka fünfzig Prozent steigern, wie Messwerte im Commit-Kommentar zeigen.

Mehr Infos

Entwicklungsstand

In der Nacht vom Samstag auf Sonntag hat Linus Torvalds die sechste Vorabversion von Linux 3.3 veröffentlicht. In der Freigabe-Mail erklärt er, der RC6 bringe lediglich kleine Korrekturen und Aufräumarbeiten; es sei so ruhig gewesen, dass dies die letzte Vorabversion sein könnte. Das hänge aber vom Verlauf der nächsten Woche ab; wenn es so ruhig bleibe, gebe es keinen besonderen Grund, den aktuellen Entwicklungszyklus nicht abzuschließen. Wahrscheinlich dürfte Linux 3.3 daher zum Anfang der nächsten Woche oder dem Beginn der Folgewoche erscheinen, sofern nicht noch größere Probleme auftauchen

Die Kernel-Entwickler haben für Linux 3.3 einige Änderungen ("Memory Control Group Naturalization Patches") aufgenommen, die den Verwaltungsaufwand des Cgroup-Controllers "memory" erheblich reduzieren sollen; das soll die Performance des Controllers zum Regulieren des Arbeitsspeicherkonsums verbessern, den einige Distributionen standardmäßig einsetzen (u. .a 1, 2, 3). Einige Hintergründe zu einem früheren Entwicklungsstand hat LWN.net im Mai letzten Jahres im Artikel "Integrating memory control groups" zusammengefasst.

Der Memory-Controller der Control Groups bietet bei Linux 3.3 Basis-Funktionen, um die Menge des Arbeitsspeichers zu begrenzen, den der Kernel selbst zur Verwaltung und Betrieb von Prozessen alloziert (1, 2); der im ersten Teil dieser Artikelserie erwähnte "TCP buffer size controller" nutzt diese Funktionen, um die Menge des Arbeitsspeichers zu begrenzen, den die bei der TCP-Kommunikation verwendeten Puffer belegen dürfen. Eine andere Anpassung beseitigt ein Performance-Problem im Readahead-Code, das sich zeigte, wenn ein Programm große Einheiten von schnellen Datenträger (etwa einer SSD) abforderte. Die Ursache war ein unerwünschter Nebeneffekt von Änderungen bei Linux 2.6.39; Hintergründe erläutert der LWN.net-Artikel "What happened to disk performance in 2.6.39".

Zum KVM-Code stieß unter anderem Code zum Bereitstellen einer Virtual Performance Monitoring Unit (PMU), die Gastsysteme für Performance-Analysen oder andere Tracing-Aufgaben nutzen können (u. a. 1, 2). Die Discard-Unterstützung im Xen-Code bietet nun eine optionale Funktion, um Daten in freigegebenen Bereichen zu zerstören ("discard support with secure erasing support"); einige weitere Xen-spezifische Änderungen erwähnt ein Git-Pull-Request von Oracle-Mitarbeiter Konrad Rzeszutek Wilk. Die Virtio-Treiber balloon, blk, console und net bringen nun alles für ACPI S4 Nötige mit; das ermöglicht einen Wechsel in den Ruhezustand (Hibernate) bei Gästen, die diese Datenaustausch-Schnittstellen verwenden.

Durch Einschalten der Konfigurationsoption "EFI_STUB" lassen sich ab Linux 3.3 x86-Kernel erzeugen, die eine EFI-Firmware direkt starten kann – man kann also auf einen Boot-Loader verzichten. Auf x86-Sytemen emuliert der Kernel nun standardmäßig die Verarbeitung der weitgehend von vDSO beerbten Schnittstelle vsyscall, über die Programme System-Aufrufe ("Syscalls") absetzen können; das soll die Sicherheit verbessern und war ursprünglich schon für eine frühere Kernel-Version geplant, wurde aber aufgrund von Problemen zurückgestellt. Neu in Linux 3.3 ist Basis-Unterstützung für das erst kürzlich spezifizierte und daher in der Praxis noch nicht anzutreffende ACPI 5.0 (u. a. 1, 2, 3).

Der ARM-Code kann jetzt die Large Physical Address Extension (LPAE) nutzen (u. a. 1, 2, 3), über die Betriebssysteme auf 32-Bit-ARM-v7-Kernen, die LPAE bieten, mehr als 4 GByte Arbeitsspeicher adressieren können. Der ARM-Code unterstützt nun das Audit-Subsystem und bietet Basis-Unterstützung für Nvidias SoC (System on a Chip) Tegra 3 (u. a. 1, 2).

Mehr Infos

Die "Was Linux 3.3 bringt"-Serie

Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Mitte März erwarteten Linux-Version 3.3 geben, da alle größeren Neuerungen bereits in den ersten zwei Wochen der Entwicklung integriert wurden; Linux 3.3 befindet sich daher jetzt in der Stabilisierungsphase, in der normalerweise keine größeren Änderungen mehr einfließen.

Die Artikel zu den Neuerungen nehmen sich nach und nach den unterschiedlichen Funktionsbereichen des Kernels an:

In den kommenden Wochen folgen noch ein Artikel zu Treibern.

Der Code für die S390-Architektur kann nun bis zu 64 Terabyte Arbeitsspeicher adressieren; zuvor war bei 3,8 TByte Schluss. Die M68knommu-Architektur unterstützt nun die MMU (Memory Management Unit), die manche Prozessoren der vierten Coldfire-Generation von Freescale bieten. Mit Version 3.3 unterstützt der Linux-Kernel erstmals die C6X-Architektur, die einige der einfacheren Single- und Multicore-DSPs (Digital Signal Prozessors) von Texas Instruments aufweisen (u. a. 1).

Dem Kernel erhielt eine auf GnuPG-Code basierende Bibliothek für Berechnungen mit MPI (Multi Precision Integers) (1, 2, 3, 4). Die gegen Angriffe schützenden Kernel-Techniken IMA (Integrity Measurement Architecture) und EVM (Extended Verification Module) können mit dieser Bibliothek RSA-Signaturen prüfen, um so die Unversehrtheit von Dateien zu testen (1, 2, 3, 4, 5). Während der Entwicklung von 3.3 wurden zudem Patches diskutiert, um mit dieser Infrastruktur auch Kernel-Module zu signieren; die Entwickler sind sich aber derzeit über einige Aspekte des Ansatzes uneinig.

In das Crypto-Subsystem zogen unter anderem Änderungen ein, die bestimmte Verschlüsselungs- und Signatur-Algorithmen beschleunigen sollen:

  • Durch einige Änderungen am Kernel-Code für ASPM (Active State Power Management) nutzt der Kernel 3.3 die PCIe-Stromspartechnik nun selbst dann, wenn es bestimmte Ungereimtheiten zwischen der Hardware-Konfiguration und den ASPM-Informationen gibt, die das BIOS dem Kernel meldet. Einige Wochen, nachdem diese Änderung für Linux 3.3 aufgenommen wurde, haben die Kernel-Entwickler sie auch bei den im Februar freigegeben Kernel-Versionen 3.0.20 und 3.2.5 eingebaut.
  • Zu den Verbesserungen an der IOMMU-Infrastruktur zählen Unterstützung für die zweite Version von AMDs IOMMU-Implementation und die Möglichkeit, unterschiedlich große Speicherseiten zu handhaben. Der IOMMU-Code erhielt zudem einige Grundlagen zum Gruppieren und sicheren Isolieren von Geräten, was für das noch in Entwicklung befindliche VFIO (Virtual Function I/O) interessant ist. Laut der zugehörigen Dokumentation soll VFIO nicht nur die Funktionen zum Weiterreichen von Hardware-Komponenten an KVM-Gäste ersetzen, sondern auch das Userspace-Treiber-Framework UIO beerben, da VFIO solchen Treibern mehr Möglichkeiten bietet; LWN.net erläutert einige Hintergründe zu VFIO in einem Artikel.
  • John Stultz hat ein Skript eingebracht, mit dem sich mehrere Dateien mit Kernel-Konfigurations-Optionen zu einer ".config" zusammenführen lassen. Viele Distributionen nutzen solche Skripte beim Bauen ihrer Kernel. Fedora-Kernel-Entwickler Josh Boyer hat allerdings festgestellt, dass das für Linux 3.3 aufgenommene Skript in seinem Testszenario über 25 Minuten für eine Aufgabe benötigt, die das bislang von Fedora eingesetzte Skript in 47 Sekunden erledigt; selbst nach einer Optimierung benötigte es noch über 3 Minuten.
  • Bei jeder neuen Kernel-Version des Hauptentwicklungszweigs gibt es hunderte von Änderungen, die das im Kernel-Log typischerweise nicht erwähnt, weil sie Probleme korrigieren, die nur auf bestimmten Systeme oder bei seltenen Konfigurationen auftreten. Ein Beispiel für solche Änderungen sind zwei Commits (1, 2), durch die der Kernel auf dem Dell Studio 1557 und dem Thinkpad SL510 nun eine Sonderbehandlung automatisch aktiviert, die alternativ auch der Kernel-Parameter "pci=nocrs" aktiviert; dadurch sollen diese Systeme bei Kernel 3.3 und später aus dem Bereitschaftsmodus (ACPI S3/Suspend to Ram) zuverlässig aufwachen, auch wenn der Anwender noch nie von diesem Parameter gehört hat. Besitzer dieser Systeme haben das einem Fehlerbericht zu verdanken, in Folge dessen die Änderungen entstanden. Auch in anderen Bereichen – insbesondere bei den Audio-Treibern – gibt es mit jeder neuen Version des Hauptentwicklungszweigs solche Änderungen, durch die der Kernel bestimmte Workarounds automatisch anwendet. Auch bei diesen Fällen haben häufig Linux-User die Entwickler auf die nötigen Parameter hingewiesen, die zusammen mit Informationen zur Identifikation der betroffenen Systeme Patches erstellt haben, damit der Kernel automatisch alles richtig macht.

Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutende Änderungen:

ACPi, PCI und Co.

Crypto und Security

MM

Power Management

Tracing

Virtualization

Various

x86

ARM

PPC

Various

Ein "C" im Bereich "[  ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "D" ausgezeichneten Patches verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer. Änderungen ohne Zahl sind kleiner als 10 KByte.

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 den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl) (thl)