Die Neuerungen von Linux 3.0

Zum Sprung in das dritte Jahrzehnt des Linux-Kernels gab es zahlreiche Änderungen am Btrfs-Dateisystem. Der Kernel enthält nun alles Wichtige zum Hosten von Gästen mit dem Xen-Hypervisor und bringt viele neue oder überarbeitete Treiber mit.

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

Nur ungefähr zwei Monate haben Linus Torvalds und seine Mitstreiter diesmal zur Fertigstellung einer neuen Kernel-Version gebraucht. Die Neuerung, die wohl am meisten Aufsehen erregt, ist dabei keine technische, sondern eine kosmetische: Der Versionssprung von 2.6.39 auf 3.0. Diesen haben die Entwickler aber nicht für gravierende Änderungen genutzt, sondern einfach ganz normal einen Kernel zusammengestellt, wie es in der 2.6er-Serie zuletzt üblich war – es gibt also kleine wie große Änderungen.

Zu den wichtigeren Neuerungen von Linux 3.0 zählt das Storage-Backend für den Hypervisor Xen, durch das der Kernel nun alle wichtigen Bausteine zum Xen-Dom0-Betrieb enthält – sechs Jahre, nachdem die Aufnahme der Xen-Unterstützung schon einmal zum Greifen nahe schien. Viele Änderungen gab es auch am Btrfs-Dateisystem und den Grafiktreibern. Wie immer integrierten die Kernel-Entwickler einige neue Treiber und verbesserten viele andere.

Der folgende Artikel beschreibt diese und weitere Verbesserungen der neuen Linux-Version in Kurzform. Manche davon sind nur für Server oder Embededed-Systeme wichtig, viele aber auch für Allerwelts-Notebooks und typische Desktop-PCs. Über die Linux-Kernel der Distributionen landen die Verbesserungen kurz- und mittelfristig auf dem Gros der Linux-Systeme, weil die Distributions-Kernel auf dem Vanilla-Kernel von Linus Torvalds basieren.

Mehr Infos

Im Detail

Bereits in den vergangenen Wochen hat das Kernel-Log in der Mini-Serie "Was Linux 3.0 bringt" detailliert über die Änderungen der Linux-Version 3.0 berichtet:

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

Der nebenstehende Artikel fasst die wichtigsten der dort genannten Verbesserungen zusammen und gibt zusätzlich noch einen Ausblick auf Version 3.1. Die Artikel der Mini-Serie beschreiben die erwähnten Änderungen jedoch ausführlicher und listen außerdem noch zahlreiche nicht so bedeutende, aber keineswegs unwichtige Neuerungen auf.

Ein Versionssprung oder ein ganz neues Nummerierungsschema für den Linux-Kernel war schon einige Male diskutiert worden – der Sprung auf 3.0 kam aber doch recht überraschend. Im letzten Jahr hatte es noch so geklungen, als wollten die Kernel-Entwickler vor einer Änderung noch wenigstens 2.6.42 erreichen. In der zweiten Mai-Hälfte und eine Woche nach der Freigabe von Linux 2.6.39 brachte Torvalds jedoch überraschend einen Wechsel auf 2.8 ins Spiel, weil "die Nummern zu groß würden". In der darauf folgenden LKML-Diskussion kam dann schnell die Idee mit 3.0 auf; die "3" solle die dritte Dekade kennzeichnen, die Linux demnächst mit seinem 20. Geburtstag antritt.

Die eigentliche Entscheidung zum Umstieg und eine Verkürzung auf eine Versionsnummer mit zwei statt drei Abschnitten traf Torvalds ein paar Tage später, kurz bevor er die erste Vorabversion des jetzt fertig gestellten Kernels freigab. Den Beschluss traf er anscheinend alleine, was ihm seine Position als als Alpha-Männchen der Linux-Entwicklung ermöglicht. In der Freigabe-Mail zu Linux 3.0-rc1 versuchte Torvalds sehr deutlich zu machen, dass es lediglich eine neue Nummerierung sei und diese Version keine größeren Änderungen enthalte; bereits zuvor hatte er Vorschlägen eine Absage erteilt, den Versionssprung als Anlass zu nehmen, um vermeintliche Altlasten wie MCA-, EISA- oder ISA-Unterstützung zu entfernen.

