Die Neuerungen von Linux 4.3 | heise online

Die Neuerungen von Linux 4.3

Der Linux-Kernel unterstützt jetzt die neuesten Grafikprozessoren von AMD und Intel. Neu ist auch eine Funktion, um Amok laufende Prozesse einzudämmen. Der Ext3-Dateisystemcode musste weichen und IPv6 wird jetzt standardmäßig eingebaut.

vorlesen Druckansicht 29 Kommentare lesen
Lesezeit: 15 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Der jetzt erhältliche Linux-Kernel 4.3 spricht erstmals automatisch die Grafikkerne an, die in Intels im August eingeführter Prozessorgeneration "Skylake" stecken. Damit bringt der Kernel jetzt endlich alle für Core-i-6000er-CPUs wichtigen Treiber mit, denn mehr als ein Dutzend anderer Kernel-Treiber unterstützten diese und andere Skylake-CPUs schon zuvor.

Das kürzlich vorgestellte Ubuntu 15.10 enthält bereits die in 4.3 eingeflossenen Änderungen, um die Grafikkerne der in vielen neuen PC- und Notebook-Modellen verbauten Skylake-Prozessoren anzusprechen. Auch die Grafiktreiber in älteren 4.x-Kerneln unterstützen die Skylake-Grafikkerne bereits, sofern man beim Booten den Kernel-Parameter i915.preliminary_hw_support=1 übergibt. Passende 3D-Treiber bringt Mesa schon seit der im März veröffentlichten Version 10.5 mit, daher stecken diese schon in vielen aktuellen Distributionen.

Der Grafiktreiber Amdgpu, der zu den wichtigsten Neuerungen von Linux 4.2 zählt, spricht jetzt auch die Grafikprozessoren der Fiji-Reihe an (u. a. 1, 2, 3). In Kombination mit einem 3D-Treiber des im September veröffentlichten Mesa 11.0 werden Linux-Distributionen so bald von Haus aus die 3D-Beschleunigung von Fiji-Chips verwenden können. Solche stecken beispielsweise auf den Radeon-R9-Grafikkarten der Fury-Serie, bei denen es sich um die derzeit leistungsfähigsten AMD-Grafikkarten handelt. Fürs Erste entlockt ihnen der Kernel-Treiber allerdings nur einen Teil ihres Leistungspotenzials, denn er kann die Taktfrequenzen von Grafikprozessor und -Speicher nicht ändern und die Karten somit weder in die schnellsten noch in die stromsparendsten Betriebsmodi schalten. AMDs Entwickler wollen dieses Manko bei einer der kommenden Kernel-Versionen beseitigen.

Die Kernel-Entwickler haben den Ext3-Dateisystem-Code entfernt, um die Pflege und Weiterentwicklung des Kernels zu erleichtern. Für Anwender ändert sich dadurch allerdings nichts: Der Kernel kann Ext3-Dateisysteme schon lange mit dem Code des Ext4-Dateisystems ansprechen, das aus Ext3 hervorgegangenen ist. Die großen Linux-Distributionen nutzen diesen Weg schon länger, um auf das früher weit verbreitete und von Ext4 verdrängte Ext3 zuzugreifen.

Zum Bau eines eigenen Kernels sind jetzt die Entwicklerdateien der OpenSSL-Bibliothek erforderlich, sofern die Kernel-Konfiguration denn spezifiziert, dass die Kernel-Module signiert werden sollen. In den Konfigurationsdateien vieler Distributionskernel ist das der Fall. Wer diese als Ausgangspunkt für eigene Kernel-Konfigurationen nimmt, muss also die Option MODULE_SIG abschalten, wenn er die Entwicklerdateien nicht nachinstallieren will; bei Debian und davon abgeleiteten Distributionen stecken diese im Paket libssl-dev, bei Fedora und Co. in openssl-devel.

