Die Neuerungen von Linux 3.3 | heise online

Die Neuerungen von Linux 3.3

Linux 3.3 soll Systemaussetzer beim Schreiben auf langsame Datenträger beseitigen. Software-RAIDs beherrschen jetzt Hot Replace. Das Netzwerk-Subsystem erhielt Teaming-Support, einen virtuellen Switch sowie Infrastruktur zur Vermeidung von "Bufferbloat". Verbesserungen bei den Grafktreibern.

vorlesen Druckansicht 51 Kommentare lesen
Lesezeit: 12 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Etwas mehr als zehn Wochen nach der Freigabe von Linux 3.2 hat Linus Torvalds vergangene Nacht die Kernel-Version 3.3 veröffentlicht. Der unter anderem für Fedora 16 und 17 vorgesehene Linux-Kernel bringt Änderungen im gewohnten Umfang – einige sind für Administratoren genauso von Interesse wie für Anwender, die Linux auf Desktop-PCs oder Notebooks einsetzen.

Mehr Infos

Im Detail

Bereits in den vergangenen Wochen hat das Kernel-Log in der Serie "Was Linux 3.3 bringt" detailliert über die Neuerungen von Linux 3.3 berichtet:

  1. Netzwerk
  2. Dateisysteme und Storage
  3. Architektur und Infrastruktur
  4. Treiber

Der nebenstehende Text fasst die wichtigsten Neuerungen in Linux 3.3 zusammen und gibt einen Ausblick auf den Kernel 3.4.

Der Intel-Grafiktreiber erhielt mit Linux 3.3 eine Anpassung, durch die der Kernel jetzt den tiefsten Schlafzustand der Intel-GPU-Stromspartechnik RC6 meidet. Dadurch soll diese typischerweise Technik, die 3 bis 5 Watt sparen kann, nun zuverlässig mit den Grafikkernen arbeiten, die in Intels Prozessoren der derzeit aktuellen Generation Sandy-Bridge stecken. Sie bleibt aber standardmäßig ausgeschaltet und muss über den Kernel-Parameter i915.i915_enable_rc6=1 manuell aktiviert werden.

Die Nouveau-DRM/KMS-Treiber für Grafikchips von Nvidia unterstützen ab Kernel 3.3 erstmals die Audio-Ausgabe via HDMI bei Grafikchips ab dem NVA3, der auch als GT215 bekannt ist (1, 2, 3, 4); solche Grafikkerne sitzen beispielsweise auf den GeForce-Modellen GT 240, 320 und 335M sowie deren Nachfolgern. Der Nouveau-Treiber von Linux 3.3 steuert erstmals die GPU mit dem Codenamen NVD9 an, die unter anderem die GeForce-GT-Modelle 520, 520M, 520MX sowie die GeForce 410M verwenden.

Der Radeon-DRM/KMS-Treiber für Grafikchips von AMD unterstützt nun HDMI-Audio-Ausgabe bei den Chips der Evergreen-Generation, die häufig, aber nicht immer auf GPUs der Radeon-HD-5000er-Serie sitzen. Die Informationen zur Ansteuerung der HDMI-Audio-Hardware wurden mit Hilfe von Reverse Engineering ermittelt; wie gut der so entstandene Code arbeitet, muss der Feldtest zeigen.

Der von Intel-Mitarbeiter und Kernel-Urgestein Alan Cox entwickelte DRM/KMS-Grafiktreiber für die Intels-Grafikkerne GMA500, GMA600 und GMA3600 zog in das DRM-Subsystem ein (u. a. 1, 2, 3, 4, 5). Der Treiber war zuvor unter anderem Namen einige Monate im Staging-Bereich für verbesserungsbedürftigen Code; er spricht unter anderem den Grafikkern in Intels Embedded-Chip US15W ("Poulsbo") an, der auch in einigen Netbooks verbaut wurde.