Trotzdem ist die neue Nummerierung für Anwender von Bedeutung, denn sie bringt einige Anwendungen durcheinander – darunter systemnahe Programme wie Cryptsetup, Device Mapper, LVM2, Mdadm, Module-Init-Tools und Procps. Sie aktualisiert man am besten, wenn man auf Kernel 3.0 oder einen der Nachfolger wechselt, um Probleme zu vermeiden. Einige dieser Programme haben die Methoden zur Zusammenarbeit mit aktuellen Kerneln nur aktiviert, wenn dessen Versionsnummer mit 2.6 beginnt; andere sind davon ausgegangen, dass die Versionsbezeichnung aus drei Zahlenabschnitten besteht. Solche Herangehensweisen hat Torvalds sehr deutlich kritisiert. Um einen Teil dieser Probleme zu umgehen, wird sich Linux 3.0 selbst als 3.0.0 identifizieren; es ist gut möglich, dass auch die direkten Nachfolger ein zusätzliches ".0" erhalten, dies aber früher oder später wegfällt – der Nachfolger des jetzt veröffentlichten Kernels soll die Versionsnummer 3.1 tragen. Zur Kennzeichnung von Stable- und Longterm-Kernel dient zukünftig die dritte Stelle; bisher war es die vierte.

Auch wenn Torvalds die Neuerungen von Linux 3.0 herunterzuspielen versucht: Die neue Kernel-Version enthält durchaus einige wichtige Änderungen – von denen viele allerdings schon im Hauptentwicklungszweig gelandet sind, als alle Welt noch annahm, der nächste Kernel würde die Versionsnummer 2.6.40 tragen.

Unter den Änderungen findet sich das Storage-Backend für Xen (u. a. 1, 2, 3). Damit enthält der Kernel nun endlich alle essenziellen Komponenten, um als Dom0 mit dem Xen-Hypervisor zusammen Gastsysteme zu hosten. Einige Xen-Entwickler liefern Hintergründe dazu in Blog-Einträgen (1, 2, 3, 4, 5, 6).

Bei dem in den Kernel integrierten Code handelt es sich allerdings um eine erheblich zusammengestrichene und überarbeitete Variante des Codes, den kommerzielle Xen-Produkte wie Citrix XenServer derzeit einsetzen. Der Funktionsumfang ist daher kleiner; es lassen sich beispielsweise keine USB-Geräte an Gäste durchreichen und Suspend-to-RAM funktioniert nicht.

Der Radeon-DRM/KMS-Treiber spricht jetzt auch den Grafikkern der Llano-Prozessoren an, die AMD kürzlich für Notebooks und Desktop-PCs eingeführt hat (u. a. 1, 2). Um Probleme wie dunkle Bildschirme zu vermeiden, ist die Audio-Ausgabe via HDMI für erste standardmäßig deaktiviert; sie lässt sich über den Kernel-Parameter radeon.audio=1 einschalten. Zudem gab es eine Änderung am Hilfetext zum Radeon-DRM/KMS-Treiber, die klarstellt, dass er jetzt jegliche Radeon-Grafikhardware unterstützt.

Der in Linux 3.0 enthaltene i915-DRM/KMS-Treiber für Intel-Grafikchips in Prozessoren und Chipsätzen für Notebooks und Desktop-PCs soll bereits jetzt den Grafikern der Ivy-Bridge-Prozessoren ansteuern können, die Intel vermutlich erst Anfang nächsten Jahres einführen wird (u. a. 1, 2, 3, 4, 5, 6, 7). Der Kernel und dessen Nouveau-DRM/KMS-Treiber erhielten einige Grundlagen zur Unterstützung verschiedener Techniken, die beim Umschalten zwischen Prozessor-/Chipsatz-Grafik und GeForce-Grafikchips involviert sind (u. a. 1, 2, 3); bei neueren Notebooks nennt Nvidia das "Optimus".

