Die Neuerungen von Linux 3.7
Größere Umbauten sollen die Treiber für Grafikhardware von Intel und Nvidia robuster machen. Linux unterstützt jetzt ARM64 und beherrscht Network Address Translation (NAT) auch mit IPv6. Die Kernel-Entwickler sind zudem einem bekannten Performance-Problem von Btrfs zu Leibe gerückt.
- Thorsten Leemhuis
Rund zehn Wochen nach der Veröffentlichung von Linux 3.6 hat Linus Torvalds jetzt den Kernel 3.7 freigegeben. Er enthält etwas mehr und etwas umfangreiche Änderungen als seine direkten Vorgänger, die nicht nur für Entwickler und Sysadmins von Bedeutung sind, sondern auch Anwender betreffen, die Linux auf Heim-PCs einsetzen.
Netzwerk
Im Detail
Bereits in den vergangenen Wochen hat das Kernel-Log in der Serie "Was Linux 3.7 bringt" detailliert über die Neuerungen von Linux 3.7 berichtet:
Der nebenstehende Text fasst die wichtigsten Neuerungen dieser Artikel zusammen und gibt einen Ausblick auf den Kernel 3.8.
Die Kernel-Hacker haben Unterstützung für Network Address Translation (NAT) mit IPv6 in Linux integriert (u. a. 1, 2). Einige Linux-Entwickler hatten den Sinn dieser Technik in Frage gestellt, weil der größere Addressraum von IPv6 NAT eigentlich unnötig macht. Die Funktion wurde nun aber doch integriert, weil die Spezifikation für NAT mit IPv6 einige Probleme der IPv4-Lösung vermeidet und sich Anwendungsfälle ergeben haben, wo NAT bei IPv6 sinnvoll ist. Beispielsweise wollen manche Anwender mit NAT ihre interne Netzwerk-Topologie geheim halten.
Die Kernel-Entwickler haben den Server-seitigen Code für "TCP Fast Open" (TFO) integriert (u. a. 1, 2, 3). Bereits Linux 3.6 enthält die Client-seitige Unterstützung dieser experimentellen TCP-Erweiterung von Google. Sie soll den HTTP-Verbindungsausfbau beschleunigen, indem die ersten beiden Schritte beim normalerweise genutzten "TCP three-way handshake" kombiniert werden.
Dateisysteme
Mehrere Optimierungen am weiterhin experimentellen Btrfs sollen das erzwungene Leeren der Schreib-Caches des Dateisystems mit fsync() beschleunigen. Das soll insbesondere die Schreib-Performance von virtuellen Maschinen erhöhen, wenn die Images der VMs auf Btrfs-Dateisystemen liegen und das Gastsystem häufig ein Fsync fordert. Btrfs steht bislang in dem Ruf, in solch einem Szenario schlechte Performance zu liefern.
Ext4 beherrscht Größenänderungen nun auch bei Laufwerken, die größer als 16 TByte sind. Das Common Internet File System (CIFS) zum Zugriff auf Windows- oder Samba-Freigaben unterstützt nun das mit Windows Vista eingeführte SMB 2.0 und dessen Windows-7-Abkömmling SMB 2.1. SMB 2 ist ein neu strukturiertes Protokoll, das zahlreiche Beschränkungen und Implementierungsschwächen der ersten SMB-Generation beseitigt, dessen Entwicklung bereits in der 80er-Jahren begann.
Grafiktreiber
Die Entwickler des Nouveau-Treibers haben den zum Kernel gehörenden Teil des Open-Source-Treibers für Nvidia-Grafikkerne grundlegend umgebaut (u. a. 1, 2, 3, 4, 5, 6). Dadurch soll er besser zu Nvidias Chips passen, die die Entwickler in den Jahren des Reverse Engineerings deutlich besser kennengelernt haben. Ziel des Ganzen ist eine saubere, weniger komplexe Treiberarchitektur, mit der sich neue Funktionen leichter implementieren lassen. Eine der angedachten neuen Funktionen ist Support für Nvidias Grafikchip-Kopplungstechnik Scalable Link Interface (SLI).
Durch größere Umbauten am Intel-Grafiktreiber i915 sollen dessen Funktionen zum Konfigurieren der Bildschirmausgänge robuster und flexibler arbeiten. Via Sysfs lassen sich nun Informationen zu den Geschwindigkeitsstufen des Grafikkerns auslesen und Limits setzen, um dadurch beispielsweise den maximalen Stromverbrauch zu begrenzen (u. a. 1, 2, 3).
Durch Umbauten am Code zur Bildschirmkonfiguration des Radeon-Grafiktreibers sollen mit neueren AMD-Grafikkernen mehr Multimonitor-Konstellationen als zuvor möglich sein; zudem soll die Leistungsaufnahme bestimmter Mehrschirmkonfigurationen sinken (1, 2, 3, 4). Dank neuer Funktionen zur Kontrolle der Hintergrundbeleuchtung sowie Verbesserungen bei der ACPI-Interaktion mit der System-Firmware §llte unter anderem die Helligkeitsregelung bei mehr Notebooks als zuvor funktioniert (1, 2, 3, 4).
Treiber
Die Unterstützung für die zur Laufzeit nutzbaren Stromsparmechanismen im Treiber für die viel genutzten HD-Audio-Chips gilt nun nicht mehr als experimentell und wird standardmäßig aktiviert. Die Kernel-Entwickler haben zudem den Support für "Runtime Power-Management" im HDA-Treiber ausgebaut, damit sich nun auch das dabei involvierte PCI/PCIe-Device schlafen legen kann. Zum Kernel stieß ein Channel Mapping API zur besseren Abfrage und Konfiguration von Audio-Kanälen, was zur Einrichtung von Surround-Sound interessant ist (1, 2, 3, 4, 5).
Das Subsystem für Human Interface Devices (HIDs) unterstützt jetzt die Sony PS3 Blue-ray Disc Remote Control. Bislang wurde die BD-Fernbedienung der Spielkonsole vom BlueZ-Userspacetreiber angesprochen – der dafür zuständige Code wurde allerdings kürzlich entfernt. Der Treiber wiimote spricht nun auch das Nintendo Balance-Board an. Der iPhone-Tethering-Treiber ipheth arbeitet nun auch mit dem iPhone 5.
Die Entwickler haben zudem die Treiberaufteilung unterhalb des Verzeichnisses drivers/media/ der Kernel-Quellen verändert, wodurch zahlreiche Treiber nun in neuen Unterverzeichnissen liegen (u. a. 1, 2, 3, 4). Neben den Umbauten am Nouveau-Treiber und einer Abtrennung der Userspace-Header ist das einer der Hauptgründe, warum eine Unterschiedsanalyse mit Diffstat so viele veränderte Codezeilen gegenüber Linux 3.6 ausweist.
Architektur, Virtualisierung, Infrastruktur, Storage
Architektur
Der Linux-Kernel unterstützt nun den 64-Bit-ARM-Befehlssatz (u. a. 1, 2, 3, 4). Der Code für den offiziell AArch64 genannte Befehlssatz wurde größtenteils von ARM-Mitarbeitern entwickelt und landete im Verzeichnis arch/arm64/ der Kernel-Quellen, wie es einige Kernel-Entwickler bei der ersten Vorstellung des Codes gefordert hatten. Dadurch ist der Code unabhängig von jenem für 32-Bit-ARM, wie es früher auch bei der x86-Architektur der Fall war. Einige Entwickler sind skeptisch, ob der richtige Ansatz ist, darunter auch Torvalds, wie ein schnippischer Kommentar in der Freigabe-Mail zur ersten Vorabversion von Linux 3.7 zeigt.
Linux 3.7 bringt zudem Multiplatform Support. Damit lässt sich nun ein Kernel-Image erzeugen, das auf verschiedenen 32-Bit-ARM-Plattformen arbeitet. Bei 3.7 unterstützen Multiplattform-Images Highbank, Mvebu, Picoxcell, Socfpga und Vexpress; bei späteren Kernel-Versionen soll weiterer Plattform-Code konvertiert werden. Letztlich soll dasselbe Kernel-Image auf möglichst vielen verschiedenen ARM-Plattformen arbeiten, wie es in der PC-Welt normal ist.
Security
Der Linux-Kernel unterstützt nun die Prozessor-Sicherheitsfunktion SMAP (Supervisor Mode Access Prevention) (u.a. 1, 2, 3, 4). Intel will diese Technik mit den Haswell-Prozessoren einführen, die offenbar ab dem ersten Halbjahr 2013 die aktuelle Ivy-Bridge-Generation ablösen sollen. SMAP soll den Speicherbereich von Programmen vor ungewollten Änderungen durch den Kernel schützen; über Kernel-Bugs verschaffen sich Angreifer mit solchen Speicheränderungen in Programmen, die mit Root-Rechten laufen, höhere Rechte im System. Details zur Technik liefern Intels Architecture Instruction Set Extensions Programming Reference ab Seite 408, ein Beitrag im Grsecurity-Forum und der Artikel "Supervisor Mode Access Protection".
Virtualisierung
Zusammen mit Entwicklerversionen des Xen-Hypervisor 4.3 kann Linux auf einigen neueren ARM-Prozessoren virtuelle Maschinen mit Hilfe der Virtualisierungsfunktionen der CPU betreiben (u. a. 1, 2). KVM-Unterstützung für die ARM-Virtualisierungsfunktionen ist noch in Vorbereitung. Einige weitere wichtige Änderungen im Bereich Virtualisierung erläutern die Mails mit den Haupt-Git-Pull-Request für den KVM-Code von Linux und die Unterstützung von Xen.
Performance Monitoring
Zur Tracing-Infrastruktur stieß das Events-Analye-Werkzeug "perf kvm", mit dem sich unter anderem auswerten lässt, wie häufig und aus welchen Gründen von einem KVM-Gast in das Wirtsystem gewechselt wurde ("VM-EXIT"). Das ist aber nur eine von vielen Verbesserungen am Tracing-Code . Neu ist etwa auch das systemweite Tracing-Tool "perf trace". Dessen Entwickler vergleicht den initialen Funktionsumfang im Commit-Kommentar grob mit dem Klassiker strace; das neue Werkzeug setze aber auf die Perf-Infrastuktur des Kernels und solle dadurch weitere Funktionen ermöglichen.
Infrastruktur
Linux 3.7 kann Kernel-Module signieren und die Signatur vor dem Laden prüfen, um ihre Unversehrtheit sicherzustellen (u. a. 1, 2, 3, 4, 5, 6, 7). Einige Unternehmensdistributionen nutzen solch eine Funktion schon länger – unter anderem, um bei der Fehlersuche sicherzustellen, dass der Anwender keine selbst gebauten Kernel-Module einsetzt. Einige Entwickler haben sich jetzt verstärkt um eine Integration der Funktion in den offiziellen Linux-Kernel bemüht, weil mehrere Distributionen beim Booten per UEFI Secure Boot nur signierte Kernel-Module laden wollen.
Eric W. Biederman hat eine größere Patch-Sammlung eingebracht, welche die Unterstützung für Namespaces verbessert (u. a. 1, 2, 3, 4). Das ist für eine striktere Trennung von User- und Gruppen-IDs zwischen Host und Containern wichtig. Die Anpassungen setzen auf den "User Namespace Enhancements" auf, die Biederman zu Linux 3.5 beigesteuert hat und die er damals als Kurskorrektur für User Namespaces bezeichnete. Biederman hat noch weitere Patch-Sammlung für Linux 3.8 in Vorbereitung, welche die größeren Umbauten am Namespace-Code abschließen soll; durch sie soll die neue Infrastruktur dann komplett sein, sodass Anwender einen Namespace anlegen und nutzen können, ohne dazu Root-Rechte haben zu müssen.
Storage
Der MD-Software-RAID-Code von 3.7 kann Datenträger eines RAID-Verbunds per Discard über frei gewordene Speicherbereiche informieren, was für SSDs und Thin Provisioning wichtig ist (1, 2, 3, 4, 5). Das Libata-Subsystem beherrscht nun den im AHCI 1.3.1 Technical Proposal spezifizierten Stromsparmechanismus "Aggressive SATA device sleep", der die Leistungsaufnahme bei Systemen mit SATA-Laufwerken reduzieren kann. Das Block-Layer beherrscht nun das "WRITE SAME"-Kommando, um ein einmalig übermitteltes Datenpaket auf alle spezifizierten IO-Bereiche zu schreiben. Auf diesem Weg lassen sich RAIDs leicht Initialisieren und komplette Datenträger effizient überschreiben.
Fazit, Trends, Statistik
Summa summarum 3.7
Die Änderungen an Grafik- und Audio-Treiber bringen vielleicht keine grandiosen Verbesserungen, sind aber weitere Bausteine, die Linux für den Einsatz auf Heim- oder Multimedia-PCs verbessern. Die Optimierungen an Btrfs, SMB2-Unterstüzung sowie NAT für IPv6 dürften so manchen Hobby- oder Berufs-Admin ansprechen; zudem hat TCP Fast Open das Potenzial, das Internetsurfen ein wenig flotter zu machen. Die bedeutsamsten Änderungen sind aber der Multiplatform-Support für 32-Bit-ARM-Plattformen und die Unterstützung für ARM64 – schließlich geht es hier um die Geräte, die wir in den nächsten Jahren in unseren Hosentaschen und vielleicht in manchen Rechenzentren haben.
Kernel-Trends: Was 3.8 bringt
Direkt nach der Freigabe von Linux 3.7 beginnt nun das Merge Window, in dem die Kernel-Entwickler den Großteil der Änderungen für die darauf folgende Linux-Version in den Hauptentwicklungszweig integrieren. Das typischerweise zwei Wochen lange Merge Window soll diesmal an Heiligabend oder vielleicht auch einige Tage davor enden, wie Torvalds bei der Freigabe von 3.7 erklärte.
Zur Aufnahme liegt unter anderem die Erweiterung kmem für den Cgroup-Controller memory bereit. Sie kann den Speicherverbrauch limitieren, den der Kernel für einen Prozess belegt. Bei passend konfigurierten Limits kann der Kernel dadurch eine mit der Shell ausgeführte "Fork-Bombe" im Zaum halten; bislang können Anwender ohne Root-Rechte damit so viel Last erzeugen, dass ein Linux-System komplett zum Stillstand kommt. Details zu kmem erläutern die Beschreibung der Patches und die Dokumentation.
Die Kernel-Entwickler arbeiten außerdem darauf hin, die KonfigurationsoptionCONFIG_EXPERIMENTAL zu entfernen. Die musste man bislang auswählen, um als experimentell gekennzeichnete Kernel-Funktionen aktivieren zu können. Zahlreiche Funktionen sind so gekennzeichnet, obwohl sie in Distributionskerneln aktiviert sind und sich auf modernen Linux-Systemen tagtäglich bewähren. Dadurch habe die Option an Bedeutung verloren, wie der Text zum Vorhaben erläutert. Bei einzelnen Funktionen wurde die Abhängigkeit von CONFIG_EXPERIMENTAL bereits bei Linux 3.7 entfernt; der großer Schwung dürfte bei 3.8 folgen. Funktionen, die tatsächlich noch experimentell sind, sollen anders gekennzeichnet werden; etwa durch ein "(EXPERIMENTAL)" in der Kurzbeschreibung.
Diskutiert wird auch die Aufnahme einiger Funktionen, mit denen der Kernel automatisch Prozesse und die von ihnen verwendete Speicherbereiche beieinander hält. Das ist für Multiprozessorsysteme mit NUMA (Non-Uniform Memory Access) wichtig: Optimale Leistung erzielt ein Prozess dann, wenn er Speicher nutzt, der dem Speichercontroller des Prozessors zugeordnet ist, auf dem der Prozess laufen. Das vermeidet Overhead durch die Kommunikation zwischen Prozessoren bei der Nutzung "fremder" Speicherbereiche.
Mit AutoNuma und sched/numa werden seit mehreren Monaten zwei unterschiedliche Ansätze entwickelt. Die Verfechter der beiden Lösungen haben auf öffentlichen Mailinglisten teilweise heftig miteinander gezankt. Weitere Entwickler haben sich kürzlich eingeschaltet und weitere Patch-Sammlungen zu den Zweck erstellt. In dem Zug haben sich mittlerweile einige Grundfunktionen herauskristallisiert, die bei den verschiedenen Ansätzen identisch oder ähnlich waren. Sie dürften in eine der nächsten Kernel-Versionen einziehen, um darauf aufbauend nach der besten Herangehensweise für eine automatische Prozess-Platzierung durch den Kernel zu suchen.
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. Sofern Torvalds und seine Mitstreiter im üblichen Tempo arbeiten, dürfte Linux 3.8 ungefähr in der zweiten Februarhälfte erscheinen.
Daten und Zahlen zu den jüngsten Versionen des Linux-Kernels
|
Linux- Version |
Anzahl Dateien¹ |
Zeilen Quelltext² (Ohne Dokum.) |
Entwick- lungs- zeitraum |
Anzahl Commits³ |
Diffstat⁴ |
| 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(-) |
| 3.4 | 38566 |
15383860 (14370856) |
63 Tage | 10899 |
11086 files changed, 576156 insertions(+), 358369 deletions(-) |
| 3.5 | 39096 |
15596378 (14556354) |
62 Tage | 10957 |
9631 files changed, 623277 insertions(+), 410757 deletions(-) |
| 3.6 | 39733 |
15868036 (14811965) |
71 Tage | 10247 |
8296 files changed, 527247 insertions(+), 255597 deletions(-) |
| 3.7 | 40905 |
16191690 (15108939) |
71 Tage | 11990 |
15886 files changed, 1567749 insertions(+), 1244085 deletions(-) |
|
¹ find . -type f -not -regex '\./\.git/.*' | wc -l ² find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l; echo "($(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) |
|||||
Linux 3.7 herunterladen
Der neue Kernel steht über Kernel.org zum Download bereit; wenige Stunden nach der Veröffentlichung liefern auch die meisten Spiegelserver die neue Version aus. Den Quellcode gibt es in Tar-Archiven, die mit Gzip, Bzip2 und Xz komprimiert wurden. Mit Befehlen wie den folgenden lässt sich die Echtheit des Archivs 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)