Die Kernel-Entwickler haben einen Ethernet-Teaming-Treiber aufgenommen, der mehrere Netzwerk-Ports zu einem virtuellen verbindet (Link Aggregation/802.1AX). Dieses virtuelle Netzwerk-Device kann ähnlich wie der schon länger im Kernel enthaltene Bonding-Treiber die Arbeit in einem Round-Robin-Verfahren über mehrere Ports verteilen; alternativ kann ein Port auch als "active backup" bereitstehen und einspringen, wenn es Probleme mit dem primär genutzten Netzwerk-Anschluss gibt.

In Linux 3.3 sind die Kernel-Komponenten von Open vSwitch eingeflossen – dieser Multilayer Virtual Switch kann auf den Layern 2, 3 oder 4 arbeiten und wurde speziell für den Einsatz im Virtualisierungsumfeld entwickelt. Über die von einem Google-Entwickler eingebrachten "Dynamic Queue Limits" und den darauf aufbauenden "Byte Queue Limits" kann der Kernel steuern, wie viele Daten sich in der Sende-Warteschlange ansammeln dürfen; das soll das "Bufferbloat"-Problem mindern, das durch exzessive Puffern von Daten in Netzwerk-Hardware entstehen kann.

Dem Kernel liegt nun ein Treiber für NVMe (Non-Volatile Memory Express) bei (u. a. 1, 2). Dabei handelt es sich um eine vor einem Jahr definierte Standardschnittstelle zum Zugriff auf SSDs, die via PCI oder PCIe angebunden sind; auch der designierte SATA-6G-Nachfolger SATA Express soll Konzepte von NVMe nutzen.

Der für Software-RAIDs zuständige MD-Code erhielt Funktionen (u. a. 1, 2), um Daten im Betrieb von einem Datenträger auf einen zweiten zu verschieben, um den ersten anschließend entfernen zu können. Dieses "Hot Replace" reduziert die Gefahr von Datenverlust beim Datenträgerwechsel, da es den sonst nötigen Rebuild beim Austausch einer Platte vermeidet, bei dem die redundanten Daten auf dem neuen Datenträger frisch erzeugt werden.

Die Kernel-Entwickler haben für Linux 3.3 eine Reihe von Umbauten und Erweiterungen am Balancing- und Restriping-Code von Btrfs vorgenommen, der für das Umverteilen von Daten innerhalb von Btrfs-Laufwerken zuständig ist (1, 2, 3, 4, 5, 6). Durch diese Änderungen lassen sich mit Btrfs erzeugte RAIDs umbauen – etwa von einem RAID 1 in ein RAID 10. Solche Migrationen lassen sich durch den neuen Code auch pausieren, abbrechen oder nach einem Absturz fortsetzen.

Der Ext4-Code erhielt einen neuen Mechanismus zum Anpassen der Größe von Ext4-Dateisystemen (u. a. 1). Dabei kümmert sich nicht vornehmlich ein Userspace-Programm um die Größenanpassung, sondern der Kernel selbst; das soll den Anpassungsprozess in manchen Situationen deutlich beschleunigen.

In den Staging-Bereich für verbesserungsbedürftigen Code sind wie erwartet einige Android-spezifische Treiber eingezogen – darunter auch einige, die vor Jahren schon mal im Staging-Bereich waren, aber wieder entfernt wurden, weil sich niemand um sie gekümmert hatte (u. a. 1, 2, 3, 4, 5). Durch diese Änderungen soll der Standard-Kernel jetzt alles Nötige zum Booten des Android-Userlands mitbringen; es fehlt allerdings noch der Wakelock-Code oder ein Äquivalent, um ordentliche Akku-Laufzeiten zu erreichen.

Die von Microsoft selbst vorangetriebenen Netzwerk-, HID- und Maus-Treiber für die eigene Virtualisierungsschnittstelle Hyper-V sind nach mehreren Jahren im Staging-Bereich nun so weit gereift, dass sie in die zuständigen Subsysteme umziehen konnten.