Zum Netfilter-Code gehört jetzt ein "Berkeley Packet Filter Just in Time Compiler" für x86-64-Systeme. Er erzeugt zur Laufzeit Assembler-Code, der einige Aufgaben zum Filtern von Netzwerkpaketen übernimmt, die etwa Sniffer-Werkzeuge wie Tcpdump den Kernel erledigen lassen. Der standardmässig deaktivierte JIT-Compiler lässt sich einschalten, indem man den Wert "1" in die Datei /proc/sys/net/core/bpf_jit_enable schreibt. Bei einer früheren Version des Compilers hat dessen Entwickler eine Beschleunigung um 50 Nanosekunden pro behandeltem Paket messen können.

Der WLAN-Stack des Kernels enthält jetzt grundlegende Unterstützung für die Konfiguration von Wake on Wireless LAN (WoWLAN) (1, 2). Neu ist auch der Treiber rtl8192se für die PCIe-WLAN-Chips RTL8191SE und RTL8192SE von Realtek (u. a. 1). Die im Rt2x00-Projekt entstandenen Kernel-Treiber für WLAN-Chips von Ralink bieten ab Linux 3.0 experimentelle Unterstützung für die USB-WLAN-Chipsätze der Baureihe RT5370. Der Treiber für die RT53xx-Familie gilt fürs erste weiter als experimentell, soll diese PCI-WLAN-Chips jetzt aber komplett unterstützten und besser funktionieren. Ähnlich verhält es sich bei den Treibern für die PCI- und USB-Chips für der RT33xx-Reihe, die den Status "experimentell" ablegen konnten. Die Treiber für Ralink-Chips sind derweil so weit gereift, dass die Kernel-Entwickler die von Ralink selbst entwickelten und später in den Staging-Zweig integrierten Treiber rt2860sta und rt2870sta rausgeworfen haben.

Einen ganzen Schwung von Änderungen gab es am weiterhin experimentellen Btrfs-Dateisystem, darunter die neue die neue "Delayed Inode Items Operation". Laut Messungen des Entwicklers beschleunigt die Technik das Erstellen von Dateien in bestimmten Situationen um zirka 15 Prozent, das Löschen um 20 Prozent. Neu ist auch die Scrub-Unterstützung; über sie kann man den Kernel anweisen, alle Daten vom Speichermedium zu lesen und dabei die Checksummen zu prüfen, um sicherzustellen, dass alle Daten intakt sind.

Da Btrfs mit Copy on Write (COW) arbeitet, fragmentiert es bei bestimmten Zugriffsmustern schnell. Über die neue Mount-Option "auto_defrag" kann man das Dateisystem nun anweisen, auf kleine und zufällige Schreiboperationen ("small random writes") in existierenden Dateien zu achten, um solche Dateien zur automatischen Defragmentierung vorzumerken.

Ext4 unterstützt nun die "punch hole" genannte und via Fallocate nutzbare Funktion, über die Programme dem Dateisystem mitteilen können, wenn Bereiche innerhalb einer Datei keine Daten mehr enthalten. Das kann etwa für Virtualisierungsprogramme interessant sein, damit das Dateisystem nicht mehr genutzte Speicherbereiche von Festplatten-Images wieder freigeben kann, die als Sparse-Dateien vorliegen. Das XFS-Dateisystem unterstützt nun auch Online Discard, um den jeweiligen Datenträger direkt beim Löschen von Dateien über freigewordene Speicherbereiche zu Informieren – das ist für SSDs und Netzwerkspeicher mit Thin Provisioning interessant.

  • Erst zur sechsten Vorabversion integrierten die Kernel-Hackern die größte Neuerung im Storage-Bereich: Den Isci genannten Treiber für den SAS-Controller in Intels Server- und Workstation-Chipsatz C600, der in den kommenden Monaten erscheinen soll (u. a. 1).
  • Der XHCI-Treiber für USB 3.0 soll bereits jetzt die EHCI/XHCI-Port-Switching-Funktion der Panther-Point-Chipsätze unterstützen; die gehören zu den Ivy-Bridge-Prozessoren, die Intel vermutlich Anfang nächsten Jahres einführen wird (1, 2).
  • Der Treiber k10temp kann mit Linux 3.0 auch AMD-Prozessoren der Familie 15H (Codename "Bulldozer") ansprechen, die im Spätsommer oder Herbst auf den Markt kommen dürften. Der neue Treiber fam15h_power stellt Schnittstellen bereit, über die sich Informationen zum Stromverbrauch von Bulldozer-CPUs auslesen lassen.
  • Das Media-Subsystemen bietet nun Grundfunktionen für DVB-T2-Hardware (1, 2) und bringt einen Treiber für Sonys DVB-T2-Chip CXD2820R mit.
  • In das Media-Subsystem fließt ein Treiber für den von verschiedenen Herstellern eingesetzten DVB-T-Tuner Micronas DRXD ein (u. a. 1, 2). Neu ist auch ein rudimentärer Treiber für Microsofts Kinect.
  • Unter den im Rahmen des Alsa-Projekts entwickelten Audio-Treibern des Kernels findet sich jetzt einer für die PCIe-Soundkarte Digigram Lola und einer für das iSight-Mikrofon von Apple.