Die Abhängigkeit von OpenSSL ist durch den Wechsel auf ein neues Signatur-Werkzeug bedingt, das das in RFC5652 definierte Format PKCS#7 (Public-Key Cryptography Standards 7) nutzt (1, 2). Durch diese Anpassungen kann der Kernel nun auch die Signatur von Firmware- oder Kernel-Images prüfen. Das ist beispielsweise für Distributionen relevant, die Kexec bei aktivem UEFI Secure Boot deaktivieren, damit Angreifer darüber keine Kernel booten, die keine als vertrauenswürdig eingestufte Signatur tragen.

Über den neuen "PIDs Controller" kann der Kernel die Zahl der Prozesse begrenzen, die einer Control Group (Cgroup) zugeordnete Prozesse erzeugen dürfen. Damit lassen sich Fork-Bomben in die Schranken weisen. Bei solchen erzeugt ein böswilliger Prozess Kopien seiner selbst, die immer wieder das gleiche tun; das überlastet ein System so stark, dass es zum Stillstand kommt, weil andere Anwendungen nicht mehr ausreichend zum Zug kommen.

Zum Speichermanagement-Code stieß eine "userfaultfd" genannten Funktion (u. a. 1, 2). Diese wurde vornehmlich entwickelt, um die Zeit zu reduzieren, die Virtualisierungssoftware wie KVM zum Verlagern einer laufenden virtuelle Maschine (VM) auf einen anderen Wirt benötigt. Durch Userfaultfd braucht die Virtualisierungssoftware den Arbeitsspeicherinhalt der VM nicht mehr komplett vorab zu übertragen; stattdessen kann sie die Live-Migration durchführen und noch nicht übertragene Speicherbereiche mit Hilfe des Kernels sofort nachfordern, wenn die VM auf dem neuen Wirt darauf zugreift; das geht allerdings zu Lasten der Speicherperformance, bis der Arbeitsspeicher komplett übertragen wurde. Details erläutern die Userfaultfd-Dokumentation und zwei Artikel bei LWN.net (1, 2).

Zum Treibercode für AMDs Grafikprozessoren stieß ein einfaches Scheduling Framework (u. a. 1, 2, 3). Mit ihm kann der Kernel-Treiber die von verschiedenen Treibern oder Prozessen abgesetzten Befehlsketten eigenständig auf die Recheneinheiten des Grafikprozessors verteilen, damit Letzterer möglichst effizient arbeitet. Solch ein Scheduling Framework könnte die verschiedenen Befehlsketten auch umsortieren, um sie mit unterschiedlicher Priorität zu verarbeiten – etwa um zuerst alle für die 3D-Performance eines gerade laufenden Spiels wichtige Befehle auszuführen, bevor der Grafikchip sich den Berechnungen widmet, die ein im Hintergrund laufendes OpenCL-Programm auf dem Grafikprozessor ausführt. Bei Linux 4.3 arbeitet der Treibercode die Befehlsketten aber weiterhin in Eingangsreihenfolge ab, denn das Scheduling Framework ist vorerst standardmäßig inaktiv.

Linux 4.3 soll die GeForce-GTX-Grafikkarten 260, 275, 280, 285 und 295 in die schnelleren Betriebsmodi schalten können, um ihnen so mehr 3D-Performance zu entlocken; das gelingt, weil der Nouveau-Treiber bei diesen und anderen Grafikkarten der GT200-Reihe nun die Taktfrequenz von Grafikprozessor und -Speicher anpassen kann. Unabhängig davon haben die Nouveau-Entwickler den Code ihres Treiber tiefgreifend umstrukturiert, um Pflege und Weiterentwicklung des quelloffenen Nvidia-Treibers zu vereinfachen.

Größere Umbauten gab es auch am Treiber für die Grafikprozessoren, die viele der Virtualisierungsprodukte von VMware emulieren (u. a. 1, 2, 3, 4, 5); durch diese Änderungen können die in Mesa enthaltenen VMware-3D-Treiber nun OpenGL 3.3 unterstützen.

Einige weitere Neuerungen an den Kernel-Grafiktreibern listet der Kommentar zum Git-Merge, der das Gros der Änderungen am für PCs wichtigsten Grafiktreiber-Framework des Kernels enthält. Details zu Verbesserungen am Intel-Treiber listet dessen Betreuer in einem Blog-Eintrag.