Der Treiber für HDA-Codecs von Cirrus spricht nun den Cirrus Logic 4213 an. Der Hardware-Monitoring-Treiber it87 unterstützt ab Linux 3.3 den auf einigen Mainstream-Mainboards eingesetzten Baustein IT8728F. Der Treiber für ALPS-Touchpads weiß jetzt mit Touchpads umzugehen, die Version 3 und 4 eines ALPS-Protokolls verwenden.

Einige für Linux 3.3 vorgenommene Anpassungen sollen verschiedene Probleme aus der Welt schaffen, durch die Systeme in bestimmten Situationen für einige Sekunden 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. Eine der jetzt vorgenommenen Änderungen wildert ebenfalls in diesem Revier und kann in bestimmten Fällen auch die Schreib-Performance des Fuse-Treibers Ntfs-3G steigern; die meisten der jetzt vorgenommenen Änderungen betreffen allerdings den Memory-Compaction-Code. Sie beseitigen Probleme, die mit Transparent Huge Pages (THP) in Verbindung stehen.

Die Kernel-Entwickler haben für Linux 3.3 zudem einige "Memory Control Group Naturalization Patches" genannte Änderungen 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).

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 freigegebenen Kernel-Versionen 3.0.20 und 3.2.5 eingebaut. 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 mit LPAE mehr als 4 GByte Arbeitsspeicher adressieren können. Der Code für die S390-Architektur kann nun bis zu 64 Terabyte Arbeitsspeicher adressieren; zuvor war bei 3,8 TByte Schluss.

Nachdem Linux 3.2 etwas mehr Neuerungen erhalten hatte zuvor üblich, bringt Linux 3.3 wieder ein gewohntes Maß. Die zahlreichen Änderungen im Netzwerk-Subsystem – Teaming, Open vSwitch, Bufferbloat-Vermeidung und einiges mehr – zeigen, dass es selbst in einem seit langem etablierten Bereich wie dem Netzwerk-Stack noch Raum für Verbesserungen gibt. Genau wie die neuen Funktionen zum Anpassen der Größe von Ext4-Dateisystemen und der Hot-Replace-Support für den Software-RAID-Code sind diese Änderungen allerdings vornehmlich für Administratoren interessant.

Heimanwender profitieren wohl am meisten von zahlreichen neuen und verbesserten Treibern. Vielleicht haben die Kernel-Entwickler mit Linux 3.3 nun auch endlich alle wesentlichen Probleme ausgeräumt, durch die manche Systeme ins Stocken geraten, während der Kernel Daten auf langsame Datenträger schreibt – auf dem Arbeitsplatz-PC, auf dem diese Zeilen entstanden, ist das Problem mit Linux 3.3 jedenfalls verschwunden.

Direkt nach der Freigabe von Linux 3.3 beginnt nun das typischerweise zwei Wochen lange Merge Window, in dem die Kernel-Entwickler den Großteil der Änderungen für die nächste Linux-Version in den Hauptentwicklungszweig integrieren. Für diese erste Phase im Entwicklungszyklus von Linux 3.4 haben die Kernel-Hacker bereits zahlreiche Änderungen vorbereitet.

So sollen die Hyper-V-Storage-Treiber den Staging-Bereich verlassen. Wie schon mehrfach in den vergangenen Monaten gibt es zudem Indizien, die auf die Integration der Userspace-Tracing-Lösung Uprobes hindeuteten. Diesmal sind die Hinweise allerdings noch etwas konkreter, da der bekannte Kernel-Entwickler Peter Zijlstra und der für den Tracing- und Performance-Monitoring-Code zuständige Entwickler Ingo Molnar die Uprobes-Patches begutachtet haben; nach einigen Anpassungen hat Molnar einige der Patches in einer seiner Entwicklerzweige aufgenommen, die in den Kernel-Zweig linux-next einfließen, über den die Kernel-Hacker ihre Änderungen für Linux 3.4 abstimmen (u. a. 1, 2, 3). Dort finden sich auch die Patches zur Implementierung des x32-ABI, über das sich die Vorteile von 64-Bit-x86-Prozessoren nutzen lassen, das aber den mit dem 64-Bit-Betrieb einhergehenden Overhead vermeiden soll.