Am ARM-Code gab es erste Aufräumarbeiten, nachdem Torvalds in den vergangenen Monaten die Code-Qualität und die Arbeitsweise der zuständigen Entwickler ziemlich deutlich kritisiert hatte. Einige Änderungen gab es am Code zum Neustarten von PCs; durch sie löst Linux den Reboot nun ähnlich wie neuere Windows-Versionen aus (u. a. 1). Das soll Neustart-Probleme auf einigen Rechnern beseitigen, darunter einige Apple-Systeme und Thinkpad-Notebooks.

An einigen Stellen des Kernels haben die Kernel-Hacker das Prefetching entfernt (u. a. 1, 2, 3); also das explizite Anfordern von Daten, kurz bevor diese genutzt werden. Prefetching soll eigentlich die Performance verbessern, weil die Daten so vor der Nutzung in den CPU-Cache wandern. Es stellte sich allerdings heraus, dass manche modernen Prozessoren das in bestimmten Situationen selber so gut beherrschen, dass Prefetching durch den Kernel die Performance verschlechtert. Details hierzu liefert LWN.net im Artikel "The problem with prefetch".

"So what are the big changes? NOTHING. Absolutely nothing." – mit diesen Worten hat Linus Torvalds in der Freigabe-Mail zur ersten Vorabversion von Linux 3.0 sehr deutlich zu machen versucht, dass Linux 3.0 keine großen Änderungen bringt und der neue Kernel trotz des Versionssprungs auf 3.0 nichts Besonderes ist. Genau wie andere 2.6er-Kernel bringt aber auch Linux 3.0 viele kleine und einige größere Verbesserungen.

Die herausragendste Änderung ist das Storage-Backend für Xen, durch das der Kernel nun alle wichtigen Komponenten zum Betrieb als Dom0-System mitbringt, um zusammen mit dem Xen-Hypervisor Gastsysteme zu hosten. Btrfs macht auch wieder ein Schritt vorwärts – für die Massentauglichkeit fehlt aber immer noch ein ordentliches Dateisystemcheck-Programm, das zwar in Arbeit ist, dessen Freigabe aber seit Wochen auf sich warten lässt.

Größere Änderungen hat Linux 3.0 tatsächlich weniger aufzuweisen als seine direkten Vorgänger. Auch die Zahl der Änderungen ist geringer als bei den letzten Kernel-Versionen, die die Tabelle zeigt.

Linux- Version Anzahl Dateien¹ Zeilen
Quelltext²
(Ohne Dokum.)
Entwicklungs-
zeitraum
Anzahl Commits³ Diffstat⁴
2.6.33 31565 12990041
(11564768)
83 Tage 10871 9673 files changed,
 859458 insertions(+),
 479452 deletions(-)
2.6.34 32297 13320934
(11861616)
82 Tage 9443 11154 files changed,
 609854 insertions(+),
 278958 deletions(-)
2.6.35 33316 13545604
(12250679)
77 Tage 9801 8889 files changed,
 691927 insertions(+),
 467252 deletions(-)
2.6.36 34301 13499457
(12539782)
80 Tage 9501 9202 files changed,
 582139 insertions(+),
 628362 deletions(-)
