Der neue Kernel bringt eine Schnellverarbeitungsweg für Netzwerkpakete und Grundlagen für neue Dateisystemfunktionen bei XFS. Zahlreiche neuen und verbesserte Treiber bringen Unterstützung für Grafikchips von ARM, Intel und Nvidia. Ferner gab es einen ganzen Schwung von Änderungen, um die Sicherheit zu verbessern.

Dies war ein laufend aktualisierter Artikel Dieser Text wurde mehrfach erweitert, um vorab schrittweise alle wesentlichen Änderungen von Linux 4.8 zu beschreiben. Zur Freigabe dieses Kernels Anfang Oktober haben wir die Reihenfolge umgestellt und Absätze zu den wichtigsten Neuerungen nach vorn gestellt. Von nun an soll der Text seine jetzige Form behalten. Details zur Versionshistorie des Artikels finden Sie am Artikelende.

Linus Torvalds hat Linux 4.8 freigegeben, das mit einer Vielzahl verschiedener Neuerungen für Heimanwender, Entwicklern oder Administratoren aufwartet. Zu einer der größten Neuerungen zählt eine, die vorerst noch zu nichts nutze ist: Die Kernel-Entwickler haben eine neue Infrastruktur in XFS geschaffen, mit der das Dateisystem in naher Zukunft einige Funktionen lernen soll, die bislang Btrfs und ZFS auszeichnen.

Zu den in Vorbereitung befindlichen Features zählt Data Scrubbing, mit dem sich Datenverfälschungen durch Übertragungs- oder Medienfehler erkennen lassen. Ebenfalls in Arbeit sind Copy-On-Write (COW) für Daten und die dadurch möglichen Reflink-Kopien ( cp --reflink ); über Letztere lassen sich selbst riesige Dateien in Sekundenbruchteilen kopieren, weil nur Meta- aber keine Nutzdaten vervielfältigt werden. Die XFS-Macher planen zudem Support zur Daten-Deduplizierung. Auch die Rekonstruktion beschädigter Dateisysteme soll Dank der Erweiterungen deutliche Fortschritte machen.