Das Kernel-Log in c't und auf heise open wird wie üblich über diese und andere Neuerungen am Linux-Kernel und in dessen Umfeld berichten – dazu zählen auch neue Versionen der Stable-Kernel-Series (3.3.y), die in den kommenden Wochen den einen oder anderen Fehler korrigieren dürften, der den Testern der Vorabversionen von Linux 3.3 entgangen ist.

Zudem wird sich das Kernel-Log wie üblich im Rahmen einer Artikel-Serie "Was 3.4 bringt" auf heise open umfassend mit den Neuerungen der nächsten Kernel-Version auseinandersetzen. Sofern Torvalds und seine Mitstreiter im üblichen Tempo arbeiten, dürfte Linux 3.4 zwischen Mitte und Ende Mai erscheinen.

Linux- Version Anzahl Dateien¹ Zeilen
Quelltext²
(Ohne Dokum.)
Entwicklungs-
zeitraum
Anzahl Commits³ Diffstat⁴
2.6.37 35186 13916632
(13006967)
76 Tage 11446 11104 files changed,
 1093202 insertions(+),
 598350 deletions(-)
2.6.38 35864 14208866
(13289311)
69 Tage 9542 9133 files changed,
 747809 insertions(+),
 455603 deletions(-)
2.6.39 36705 14533582
(13600071)
65 Tage 10268 10985 files changed,
 847537 insertions(+),
 523387 deletions(-)
3.0 36781 14646952
(13688408)
64 Tage 9153 7946 files changed,
 555406 insertions(+),
 442033 deletions(-)
3.1 37084 14770469
(13804451)
94 Tage 8692 9181 files changed,
 728892 insertions(+),
 604658 deletions(-)
3.2
37617 14998651
(14017008)
73 Tage 11881 12608 files changed,
 1646421 insertions(+),
 1418238 deletions(-)
3.3 38082 15166074
(14173668)
74 Tage 10550 10698 files changed,
 599745 insertions(+),
 432324 deletions(-)
¹ find . -type f -not -regex '\./\.git/.*' | wc -l
² find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l (find . -name *.[hcS] -not -regex '\./\.git.*' | xargs cat | wc -l)
³ git-log --no-merges --pretty=oneline v3.(x-1)..v3.(x) | wc -l
⁴ git diff --shortstat v3.(x-1)..v3.(x)
Mehr Infos

Linux 3.3 herunterladen

Der neue Kernel steht über Kernel.org zum Download bereit; in Kürze dürften auch die Spiegelserver diese Version ausliefern. Den Quellcode gibt es in Tar-Archiven, die mit Gzip, Bzip2 und XZ komprimiert wurden. Die Echtheit des Archivs lässt sich nach dem Dekomprimieren über eine Signatur-Datei prüfen:

[thl@thl tmp]$ wget --quiet http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.tar.sign \
http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.tar.xz
[thl@thl tmp]$ xz -d linux-3.1.tar.xz
[thl@thl tmp]$ gpg --verify linux-3.1.tar.sign
gpg: Unterschrift vom Mo 24 Okt 2011 09:17:58 CEST mittels RSA-Schlüssel ID 00411886
gpg: Korrekte Unterschrift von "Linus Torvalds <torvalds@linux-foundation.org>"
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck = ABAF 11C6 5A29 70B1 30AB E3C4 79BE 3E43 0041 1886

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 Open" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige später meist auch im Kernel-Log erwähnte Themen als "@kernellogauthor" bei Identi.ca und Twitter. (thl) (thl)