2.6.37 35191 13996612
(13006967)
76 Tage 11446 11104 files changed,
 1093202 insertions(+),
 598350 deletions(-)
2.6.38 35877 14294439
(13294464)
69 Tage 9542 9133 files changed,
 747809 insertions(+),
 455603 deletions(-)
2.6.39 36719 14619185
(13605251)
65 Tage 10268 10985 files changed,
 847537 insertions(+),
 523387 deletions(-)
3.0 36795 14732555
(13693588)
64 Tage 9153 7946 files changed,
 555406 insertions(+),
 442033 deletions(-)
¹ find . -type f -not -r⁵egex '\./\.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 v2.6.(x-1)..v2.6.(x) | wc -l
⁴ git diff --shortstat v2.6.(x-1)..v2.6.(x)

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

So ist zur Aufnahme bei 3.1 ein Patch vorgesehen, durch den der Nouveau-Treiber die Firmware selbst erzeugen kann, die zur Nutzung der Beschleunigungsfunktionen von Nvidia-Grafikkarten der Serien 400 und 500 (Fermi-GPUs) erforderlich ist. Bisher muss man die Firmware den proprietären Nvidia-Treibern mit komplizierten Tricks entlocken.

So gut wie sicher ist auch die Aufnahme des Treibers rtl8192de für die PCIe-WLAN-Chips RTL8192DE und RTL8188DE von Realtek. Zur Integration liegen auch zahlreiche Verbesserungen für den noch jungen Grafiktreiber GMA500 bereit, der unter anderem Intels US15W ("Poulsbo") anspricht; möglicherweise verlassen Teile des Treiber sogar schon bald den Staging-Bereich.

Microsoft-Entwickler K. Y. Srinivasan hat zudem eine ganze Reihe weiterer Verbesserungen für die im Staging-Bereich angesiedelten Hyper-V-Treiber entwickelt. Wenn die es alle in Linux 3.1 schaffen, dann dürfte er es bei Analysen abermals unter den Entwickler mit den meisten Änderungen schaffen; bei Linux 3.0 hat er es sogar ganz nach Vorne geschafft.

Es gibt zudem Indizien, die auf die Aufnahme der Userspace-Tracing-Lösung Uprobes hindeuten. Möglicherweise zieht auch Zero-Copy-TX-Unterstützung in Macvtap und Vhost-Net ein, was den Overhead reduziert, wenn Gastsysteme über diese Techniken zur Netzwerk-Kommunikation Daten verschicken. Angedacht ist auch eine Aufnahme des Native KVM Tool in das Tools-Verzeichnis des Kernels; ziemlich sicher ist, dass die Cpupowerutils in diesem Verzeichnis für Kernel-nahe Userspace-Programme landen.

Die nächsten zwei Wochen werden zeigen, welche Verbesserungen Torvalds tatsächlich in den Hauptentwicklungszweig integriert. Vielleicht ist das Merge Window diesmal auch etwas kürzer oder länger als sonst – das erklärte Torvalds im Vorfeld, denn durch die Verzögerungen bei der Fertigstellung von Linux 3.0 überlappt das Merge Window mehr als geplant mit seinem Tauchurlaub. Wie üblich wird das Kernel-Log in c't und auf heise open über diese und andere wichtige Neuerungen am Linux-Kernel und in dessen Umfeld berichten – dazu zählen auch neue Versionen der Stable-Kernel-Series (3.0.y), die in den kommenden Wochen den einen oder anderen Fehler korrigieren dürften, der bei der Arbeit an 3.0 übersehen wurde oder nicht rechtzeitig korrigiert werden konnte.

Zudem wird sich das Kernel-Log auf heise open wie üblich im Rahmen einer Artikel-Serie mit dem Titel "Was 3.1 bringt" umfassend mit den Neuerungen der nächsten Kernel-Version auseinander setzen. Sofern Torvalds und seine Mitstreiter im üblichen Tempo arbeiten, dürfte Linux 3.1 Mitte oder Ende September erscheinen; die wichtigsten Änderungen dieser Version wird dann wieder ein Kernel-Log wie dieses auf heise open zusammenfassen.

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)