Die XFS-Entwickler planen einen ganzen Schwung von Verbesserungen. (Bild: Commit-Kommentar

Durch diese und weitere Features würde XFS näher zu Btrfs und ZFS aufschließen, die solche Funktionen seit langem bieten. Diese beiden Dateisysteme würden sich allerdings nach wie vor durch direkt integrierte Volume-Manager-Funktionen abheben – XFS wäre diesbezüglich weiter auf Device Mapper, LVM, Mdraid & Co. angewiesen. Vorangetrieben werden die neuen XFS-Erweiterungen maßgeblich von einem Oracle-Mitarbeiter; er arbeitet bei der Entwicklung mit dem Red-Hat-Mitarbeiter zusammen, der die XFS-Entwicklung leitet.

Grundlage für die neu entwickelten XFS-Features ist die jetzt integrierte Reverse-Mapping-Funktion, die für sich allein zu noch nichts Zunutze ist; sie gilt vorerst als experimentell und verändert die Dateisystemstrukturen von XFS ähnlich, wie Ext4 das On-Disk-Format von Ext3 erweitert hat. Details zum Ganzen und den geplanten Erweiterungen liefern die Kommentare einiger für 4.8 vorgenommener Änderungen (1, 2, 3). Weitere Hintergründe zu den Planungen finden sich in einer Serie von Mails mit Patches, die XFS mit einigen der erwähnten Features versorgen.

Schnellstraße für Teile des Netzwerkverkehrs

Über den neuen "Express Data Path" (XDP) können beim Berkeley Packet Filter (BPF) des Kernels hinterlegte Programme die ankommenden Netzwerkpakete bei Linux 4.8 nun fallen lassen (drop), weiterleiten (forward) oder umschreiben (rewrite), sobald der Netzwerktreiber die Pakete angenommen hat (u. a. 1, 2, 3, 4). Diese von den selbst geschriebenen BPF-Programmen ausgeführten Aktionen passieren somit noch bevor der Kernel beginnt, die Pakete mit seinem Netzwerkstack zu verarbeiten. Das vermeidet den damit eingehenden Aufwand für Prozessor und Arbeitsspeicher. Dadurch lassen sich Denial-of-Service-Angriffe besser abwehren und Forwarding effizienter realisieren.

Durch diese und andere Fähigkeiten eignet sich das XDP für Aufgaben, die bislang oft mit Hilfe von Programmen umgesetzt werden, die auf Lösungen wie dem Data Plane Development Kit (DPDK) aufbauen. Solche Programme greifen Pakete früh beim Kernel ab, um diese dann im Userspace zu verarbeiten und so den Overhead des Netzwerk-Stack vom Kernel zu vermeiden. Grob gesagt kann man sich beide Ansätze wie eine Schnellstraße im Kernel (im Fall von XDP) beziehungsweise eine Kernel-Umgehungsstraße (im Fall von DPDK) vorstellen. Dabei bieten beide Lösungen viel weniger Funktionen als der Netzwerk-Stack des Kernels, können die von ihnen unterstützten Funktionen aber viel schneller erledigen.

Details zum maßgeblich von Facebook-Entwicklern vorangetriebenen XDP erläutert ein LWN.net-Bericht, der sich noch auf einen früheren Entwicklungsstand bezieht. Einige Folien von zwei Vortragspräsentationen (1, 2) geben einen Einblick, wozu Firmen den Express Data Path einsetzen wollen.

Treiber für neue Grafikprozessoren von ARM, Intel und Nvidia

Der Intel-Grafiktreiber i915 unterstützt jetzt die HD-Graphics-GPUs 500 und 505, die in einigen Anfang September vorgestellten Celeron- und Pentium-Modellen stecken. Letztere zählen zur "Apollo Lake"-Generation der Atom-Baureihe, deren GPUs der Treiber dank Broxton-Support jetzt automatisch anspricht.

Der Nouveau-Treiber unterstützt nun Nvidias Pascal-Grafikkerne GP100 und GP104, die auf einigen der neuesten Grafikkarten von Nvidia sitzen; der GP100 steckt etwa auf der GeForce GTX Titan, der GP104 auf den GeForce-GTX-Modellen 1070 und 1080. Bei Letzteren unterstützt der Treiber bislang allerdings nicht viel mehr als die Bildausgabe; Hardware-Beschleunigung für 3D, Video & Co. funktioniert noch nicht, weil das eine von Nvidia signierte Firmware erfordert, die das Unternehmen bislang nicht veröffentlicht hat.

Bildausgabe ist auch das Metier des neu zum Kernel gestoßenen Grafiktreibers Mali-DP, der die von ARM entworfenen Mali-Kerne DP500, DP550 und DP650 anspricht. Bei diesen IP-Cores handelt es sich lediglich um Display-Prozessoren zur Bildausgabe; ihnen fehlen daher Funktionseinheiten zur Hardware-Beschleunigung von Videos oder 3D, wie sie viele andere Mali-GPUs bieten.

Support für Open-Source-Prozessor

Der Kernel unterstützt jetzt auch den Prozessor "J-Core J2", dessen in VHDL (VHSIC Hardware Description Language) vorliegendes Design unter einer BSD-Lizenz steht und frei von Patenten sein soll. Dieses mit FPGAs nutzbare Prozessordesign implementiert die Befehlssatzarchitektur SuperH 2 (SH2); dieser haben die J-Core-Entwickler mit ihrer Arbeit zu neuem Leben verholfen, weil alle wesentlichen Patente zum Schutz dieser SH2-ISA (Instruction Set Architecture) ausgelaufen sind oder in naher Zukunft auslaufen. Einige Treiber für den "Open Source Prozessor" haben es aber noch nicht in den Kernel geschafft. Details zum J-Core J2 liefert neben der auf der J-Core-J2-Webseite auch ein 2015 erschienene LWN.net-Artikel, der einen Konferenzvortrag zusammenfasst. Einige am Prozessordesign und Linux-Support beteiligte Entwickler hatten dort über Hintergründe und Ziele des Ganzen erläutert. Im April haben einige J-Core-Entwickler einen ähnlichen Vortrag gehalten, von dem die Vortragsfolien und eine Videoaufzeichnung frei abrufbar sind.

Maßnahmen zum Selbstschutz

In Zukunft dürften mehr Systeme die bei Linux 3.14 eingeführte Funktion zum Verwürfeln der Kernel-internen Speicheradressen verwenden, denn diese KASLR (Kernel Address Space Layout Randomization) kollidiert nicht mehr mit der Unterstützung zum Hibernate (Ruhezustand/Suspend-to-Disk), die bei vielen Distributions-Kerneln aktiv ist. Ferner wurde KASLR verbessert, um bei 64-Bit-x86-Systemen (x86-64) die Einsprungpunkte über den gesamten Adressraum zu verteilen und Speicheradressen noch besser zu durchmischen (1, 2, 3, 4, 5, 6, 7, 8, 9); das soll es Angreifer weiter erschweren, beim Ausnutzen von Kernel-Lücken einen Speicherbereich zu finden, den sie für ihre Zwecke missbrauchen können. Die beiden Hauptentwickler hinter den Security-Erweiterungen des Grsecurity-Projekts, Brad Spengler ("Spender") und "The PaX Team", haben die praktische Bedeutung von KASLR aber vor Monaten in Frage gestellt.

Um ein Ausnutzen von Sicherheitslücken zu erschweren, kann der Kernel jetzt Datenstrukturen mit einem Schreibschutz versehen, die Module bei der Initialisierung im Arbeitsspeicher anlegen und danach nicht mehr verändern. Bei vom Kernel-Image selbst erstellten Datenstrukturen beherrscht der Kernel das schon seit Linux 4.6. Diese Funktion wurde ursprünglich für Grsecurity entwickelt. Weil sich deren zwei Hauptentwickler aber nicht nennenswert in die Entwicklung des offiziellen Linux-Kernels einbringen, hat ein anderer Programmierer im Rahmen des Kernel Self Protection Project den Code aufgegriffen und überarbeitet, damit er den Qualitätsansprüchen der Kernel-Entwickler genügte und aufgenommen wurde.

So verhält es sich auch bei der neuen "Hardened usercopy", das ein Kopieren von Daten zwischen Kernel und Userland absichert, um Angriffe zu erschweren (u. a. 1, 2, 3, 4, 5, 6, 7).

Neu ist auch "SLUB freelist randomization", der mit Heap Overflows arbeitende Angriffe erschwert, wenn der Kernel interne Speicheranforderungen mit SLUB erledigt; das ist etwa bei den Kernel von Fedora und Ubuntu der Fall. Die neue Technik ist das Pendant zu der bei Linux 4.7 eingeführten "SLAB freelist randomization", die ähnliches für den Memory Allocator SLAB erledigt.

Die folgenden Absätze wurden am 8.8.16 publiziert.

Neuer Anlauf: Virtualisierungsfunktion für Intel-Grafik

Der i915-Treiber bietet jetzt rudimentäre Unterstützung für einen überarbeiteten Ansatz, mit dem virtuelle Maschinen (VMs) den Grafikkern des Wirtsystems ansprechen können, damit ein Linux oder Windows in einer VM die 3D- oder Video-Beschleunigung der Prozessorgrafik nutzen kann.

Mit Hilfe der Intel Graphics Virtualization Technology (GVT) lassen sich Teile des im Prozessor enthaltenen Grafikkerns in virtuellen Maschinen nutzen. (Bild: Projektseite zu GVT

Der Treiber-Support für die G-Variante von Intels Graphics Virtualization Technology (GVT-g) funktioniert aber derzeit nur mit den GPUs von Broadwell-Prozessoren, zu denen die Core-i-Prozessoren der 5000er-Reihe gehören; Unterstützung für die aktuelle Skylake-Generation (6000er-Reihe) ist noch in Vorbereitung. Zudem braucht die Technik auch Unterstützung bei der Virtualisierungslösung, die Intels Entwickler als Quellcode-Patches für KVM und Xen anbieten. Es ist noch ungewiss, ob oder wann Linux-Distributionen das Ganze von Haus aus unterstützen. Details zur Technik und deren Einsatz erläutert die Projekt-Homepage; dort ist auch Code für eine ältere Herangehensweise erhältlich, die mehr Prozessorbaureihen unterstützt; einige Grundlagen für diesen offenbar verworfenen Ansatz stecken schon länger im Linux-Kernel.

Overclocking mit neuen AMD-GPUs

Der Amdgpu-Treiber erstellt jetzt Sysfs-Einträge, über die man die Radeon-Grafikkerne per "AMD OverDrive" um maximal 20 Prozent übertakten kann (1, 2, 3, 4, 5). Unter einer Reihe von Verbesserungen für die Stromsparfunktionen waren Verbesserungen für Hybridgrafik-Systeme, bei denen sich zur Prozessorgrafik noch ein Radeon-Grafikchip zuschalten lässt. Ferner sollen einige jüngst eingeführte Grafikkarten mit Polaris-Chips effizienter laufen, weil der Treiber deren Power-Management-Funktionen jetzt intensiver nutzt.

Noch mehr Änderungen bei Grafiktreibern

Einige weitere Änderungen an den Grafiktreibern erläutert der Kommentar zum Merge-Commit, der das Gros der Änderungen enthält, die die Entwickler an den Grafiktreibern vorgenommen haben. Darunter sind etwa noch einige Änderungen, die die Programmierung von Grafiktreibern erleichtern, die auf dem Direct Rendering Manager (DRM) des Kernels aufbauen. Dieser wurde einige Jahren vorwiegend von den Treibern für PC-Grafikchips genutzt, wie sie AMD, Intel und Nvidia fertigen. Mittlerweile bildet er aber die Basis für mehr als drei Dutzend Grafiktreiber; viele davon sind für Grafikkerne von ARM-SoCs, für die früher vorwiegend Framebuffer-Treiber zum Einsatz kamen.

Die folgenden Absätze wurden am 19.9.16 publiziert.

Hunderte neue und verbesserte Treiber

Die neue Version bringt einige neue und zahlreiche verbesserte Treiber, durch die der Kernel laut Linux Kernel Driver DataBase (LKDDb) rund 500 weitere Geräte oder Geräteklassen anspricht. Darunter sind neben allerlei Embedded-Komponenten und -Boards auch rund 175 neue ACPI-, PCI-, USB- und Eingabegeräte.

Beispielsweise unterstützt Linux 4.8 neun weitere Ausführungen der Intel-WLAN-Bausteine 8260 und 8265, die häufiger in Notebooks stecken (1, 2). Ferner gab es Grundlagen, um eine neue, bislang lediglich als a000-Serie bezeichnete Generation von Intels WLAN-Chips zu unterstützten (u. a. 1, 2, 3). Der Ath10k-Treiber kann jetzt auch den WLAN-Chip QCA9888 von Atheros ansteuern.

Der Kernel konfiguriert nun eine weitere Variante des Apple Magic Keyboard automatisch, sofern es per USB angeschlossen ist. Erstmals dabei ist auch ein Treiber für den Intel Virtual Button, der zur Unterstützung der Ein/Aus-Taster einiger neuer Notebooks erforderlich ist; dazu zählen etwa die Geräte der aktuellen XPS-13-Serie von Dell. Dem Kernel liegt nun auch ein Treiber für Touchpads und StickPointer von Alps bei, die per I2C angebunden werden. Ferner kann Linux 4.8 den Touchscreen des Surface 3 von Microsoft ansprechen (u. a. 1, 2, 3). Unter den größten Änderungen am Media-Subsystem war Support für den Sony HELENE DVB-S/S2 DVB-T/T2 DVB-C/C2 ISDB-T/S Tuner (CXD2858ER) und die DVB-Variante der Hauppauge WinTV quadHD. Neu dabei ist auch ein Treiber, der Error Detection and Correction (EDAC) bei Intels Skylake-Prozessoren (Core-i-6000er-Serie) implementiert.

Die erwähnten Verbesserungen zur Hardware-Unterstützung sind lediglich die sprichwörtliche Spitze des Eisbergs. Weitere Details zu Treiberumbauten finden sich in den Kommentaren zu den wichtigsten Git-Merges von Subsystemen wie Input/HID (1, 2, 3), Hardware-Monitoring, Libata PCI, Platform, Sound (1, 2), Staging und USB (1, 2); die Treiberänderungen in einigen anderen Subsystemen erwähnt dieser Text an anderer Stelle.

Die folgenden Absätze wurden am 5.9.16 publiziert.

Entfernte PCIe-SSDs performant anbinden

Linux bringt jetzt Treiber mit, um per NVM Express over Fabrics (NVMf) auf Storage-Server zuzugreifen oder selbst als NVMf-Storage-Server agieren zu können (1, 2, 3, 4, 5). NMVf ist ein für verschiedene Netzwerkverkabelungstechniken geeignetes Übertragungsprotokoll, das von Non-Volatile Memory Express (NVMe) abgeleitet wurde. Letzteres wurde zum Zugriff auf SSDs mit PCIe-Schnittstelle entwickelt; im Vergleich zu AHCI oder SCSI/SAS verspricht NMVe kürzere Latenzen und höheren Durchsatz durch stärkere Parallelisierung. Solche Vorteile auch übers Netz nutzbar zu machen ist das Ziel des erst im Frühsommer spezifizierten NVMf, über das Systeme per InfiniBand, iWARP oder RoCE (RDMA over Converged Ethernet) auf die NVMe-SSDs in Storage-Servern zugreifen können.

Device Mapper

Das RAID-Target des vom Logical Volume Manager (LVM) verwendeten Device Mapper (DM) beherrscht nun Raid Level Takeover und Raid Reshaping. Durch die Takeover-Funktion kann DM nun zwischen RAID-Arrays verschiedenster Level konvertieren, die der Kernel über den Software-RAID-Code des Multiple-Devices-Treiber (MD) anspricht. Dadurch lässt sich nun etwa ein per DM/LVM administriertes RAID 0 in ein RAID 5 verwandeln oder ein RAID 5 in ein RAID 6; das Ganze funktioniert auch in die entgegengesetzten Richtungen. Durch den neuen Reshaping-Support lassen sich Array-Parameter wie Stripe-Größe oder Mapping-Algorithmus verändern. Details zu den neuen Möglichkeiten liefert eine Dokumentationserweiterung und eine Mail aus der Begutachtungsphase.

Unter den weiteren Änderungen am Device Mapper war Unterstützung für DAX (Direct Access). Diese Funktion ist zum Einsatz von LVM auf NV-DIMMs wichtig, damit das System die gerade verarbeiteten Daten nicht unnötig im Arbeitsspeicher dupliziert.

Btrfs, Ext4, F2FS, NFS & Co.

Neben den erwähnten XFS-Änderungen gab es noch einige weitere, die unter anderem den "map based buffered write path" gebracht haben (u. a.1, 2). Dieser Kernel-interne Datenverarbeitungsmechanismus kann die Performance verbessern, weil er den Arbeitsaufwand beim Schreiben größerer Datenströme senkt.

Unter den Btrfs-spezifischen Anpassungen (1, 2) waren einige, die Latenz- und Stabilitäts-Probleme beseitigen, die bei knapp werdendem Speicherplatz auftreten können.

Beim F2FS (Flash-Friendly File System) gab es unter anderem eine Optimierung, die den Arbeitsaufwand für den Prozessor beim Schreiben reduziert. Auf Festplatten mit Host-Managed SMR (Shingled Magnetic Recording) aktiviert das Dateisystem jetzt automatisch eine Betriebsart, die dem Schreibverhalten solcher Festplatten entgegen kommt.

Der Hauptschwung mit Änderungen an Ext4 erhielten Patches, durch die die Verschlüsselungsfunktionen des Dateisystems jetzt die jüngst ins Virtual File System (VFS) integrierte Crypto-Engine verwendet; Letztere ist aus Ext4-Code entstanden, als die F2FS-Entwickler eine Ext4-ähnliche Verschlüsselungsfunktion integriert hatten.

Mit den Änderungen am NFS-Server (NFSd) stieß ein extrem simpler NFS-Server zum Kernel, der zum Testen von pNFS (Parallel NFS) Flex File Layouts gedacht ist. Ferner gab es einige Performance-Verbesserungen; solche gab es auch beim NFS-Client-Code.

Damit in Containern eingesperrte Anwender in Zukunft eigenständig Datenträger oder Dateisystemimages mounten können, haben die Kernel-Entwickler einen ganzen Schwung von Änderungen vorgenommen. Noch gelingen solche Mounts aber nicht, da noch Detailarbeit nötig ist und noch sichergestellt werden soll, dass das Ganze keine Sicherheitslücken reißt.

Das Overlayfs erhielt Grundlagen, durch die die Technik zum Übereinanderschichten von Dateisystemen bald besser mit SELinux harmonieren soll.

Die Änderungen an Ceph haben Unterstützung für RADOS Namespaces in Libceph und CephFS nachgerüstet.

Bei OrangeFS gab es unter anderem Verbesserungen am Caching (1, 2).

Einige weitere Änderungen rund um Storage-Support finden sich in den Kommentaren der Merge Commits, die die Hauptänderungen in den Bereichen Block Layer, Block Treiber, Libnvdimm, MD, SCSI und SCSI-Target enthalten.

Die folgenden Absätze wurden am 31.8.16 publiziert.

Optimierung für WLAN-Verkehr

Linux 4.8 verspricht Latenzen bei WLAN-Übertragungen zu reduzieren und so auch den Datentransfer zu beschleunigen. Diese Performance-Zuwächse sind Umbauten zu verdanken, durch die das von modernen WLAN-Treibern verwendete Subsystem Mac80211 jetzt den bei Linux 3.5 eingeführten Netzwerkpaket-Scheduling-Mechanismus "CoDel Fair-queuing" nutzt. Durch dieses Verfahren soll der Kernel die Sendezeit effizienter ausnutzen, was einige gelegentlich auftretende Latenz- und Durchsatzprobleme aus der Welt schaffen soll (u. a. 1, 2, 3).

Datenaustausch mit virtuellen Maschinen

Einen einfacheren und effizienteren Datenaustausch zwischen einem Linux-Host und darunter laufenden Virtual Machines (VMs) mit Linux verspricht die neue Virtio-Vsock-Infrastruktur (u.a. 1, 2, 3). Der Datenaustausch zwischen Host und Gast erfolgt dabei mit bekannten Paravirtualisierungstechniken, die sich dank der neuen Schnittstellen jetzt über Posix-Sockets nutzen lassen. Daher sind oft nur kleine Anpassungen nötig, damit zur Netzwerkkommunikation ausgelegte Programme den neuen Datenaustauschweg nutzen können, auch ohne eine Netzwerkverbindung zwischen Host und Gast konfigurieren zu müssen. Es gibt beispielsweise bereits Anpassungen für NFS-Server und -Client, damit diese die Daten über die neue Infrastruktur austauschen können. Details zum Ansatz erläutert eine Seite im Qemu-Wiki und zwei dort erwähnte Präsentationsfolien (1, 2); vom ersten Vortrag gibt es auch eine Video-Aufzeichung.

Per Ethernet schnell auf entfernten Speicher zugreifen

Über den neuen und zuvor extern gewarteten Treiber für "Software RDMA over Converged Ethernet" (RoCE) lässt sich Remote Direct Memory Access (RDMA) nun über beliebiger Ethernet-Hardware nutzen. Bislang wird oft InfiniBand für RDMA genutzt. Bei dieser Technik kann ein System direkt auf Speicherbereiche entfernten Systeme zugreifen, was beispielsweise Overhead beim Zugriff auf Datenträger entfernter Systeme vermeidet. Userspace-Software zum Einsatz von RoCE findet sich im SoftRoCE-Projekt auf Github.

Stauvermeidung mit New Vegas, Paketkapselung, …

Die Merge-Kommentare mit dem Hauptschwung der Änderungen am Netzwerksubsystem und RDMA-Code (1, 2) erwähnen noch eine Reihe weiterer Neuerungen. Zur besseren Steuerung des Netzwerkverkehrs und speziell der Stauvermeidung kann Linux nun den TCP-Congestion-Control-Algorithmus "New Vegas" verwenden; bei ihm handelt es sich um eine grundlegend überarbeitete Variante des Vegas-Algorithmus. Sie soll den Anforderungen moderner Rechenzentren-Netzwerke besser gerecht werden, wo Datenübertragungen mit 10 GBit/s und mehr erfolgen und Round-Trip Times (RTT) unterhalb von 10 Mikrosekunden gefragt sind.

Neu ist auch Support für NC-SI (Network Controller Sideband Interface), über das Fernwartungs-Chips (Baseboard Management Controller/BMCs) von Servern sich in Netzwerkverbindungen einklinken (u. a. 1, 2).

Optimierungen bei der Erfassung von Netzwerkverkehrsdaten über Dumps mit dem Traffic-Control-Werkzeug tc beseitigen ein Performance-Problem, das in der Google-Infrastruktur aufgefallen ist.

Der Kernel-Code zur Generic UDP Encapsulation (GUE) beherrscht jetzt auch eine Direct IP Encapsulation von IPv4- und IPv6-Paketen. Zudem wurden Grundlagen geschaffen, um bei der UDP Encapsulation die dazu geeigneten Beschleunigerfunktionen von Netzwerkchips besser nutzen zu können.

Neu dabei ist auch Unterstützung für die in RFC 5570 definierte CALIPSO (Common Architecture Label IPv6 Security Option), das Pakete mit Security-Labels versorgt, um die spätere Weiterverarbeitung und Einstufung mit Sicherheitslösungen wie SELinux oder Smack zu erleichtern (u. a. 1, 2, 3, 4).

Ferner kann das Datenübertragungsprotokoll RDS (Reliable Datagram Sockets) durch das neue Multipath RDS (mprds) nun mehrere TCP-Verbindungen nutzen, wenn es Daten mit anderen Systemen austauscht. Das kann den Datendurchsatz und die Ausfallsicherheit steigern. Details zum Ansatz erklärt die zugehörige Dokumentation; eine Abgrenzung zum seit Jahren entwickelten Multipath TCP (MPTCP) erläutert der Kommentar des Merge-Commits zu Multipath RDS.

Die folgenden Absätze wurden am 9.9.16 publiziert.

Verbesserter Zufallsgenerator

Es gab eine Reihe von Änderungen am Generator für die Zufallsdaten, die man via /dev/random und /dev/urandom abruft. Beim Abfragen über letztgenannte Gerätedatei arbeitet der Code jetzt mit dem ChaCha20-Verfahren, das effizienter und schneller sein soll. Außerdem soll der renovierte Generator jetzt besser skalieren, wenn Programme auf NUMA-Systemen große Mengen von Daten beim Pseudo-Random Number Generator (RNG) abrufen. Weitere Umbauten vergrößern den Entropie-Pool beim Betrieb in Microsofts Azure und binden Hardware RNGs bei der Initialisierung des Urandom-Pools ein.

Plug-ins, die sich in den Übersetzungsvorgang einklinken

An Kernel-Entwickler und Sicherheitsforscher richtet sich eine neue Infrastruktur, über die sich beim Kompilieren mit der GCC (GNU Compiler Collection) nun Plug-ins einklinken lassen, um den Code beim Übersetzen zu modifizieren oder näher zu analysieren; damit lassen sich etwa weitere Features realisieren oder Code auf potenzielle Schwachstellen abklopfen. Zwei solche Plug-ins wurden auch gleich in die Kernel-Quellen integriert. Das eine Plug-in ist vorwiegend zur Illustration der Möglichkeiten gedacht, das andere kann die Testabdeckung mit Kcov verbessern. Bei einem dritten Plug-in zeigte Torvalds bedenken, daher blieb es vorerst außen vor.

Der Code für diese Funktionen wurde von der GCC-Plug-in-Infrastuktur des Grsecurity-Projekts abgeleitet. Er wurde von einem Programmierer eingebracht, den die Core Infrastructure Initiative der Linux Foundation beauftragt hat, die Lösung zu überarbeiten, damit sie den Ansprüchen der Kernel-Entwickler genügt und integriert werden kann. Weitere Hintergründe zu den GCC-Plugins erläutern die Dokumentation und ein LWN.net-Bericht; er nennt auch einige weitere Plug-ins des Grsecurity-Projekts, die sich mit der neuen Infrastruktur einsetzen lassen.

ARM64-Container auf x86-64-Systemen starten

Durch einige Umbauten an der Binfmt-Misc-Infrastruktur lassen sich mit Hilfe von Qemu nun Container betreiben, die für andere Prozessorarchitektur gemacht sind. Mit diesen bei LWN.net näher beschriebenen "Architecture Emulation Containers" kann man beispielsweise auf x86-64-Systemen einen Container bauen und testen, der für ARM64-Prozessoren kompilierte Software enthält; bislang war das nicht ohne weiteres möglich, weil die Software zur Emulation anderer Architekturen im Container-Image stecken musste.

Speichermanagement optimiert

Um den Speicherverwaltungsaufwand zu verringern, kann der Kernel große Speicherseiten nun auch nutzen, wenn er Inhalte von Dateien über den Page-Cache im Arbeitsspeicher hält; bislang funktioniert das aber nur mit Tmpfs und Shmem (u. a. 1, 2, 4, 5). Einige Hintergründe zur maßgeblich von Kirill A. Shutemov entwickelten Erweiterung liefert ein LWN.net-Artikel; er beschreibt auch einen alternativen Ansatz, der den Kürzeren zog, obwohl Google ihn bereits seit über einem Jahr auf seinen Servern einsetzt.

Der neue Kernel kann mehr Performance aus Servern mit mehreren Prozessoren kitzeln. Das geht aus Messwerten zu einigen Änderungen am Speichermanagement hervor (u. a. 1, 2), von denen Systeme mit NUMA (Non-uniform Memory Access) bei manchen Umgebungsbedingungen profitieren können.

Der Kernel soll in Zukunft interne Anforderungen nach größeren und zugleich zusammenhängenden Speicherbereichen zuverlässiger erfüllen können. Dazu wurde eine Möglichkeit geschaffen, um nun auch einige der eigentlich als unbeweglich gekennzeichneten Speicherareale verschieben zu können, um so die Fragmentierung des RAMs zu reduzieren.

Neue Formate und Werkzeuge zur Dokumentation

Nach einigen Vorarbeiten bei Linux 4.7 haben die Kernel-Entwickler die neue Infrastruktur zum Schreiben von Kernel-Dokumentation jetzt komplettiert. Sie verwendet reStructuredText (RST) als Dateiformat und das vom Python-Projekt eingesetzte Sphinx zum Aufbereiten in Formate wie PDF oder HTML. Eine Datei in den Kernel-Quellen beschreibt den neuen Ansatz und dessen Einsatz; weitere Hintergründe erläutern zwei LWN.net-Artikel (1, 2). Die Dokumentation der DRM- und Media- Subsysteme wurde bereits von Docbook- auf RST-Format umgestellt. Diese und einige noch angedachte Umbauten sollen die Kernel-Dokumentation übersichtlicher machen.

Änderungen für Raspberry Pi & Co.

Die Kernel-Entwickler haben die Datei bcm_defconfig entfernt, die Konfiguration zum Bau eines Kernels für den Raspberry Pi enthielt. Stattdessen kann man jetzt die in multi_v7_defconfig vorliegende Konfiguration nutzen, die einen Kernel baut, der auf dem Raspi und vielen anderen ARM-v7-Plattformen bootet.

Damit auch der offizielle Linux-Kernel ohne weitere Patches auf dem Raspberry Pi 3 läuft, haben die Kernel-Entwickler einigen Code zur Unterstützung dieses Kleinstcomputers integriert (1, 2).

Der Kernel bietet eine neue Schnittstelle zur Programmierung von Kontaktstiften für GPIO (General-purpose input/output), wie sie unter anderem auf dem Raspberry Pi zu finden sind. Der neue Ansatz löst die Programmierung via Sysfs ab und soll dabei flexibler und mächtiger sein; es mangelt aber noch an Dokumentation.

Einen Überblick zu weiteren Neuerungen für ARM-SoCs (System on Chips) und -Platformen liefern die Kommentare einer Reihe von Merge Commits für ARM (1, 2, 3, 4, 5, 6, 7) und ARM64 (1, 2).

Vor allem für Kleinst- und Bastel-Rechner ist auch eine neue Funktion im ACPI-Code interessant, durch die sich ACPI-Tabellen zur Verwendung optionaler oder selbst entwickelter Hardware über EFI-Variablen, Initramfs oder Configfs nachladen lassen; das ist etwa zum Anbinden von per I2C/SPI angesprochenen Sensoren oder Erweiterungskarten relevant.

Detailverbesserungen an der Infrastruktur

Unter den anderen Änderungen am ACPI-Code steckte Support für das mit ACPI 6.0 definierte Schlafzustand-LPI (Low-Power Idle) (1, 2), Unterstützung für die Boot Error Record Table (BERT) und ACPI-basierter NUMA-Support für ARM64. Beim Power-Management-Code gab es diesmal einige Detailverbesserungen, aber keine größeren Neuheiten (1, 2). Um den Stromverbrauch zu reduzieren, kann der Kernel jetzt auch PCIe-Bridges und -Ports schlafen legen.

Den neuen Linux-Kernel herunterladen und einrichten Die neue Linux-Version steht wie gewohnt über Kernel.org zum Download bereit. Hinweise zur Einrichtung eines eigenen Kernels finden Sie im Artikel "Linux-Kernel maßgeschneidert". Das darin beschriebene Make-Target make localmodconfig erzeugt weitgehend automatisch eine auf Ihr System zugeschnittene Kernel-Konfiguration, mit der Sie in wenigen Minuten eine neue Linux-Version einrichten können. Fedora und Rolling-Release-Distributionen wie Arch Linux, Gentoo und OpenSuse Tumbleweed dürften die neue Kernel-Version in den nächsten Wochen über die Systemaktualisierung erhalten. Bei OpenSuse Leap, Ubuntu und vielen anderen klassisch gewarteten Distributionen wird das nicht passieren, denn dort macht der Kernel nur beim Wechsel auf eine neue Ausgabe der Distribution einen Versionssprung.

Bei den wesentlichsten Umbauten an KVM (1, 2) finden sich Anpassungen, durch die sich nun virtuelle Maschinen mit mehr als 255 Prozessor-Kernen aufsetzen lassen (1, 2, 3). Bei Xen gab es unter anderem Verbesserungen bei der Zeitverteilungsfunktion, die die Performance ein klein wenig verbessern können.

Zu den Neuerungen beim Crypto-Subsystem gehört die Unterstützung der Algorithmen SHA3 und ECDH (Elliptic Curve Diffie-Hellman).

Die Kernel-Entwickler haben einen Zeitgeber-Mechanismus verändert, was in bestimmten Situationen die Performance ein klein wenig verbessert und zugleich Latenzen vermeidet, die in Realtime-Umgebungen stören können. Details zum Ganzen erläutert ein Commit-Kommnetar und ein älterer LWN.net-Artikel.

Zwischen den Änderungen am Code für POWER-Prozessoren steckt ein JIT-Compiler für den EBPF (Extended Berkeley Packet Filter) sowie weiterer Code für die kürzlich angekündigte und Anfang 2017 erwartete Power9-Architektur (1, 2).

Nachdem der Code für die Sicherheitstechnik Apparmor lange kaum verändert wurde, brachten die Änderungen am Security-Subsystem nun eine Reihe von Korrekturen, die Ubuntu schon länger in seinen Kernel einsetzt und teilweise für die Absicherung von Snap-Paketen braucht.

Wie seit einiger Zeit üblich, gab es auch diesmal wieder einen großen Schwung von Verbesserungen am Perf-Subsystem und dem darauf zurückgreifenden Werkzeug perf , mit dem sich viele Performance-Analyse-Funktionen moderner Prozessoren nutzen lassen. Eine der vielen Neuerungen: Auf einer Prozessorarchitektur (etwa ARM64) per --call-graph dwarf gesammelte Analysedaten lassen sich jetzt auch auf anderen Prozessor-Architekturen (beispielsweise x86-64) analysieren.

Daten und Zahlen zu den jüngsten Versionen des Linux-Kernels

Kernel-

Version Anzahl

Dateien¹ Zeilen

Quelltext

(Ohne Doku)² Entwick-

lungs-

zeitraum Anzahl

Commits³ Diffstat⁴ Linux 4.0 48957

19312477

(17847304)

63 Tage

11306

9489 files changed,

508686insertions(+),

326917 deletions(-) Linux 4.1 49457 19512593

(18004436) 70 Tage 12965 10094 files changed,

453375 insertions(+),

253259 deletions(-) Linux 4.2 50795 20311825

(18755735)

70 Tage 14750 10926 files changed,

1079245 insertions(+),

280008 deletions(-) Linux 4.3 51570 20621444

(19031051) 63 Tage 13282 10385 files changed,

642760 insertions(+),

333026 deletions(-) Linux 4.4 52221 20862229

(19243827) 70 Tage 14082 10604 files changed,

713754 insertions(+),

470774 deletions(-) Linux 4.5 52916 21154659

(19489725) 63 Tage 13173 11590 files changed,

1146355 insertions(+),

854286 deletions(-) Linux 4.6 53660 21422808

(19724413) 63 Tage 14618 10250 files changed,

606023 insertions(+),

337875 deletions(-) Linux 4.7 54400 21720955

(19971725) 70 Tage 13433 9909 files changed,

575816 insertions(+),

277305 deletions(-) Linux 4.8 55503 22071048

(20266168) 70 Tage 14552 11483 files changed,

662558 insertions(+),

314177 deletions(-) ¹ git ls-tree -r --name-only HEAD | 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 --pretty=oneline vx.(y-1)..vx.(y) | wc -l

⁴ git diff --shortstat vx.(y-1)..vx.(y)

(thl)