Weil "IPv6 jetzt ein Herzstück von Internet und Linux-Kernel" sei, wird das Internet-Protokoll bei der Kernel-Konfiguration jetzt standardmäßig aktiviert. Für viele Nutzer ändert sich dadurch allerdings nichts, denn die Kernel der großen Distributionen unterstützen den IPv4-Nachfolger ohnehin seit Jahren.

Einige unter den Oberbegriffen "Lightweight & flow based encapsulation" beziehungsweise "Light weight tunnels" entwickelte Änderungen haben einen neuen Mechanismus zum Tunneln von Netzwerkpaketen eingeführt, der weniger Overhead aufweisen und besser skalieren soll. Durch die Änderungen nutzt das virtuelle Multilayer-Switch-Framework Open vSwitch (OVS) nun für Tunnel nicht mehr sein eigenes Vport-Konzept, sondern die auch sonst für Tunnel genutzten Netdevices. Dadurch fügt sich OVS besser in den Kernel ein und wird auch für andere Subsysteme nutzbar. Der Betreuer des Netzwerk-Subsystems scherzt in einem Merge-Kommentar, er habe Stimmen gehört, die Anpassungen seien zur "Netzwerkänderung des Jahres" gewählt worden.

Dieser Git-Merge-Kommentar erwähnt noch einige andere Neuerungen. Darunter ist die Unterstützung für Connection-Tracking-Support bei Open vSwitch und Virtual Routing and Forwarding; durch Letzteres lassen sich Routing-Tabellen partitionieren, damit bestimmte Prozesse ein anderes Default-Gateway nutzen.

Ebenfalls neu ist Unterstützung für Identifier Locator Addressing (ILA), das die Kommunikation mit Containern oder Programmen vereinfachen soll, die gelegentlich innerhalb eines Rechenzentrums zwischen den Systemen umziehen. Dazu wird NAT (Network Adress Translation) mit IPv6 genutzt, um so Tunnel und Netzwerkvirtualisierung zu realisieren, ohne die Pakete per Encapsulation in andere einbetten zu müssen. Dadurch soll das von Facebook-Entwicklern vorangetriebene und bei der IETF noch als Draft gehandelte Verfahren bessere Performance liefern; weitere Details liefern ein Merge-Commit-Kommentar und ein Artikel bei LWN.net.

Das Regeln des Netzwerkverkehrs mit tc (Traffic Control) soll auf Mehrprozessorsystemen nun deutlich besser skalieren, weil die Kernel-Entwickler die Locking-Mechanismen der dabei verwendeten Kernel-Infrastruktur optimiert haben; bei Tests eines der beteiligten Entwickler steigerte das den Durchsatz von 5 auf 11 Millionen Pakete pro Sekunde.

Neu dabei ist auch ein Treiber für den von Mellanox gebauten Switch-Prozessor SwitchX-2 (u. a. 1, 2, 3). Er baut auf die bei Linux 3.19 integrierte Infrastruktur auf, mit der sich viele Switching- und Routing-Aufgaben an Hardware-Bausteine delegieren lassen, die für solche Aufgaben geschaffen wurden. Durch solche Treiber sollen sich universelle Linux-Distributionen mittelfristig als Betriebssysteme für Switches eignen, wie sie in Rechenzentren stehen. Solche "Linux-Switches" ließen sich mit bekannten Linux-Programmen wie den Iproute2-Werkzeugen, Nftables oder Open vSwitch transparent verwalten; sie wären so flexibler und leichter zu handhaben als aktuelle Modelle, die häufig proprietäre Software einsetzen.

Unter den zahlreichen neuen und um Unterstützung für weitere Hardware erweiterten Treibern ist einer für Gigabit-Netzwerk-Adapter, die USB-3-Chips der LAN7800-Familie von Microchip enthalten. Der Wacom-Treiber unterstützt jetzt die Express Key Remote. Neu dabei ist ein Treiber für die PCIe-TV-Karte "NetUP Universal DVB-S/S2/T/T2/C", die alle gängigen DVB-Standards unterstützt. Zudem gab es einige Verbesserungen am Treiber für Funktionen, die Toshiba in seine Notebooks einbaut.

Neben dem schon lange in Autos verwendeten Bus-System CAN unterstützt Linux nun auch MOST (Media Oriented Systems Transport), über das Multimedia-Geräte moderner Autos vielfach kommunizieren (u. a. 1, 2, 3, Dokumentation). Der MOST-Treibercode erfüllt allerdings die Qualitätsansprüche der Kernel-Entwickler nicht. Er landete daher im Staging-Bereich, in den mangelhafter Code einfließen kann, wenn ein Programmierer ihn im Rahmen der normalen Kernel-Entwicklung verbessern will. Anders als normale Kernel-Funktionen fliegt Staging-Code allerdings ohne Rücksicht auf die Anwender wieder raus, falls niemand die Mängel angeht – dieses Schicksal ereilte bei 4.3 den Treiber Ozwpan, der via WLAN ansprechbare USB-Controller von Ozmo unterstützt.

Durch einige Änderungen nutzt der Prozess-Scheduler jetzt ein genaueres und zugleich effizienteres Verfahren, um die von Prozessen erzeugte CPU-Last zu berechnen. Das soll Prozess-Verteilung auf Mehrprozessorsystemen verbessern und so Performance und Effizienz steigern, wie der Entwickler der Änderungen und der Betreuer des Schedulers schreiben; Letzterer erwähnt zugleich allerdings, man müsse die Augen offen halten, ob das neue Verfahren in Einzelfällen womöglich schlechter arbeite.

Die neuen "Ambient capabilities" sollen die Einsatzmöglichkeiten von Capabilities verbessern, mit denen von Anwendern gestartete Programme bestimmte Aufgaben durchführen können, für die normalerweise Root-Rechte erforderlich wären. Capabilities werden in der Linux-Welt bislang eher spärlich eingesetzt, weil sie einige in der Praxis hinderliche Eigenschaften aufweisen. Eine davon, die sich um die Vererbung von Berechtigungen dreht, versprechen die Ambient Capabilities aus der Welt zu schaffen; Details erläutern der Commit-Kommentar und ein LWN.net-Artikel.

Eine Änderung am Speichermanagementcode kann die Speicherperformance von Systemen mit vielen CPU-Kernen steigern, wenn es dort viele konkurrierende Speicherzugriffe gibt. Über das neue Idle Page Tracking lässt sich besser feststellen, wie viel Arbeitsspeicher ein Prozess tatsächlich nutzt. Das ist etwa beim Setzen passender Speicher-Limits über Control Groups wichtig; Details hierzu sind in der zugehörigen Dokumentation und einem LWN.net-Artikel nachzulesen.

Der Kernel hat einen weiteren Funktionsaufruf bekommen, um Kernel-intern verarbeitete Zeichenketten zugleich effizient und sicher zu kopieren, ohne Pufferüberläufe zu riskieren. Der strscpy genannte und optionale Aufruf soll einige Probleme früherer Ansätze zum Verarbeitung von Strings ausräumen; Torvalds hat den Code sehr genau beäugt, bevor er diesen integrierte. Weitere Hintergründe erläutern der Git-Merge-Kommentar, der Commit-Kommentar und ein LWN.net-Artikel.

Der Kernel enthält jetzt Basis-Unterstützung für einige Funktionseinheiten in Nvidias ARMv8-Prozessor Tegra X1 (u. a. 1, 2, 3). Ferner kann der Kernel nun drei der Funktionen nutzen, die ARM vor einigen Monaten mit Version 8.1 der ARM-Spezifikation eingeführt hat. Darunter ist etwa "Privileged Access Never" (PAN); Programme können darüber den Zugriff auf Arbeitsspeicherbereiche einschränken, um Angreifern und Schadsoftware das Auslesen wichtiger Daten zu erschweren.

Das im Rahmen des Kernels entwickelte Performance-Analyse- und Tracing-Werkzeug perf unterstützt jetzt Processor Trace (PT) (u. a. 1, 2, 3, 4, 5, 6, 7, 8). Diese von Intel bei den Core-i-Prozessoren der 5000er-Serie (Codename "Broadwell") eingeführte Tracing-Technik ist erheblich besser auf die Ablaufverfolgung und Performance-Analyse von Multi-Threaded-Anwendungen ausgelegt als die Performance Monitoring Unit (PMU) älterer Intel-Prozessoren. Beim Beobachten des Codeflusses fällt zudem weniger Overhead an als bei Software-Lösungen wie Ftrace (Function Trace), wodurch der Analyselauf mehr dem Produktivbetrieb ähnelt. Entwickler und Admins können mit Processor Trace besser die Codebereiche aufspüren, bei denen sich Optimierungen am meisten lohnen, weil der Code für die Arbeitsgeschwindigkeit von System oder Programmen kritisch ist.

Auf solche Einsatzzwecke zielt auch eine Erweiterung, durch die sich eBPF-Programme verwenden lassen, wenn man die Abläufe in Anwendungen mit Uprobes (User-space Probing) analysiert. Solche Filter lassen sich in einer C-ähnlichen Syntax schreiben, mit Hilfe von LLVM kompilieren und zur Laufzeit in den Kernel laden, der sie mit recht wenig Overhead ausführt; das macht Performance-Analysen und Debugging von Anwendungen schneller und flexibler. Durch diese und andere Verbesserungen an der Performance-Analyse-Infrastruktur des Kernels schließt Linux wieder ein wenig weiter zum für Solaris entwickelten und in dessen Umfeld sehr geschätzten Dtrace auf.

Direkt nach der Freigabe von Linux 4.3 beginnt nun die Phase, in der Linus Torvalds das Gros der Änderungen für den als über zwei Jahre gepflegten Kernel 4.4 annimmt; dieses "Merge Window" beendet er typischerweise nach zwei Wochen mit der Veröffentlichung einer ersten Vorabversion der nächsten größeren Überarbeitung des Kernels.

Zur Aufnahme sind unter anderem einige Änderungen vorgesehen, durch die in virtuellen Maschine (VM) laufende Linux-Distributionen die 3D-Beschleunigung des Hosts nutzen können. Die Integration von Kdbus wurde vertagt, daher wird der IPC-Dienst nicht in 4.4 einziehen. Sofern Torvalds und seine Mitstreiter im gewohnten Tempo arbeiten, sollte das zwei Jahre gepflegte Linux 4.4 in der ersten Januarhälfte erscheinen. Ein Artikel wie dieser wird dann wieder einen Überblick über die wichtigsten Neuerungen liefern.

Kernel-
Version
Anzahl
Dateien¹
Zeilen
Quelltext
(Ohne Doku)²
Entwick-
lungs-
zeitraum
Anzahl
Commits³
Diffstat⁴
Linux 3.17 47503 18864388
(17484200)
63 Tage 13331 10605 files changed,
 651466 insertions(+),
 666200 deletions(-)
Linux 3.18 47986 18994096
(17586160)
63 Tage 12361 9303 files changed,
 485509 insertions(+),
 355800 deletions(-)
Linux 3.19 48440 19130604
(17692109)
63 Tage 13652 10739 files changed,
483355 insertions(+),
346843 deletions(-)
Linux 4.0 48957
19312370
(17847304)
63 Tage
11306
9489 files changed,
 508686insertions(+),
 326917 deletions(-)
Linux 4.1 49457 19512485
(18004436)
70 Tage 12965 10094 files changed,
 453375 insertions(+),
 253259 deletions(-)
Linux 4.2 50795 20311717
(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(-)
¹ 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)

Die neue Linux-Version steht über Kernel.org zum Download bereit. Einige Hinweise zur Installation eines neuen Kernels finden Sie im Artikel "Linux-Kernel maßgeschneidert", der ein einfaches Konfigurieren und Übersetzen eines Kernels mit Hilfe des Make-Targets localmodconfig beschreibt. (thl) (thl)