zurück zum Artikel

Die Neuerungen von Linux 4.12

Trends & News | Kernel-Log

Linux 4.12 verbessert das Live Patching und unterstützt AMDs neue High-End-Grafikchips. Zwei neue I/O Scheduler versprechen die Redaktionsfreude von Desktops und Servern zu steigern. Die Netzwerk-Schnellstrecke Express Data Path (XDP) lässt sich jetzt universell nutzen.

Zum Start der ersten Juli-Woche hat Linus Torvalds die Linux-Version 4.12 freigegeben. Wie seine Vorgänger wartet auch der neue Kernel mit zahlreichen Neuerungen auf. Die wichtigsten im Kurzüberblick, bevor dieser Text in die Details geht:

Das Kernel-Log

Die Artikelserie "Die Neuerungen von Linux" beschreibt regelmäßig die Änderungen neuer Linux-Versionen:

Durch diese und zahlreiche weitere Umbauten wuchs der Quellcode von Linux um über 1 Millionen Zeilen auf 24,2 Millionen "Lines of Code". Die Kernel-Entwickler haben für die neue Version außerdem rund fünfzehntausend Änderungen ins Quellcodeverwaltungssystem eingepflegt. Mit beiden Werten bricht Linux 4.12 zwar keine Rekorde, erklimmt aber einen der vorderen Plätze in der Top-Ten von Linux-Releases mit den meisten Änderungen.

Änderungen an der Infrastruktur zum Kernel Live Patching (KLP) legen Grundlagen, durch die sich in Zukunft deutlich mehr Sicherheitslücken des Linux-Kernels im Betrieb beheben lassen. Mit dem vor zwei Jahren bei Linux 4.0 [10] eingeführten KLP gelang das bislang nur bei zirka 90 Prozent der typischen Sicherheitslücken – das sind weniger als bei den indirekten Vorläufern Kpatch und Kgraft, mit denen sich schon zuvor rund 95 Prozent der Lücken stopfen ließen. Die jetzigen Änderungen legen mit dem "Per-Task Consistency Model [11]" ein Fundament, um mit KLP letzten Endes alle Lücken zur Laufzeit beheben zu können. Der neue Ansatz kann in mehr Situationen als zuvor sicherstellen, dass KLP keinen Codeabschnitt modifiziert, der gerade irgendwo ausgeführt wird. Das neue, seit vielen Monaten entwickelte Konsistenzmodell ist ein Hybrid der Herangehensweisen von Kpatch und Kgraft.

Dies war ein schrittweise aktualisierter Artikel

Dieser Text wurde mehrfach erweitert, um nach und nach alle wesentlichen Änderungen Linux 4.12 zu beschreiben. Zur jüngst erfolgten Freigabe dieser Kernel-Version haben wir die Absätze umsortiert und Abschnitte zu wichtigeren Neuerungen an den Anfang gestellt. Von nun an behält der Text seine jetzige Form. Details zur Versionshistorie des Artikels finden Sie am Artikelende [12].

Durch den neuen Ansatz lassen sich nun auch Lücken stopfen, bei denen ein Live-Patch die im Speicher liegenden Funktions- oder Daten-Semantiken modifizieren muss. Das Ganze klappt aber nur auf Architekturen, die verlässliche Stack-Traces bieten – das ist ab 4.12 lediglich beim x86-Code der Fall [13]. Durch die Änderungen lassen sich nun auch Kernel-Module mit Live-Patches entladen [14], die nicht mehr benötigt werden.

Der bei Linux 4.8 [16] eingeführte Express Data Path (XDP) lässt sich Dank "Generic XDP [17]" jetzt mit beliebigen Netzwerkschnittstellen nutzen. XDP ist grob gesagt ein Schnellstraße für bestimmte Netzwerk-Pakete, über die sich manche Aufgaben deutlich schneller erledigen lassen, weil sie die Verarbeitung durch den mächtigen und komplexen Netzwerk-Stack umgeht.

Einen großen Performance-Gewinn verspricht Generic XDP aber nicht, denn es ist unter anderem als Referenzimplementation gedacht. Er richtet sich außerdem an Entwickler, damit die ihre auf den XDP zurückgreifenden Programme mit beliebigen Netzwerk-Chips schreiben und testen können. Details hierzu und zu XDP im Allgemeinen finden sich im Blog-Beitrag [18] eines der Entwickler des Netzwerk-Codes. Dieser hat zudem kürzlich in einem frei abrufbaren Vortrag gezeigt, wie man bestimmte Pakete mit XDP früh fallen lassen kann, um so die Auswirkungen eines DDoS-Angriffs erheblich zu lindern (Videoaufzeichnung [19], Präsentationsfolien [20]).

AMD
Bislang gelingt mit Vega-Grafikkarten nur ein Headless-Betrieb. (Bild: AMD)

Support für AMDs Grafikprozessoren der "Vega"-Generation zählt zu einer der größeren Neuerungen von Linux 4.12 (u. a. 1 [22], 2 [23], 3 [24], 4 [25], 5 [26], 6 [27], 7 [28]). Für Endanwender ist diese Unterstützung durch den Amdgpu-Treiber aber vorerst eher unbedeutend, denn er kann mit Vega-Karten keine Monitore ansteuern. Letztlich gelingt mit 4.12 daher nur ein "Headless"-Betrieb, der etwa zum Rechnen mit Grafikprozessoren interessant ist. Noch ist dieses Manko kein sonderliches Drama, denn die Ende Juni vorgestellte Radeon Vega Frontier Edition [29] ist ohnehin rar, teuer und für den professionellen Einsatz gedacht. Auf Gamer zielen erst die Grafikkarten der Serie AMD Radeon RX Vega [30], die AMD Ende Juli zur Siggraph einführen will. Auch diese Modelle dürften viele Hunderter kosten und wegen der Eignung zum Kryptogeld-Mining [31] womöglich schwer zu bekommen sein.

Unklar ist noch, ob der maßgeblich von AMD entwickelte Kernel-Treiber Amdgpu eine Bildausgabe unterstützen wird, bevor Karten mit Vega-GPUs in den Massenmarkt drängen und in Allerwelt-PCs auftauchen. Kernel-Patches zur Monitoransteuerung mit Vega gibt es nämlich durchaus schon. Sie sind Teil der Kernel-Änderungen, die AMD anfangs als DAL (Display Abstraction Layer) veröffentlicht hat und mittlerweile als DC (Display Core) weiterentwickelt. Einigen der wichtigen Grafiktreiber-Entwicklern des Kernels gefiel dieser Ansatz aber von Anfang an nicht. Sie sperrten sich daher gegen die Aufnahme, was zu Debatten mit AMD-Entwicklern führte. Die haben die anfängliche Gegenwehr irgendwann aufgegeben. Seit einigen Monaten überarbeiteten sie den Code daher, damit er irgendwann den Qualitätsansprüchen genügt und in den Kernel einziehen kann. Wie lange das noch dauert, ist ungewiss.

Wer will, kann den Code zur Bildausgabe mit Vega-GPUs aus Entwicklerzweigen [32] nachrüsten. Er steckt seit Version 17.20 [33] auch im Kernel-Treiber der Treiberfamilie [34] AMDGPU-Pro, zu der auch proprietäre Treiber gehören. Auf diesen beiden Wegen lassen sich Vega-Karten daher bereits jetzt als Grafikkarten unter Linux einsetzen. Einen quelloffenen, auf Amdgpu aufbauenden 3D-Treiber gibt es auch schon: Der in Mesa 17.1 [35] enthaltene Treiber Radeonsi unterstützt Vega bereits, erfordert dazu aber eine Vorabversion des im August erwarteten LLVM 5.0. Außerdem beherrscht der 3D-Treiber lediglich OpenGL 3.1, was für viele moderne Games zu wenig ist; Support für das aktuelle OpenGL 4.5 bietet Radeonsi erst mit einer Vorabversion des ebenfalls für August geplanten Mesa 17.2.

Der Nouveau-Treiber des Kernels unterstützt jetzt 3D-Beschleunigung bei Grafikchips aus Nvidias Pascal-Reihe [37], die bei der GeForce-1000er-Serie zum Einsatz kommt. Zusammen mit dem passenden OpenGL-Treiber aktueller Mesa-Versionen lässt sich den GPUs so eine 3D-Performance entlocken, die für einfache Spiele und Desktop-Oberflächen wie Gnome oder KDEs Plasma typischerweise ausreicht. Nvidias proprietärer Grafiktreiber entlockt diesen GPUs aber deutlich mehr Grafikleistung. Ein Grund dafür: Die freien Treiber werden typischerweise mit einer von Nvidia freigegebenen Firmware gepaart, die keine Wechsel der Geschwindigkeitsstufe erlaubt. Anders als Nvidia proprietärer Treiber kann Nouveau daher die schnellsten und sparsamsten Betriebszustände der Grafik-Hardware nicht ansteuern.

Durch einige weitere Änderungen unterstützt Nouveau nun auch die Grafikchips GP107 der GeForce-GTX-1050-Modelle (u. a. 1 [38], 2 [39]). Neu dabei ist auch Support für den Grafikkern GP10B, der in den SoC-Prozessoren der Baureihe Tegra X2 steckt.

Der neue Storage-I/O Scheduler "Budget Fair Queueing" (BFQ) verspricht, die Performance von Datenträgern zu steigern. Dabei hängt allerdings vom Datenträger, den eingesetzten Programmen und den Zugriffsmustern ab, ob der Scheduler letztlich die Geschwindigkeit steigert. Am ehesten dürften sich Vorteile bei klassischen Magnetfestplatten zeigen; bei schnellen SSDs dürfte er hingegen kontra-produktiv sein.

Der vornehmlich auf Desktop-Systeme ausgerichtete BFQ teilt den Prozessen ein I/O-Budget zu und nutzt eine Reihe von Tricks, um das System möglichst reaktionsschnell zu machen. So bevorzugt BFQ beispielsweise Leseoperationen, denn auf deren Ergebnis warten Nutzer oftmals. Auch I/O-Operationen von als Echtzeit markierten Prozessen erhalten eine höhere Priorität. Ferner räumt BFQ den Lese- und Schreiboperationen von Programmen, mit denen der Anwender zu interagieren scheint, eine höhere Priorität ein. Das soll die Reaktionsfreude der darunter laufenden Programme steigern; zugleich geht das aber zu Ungunsten von Hintergrundprozessen, die beispielsweise Code kompilieren, eine Datenbank bereithalten oder den Datenträger indexieren. Ferner sammelt BFQ die einlaufenden Lese- und Schreiboperationen kurzzeitig, um sie dann nach Möglichkeit zu bündeln und in einer optimierten Reihenfolge an die Festplatte zu schicken.

Das ist lediglich eine sehr kurze und grobe Beschreibung von BFQ, das mit zahlreichen Heuristiken arbeitet. In Tuning-Kreisen hat der seit mehreren Jahren unabhängig vom offiziellen Kernel entwickelte Scheduler schon länger einen sehr guten Ruf. Gerade bei Magnetfestplatten soll er spürbare Leistungsgewinne erzielen. Auch bei SSDs soll er in bestimmten Situationen die Geschwindigkeit steigern. Aktuelle SSDs sind aber so schnell, dass BFQ allenfalls in bestimmten Situationen von Vorteil sein dürfte: Der von BFQ betriebene Optimierungsaufwand kostet halt Zeit und Prozessorressourcen, die bei schnellen Datenträgern letztlich die Performance reduzieren.

BFQ ist eine Weiterentwicklung des Storage I/O-Schedulers "Completely Fair Queuing" (CFQ), den viele Distributionen seit Jahren standardmäßig nutzen. Das wird vorerst bei vielen Systemen mit Festplatten auch weiterhin so sein, denn beim jetzt in den Kernel integrierten BFQ-Code handelt es sich um eine überarbeitete Variante des klassischen BFQ. Diese Variante baut auf dem in Linux 3.17 [41] integrierten Multi-Queue Block IO Queueing Mechanism (Blk-Mq) auf. Zum Zugriff auf SATA-Festplatten verwenden Linux-Distributionen aber typischerweise Storage-Treiber wie "Ahci". Diese wiederum nutzen derzeit noch die klassische Block-Layer-Infrastruktur, bei der sich eben CFQ einklinkt und BFQ nicht zur Verfügung steht.

Sie können BFQ aber leicht auf vielen Systemen mit Festplatten einsetzen, indem Sie Ahci anweisen, Blk-Mq zu nutzen. Dazu müssen Sie lediglich den Kernel mit dem Parameter scsi_mod.use_blk_mq=y starten oder beim Erstellen des Kernels die Konfigurations-Option SCSI_MQ_DEFAULT setzen. Das wird vermutlich schon bei einer der nächsten Kernel-Versionen nicht mehr nötig sein, denn aus Entwicklerkreisen konnte der Kernel-Log-Autor erfahren, dass Ahci bald standardmäßig auf Blk-Mq zurückgreifen soll. So oder so: Damit BFQ genutzt wird, muss man ihn auch noch explizit aktivieren. Das ist bei jedem Datenträger einzeln nötig und gelingt über Dateien wie /sys/block/sda/queue/scheduler.

Die Infrastruktur, über die sich BFQ in Blk-Mq einklinkt, wurde erst mit Linux 4.11 [43] geschaffen. Über sie dockt auch ein weiterer Storage-I/O Scheduler an, der mit 4.12 zum Kernel stößt: Der maßgeblich von Facebook-Mitarbeitern entwickelte Kyber, der viel simpler als BFQ arbeitet. Er zielt auf ein ganz anderes Einsatzgebiet: Server mit besonders schnellen Datenträgern, die mit mehreren Warteschlangen arbeiten – beispielsweise per PCIe angebundene NVMe-SSDs. Mit Hilfe der verschiedenen Queues arbeitet Kyber darauf hin, Leseoperationen eher auszuführen als Schreiboperationen. Das kann Wartezeiten reduzieren und Systeme reaktionsfreudiger machen, denn Lesen passiert oftmals, weil ein lokaler oder entfernter Nutzer die Daten abruft und daher auf diese wartet. Schreiben erfolgt hingegen bei vielen Programmen asynchron; daher fällt Anwendern eine kleine Verzögerung nicht so leicht auf. Damit es lediglich eine unmerkliche Verzögerung bleibt, erledigt Kyber die Schreiboperationen nach einer Weile aber trotzdem, selbst wenn noch viele Leseoperationen anstehen. Wie bei BFQ lässt sich das Verhalten von Kyber über Dateien in Sysfs an die individuellen Ansprüche und den jeweiligen Workload anpassen.

Details finden sich im Commit-Kommentar zu Kyber [44] und einer Mail aus dessen Begutachtungsphase [45]. Hintergründe zu BFQ liefern einige Commits (u. a. 1 [46], 2 [47], 3 [48], 4 [49], 5 [50]) und die Homepage von BFQ [51], die auch einige Benchmark-Ergebnisse [52] enthält. Ferner findet sich bei LWN.net ein Artikel zu BFQ und Kyber [53], der die Ansätze grob umreißt. Die nächsten Monate müssen zeigen, wie sich die beiden in der Praxis schlagen. Wie bei neuem Kernel-Code üblich, dürften beide I/O Scheduler noch ein wenig Feintuning benötigen, bevor sie richtig rund laufen.

Mit dem "Partial Parity Log for MD RAID 5" (RAID5-PPL) bringt der Kernel jetzt eine zweite Technik, um die Integrität eines RAID-5-Verbunds auch bei Abstürzen hundertprozentig zu gewährleisten (u. a. 1 [56], 2 [57], 3 [58], 4 [59], Dokumentation [60]). Solche können durch das sogenannte "Write Hole [61]" zu Datenschäden führen, falls der Kernel neue Daten schreibt, diese aber durch den Absturz nicht komplett auf den am Verbund beteiligten Datenträgern landen. Die Paritätsdaten passen dann nicht zu den bereits geschriebenen Daten; falls nach dem Absturz ein Datenträger des RAID fehlen sollte, verfälscht der Rebuild in dem Bereich die Daten.

Die RAID5-PPL schützt dagegen, indem es beim Schreiben einige zusätzliche Informationen speichert, mit denen es den beschriebenen Fall abfangen kann. Das macht Arbeit, daher geht das Ganze zu Lasten der Geschwindigkeit. Laut dem federführenden Entwickler sinkt die Performance um bis zu 30 bis 40 Prozent [62]. Diesen Nachteil nehmen einige Nutzer dennoch in Kauf, um die Daten in Sicherheit zu wiegen.

Alternativ kann man das mit dem Log-Device erreichen, mit dem man sich seit Linux 4.4 [63] vor dem Write Hole schützen kann. Dessen Nachteil: Man muss das RAID mit einem weiteren Datenträger koppeln, auf dem der RAID-Code ein Journal führt. Seit Linux 4.10 [64] kann dieses Log-Device aber zugleich auch als Write-Back-Cache nutzen und so die Performance des Verbunds sogar steigern.

RAID5-PPL stammt von Intel-Entwicklern und ging aus einer Funktion hervor, die die Windows-Treiber für Intels Rapid Storage Technology (RST) bei der neuen Xeon-Platform bieten soll. Bei RST funktioniert sie nur dort; die in Linux eingeflossene Implementierung ist kompatibel zu jener von Intel, arbeitet aber auf beliebiger Hardware.

Linux unterstützt jetzt das bei selbstverschlüsselnden SSDs eingesetzte Opal.
Linux kann jetzt erkennen, wenn verschlüsselte Volumes manipuliert wurden.

Das neue Device-Mapper-Target "dm-integrity" stellt ein Block Device bereit, das zu jedem gespeicherten Sektor einige Metadaten für spätere Integritätsprüfungen speichert. Das Device-Mapper-Target sorgt dabei für Atomic Updates, damit Nutz- und Metadaten garantiert zusammenpassen, selbst wenn eine Schreiboperation durch einen Absturz unterbrochen wird (1 [66], 2 [67]). Zusammen mit der ebenfalls neuen Cryptographic Data Integrity Protection gelingt so Authenticated Encryption (AE). Durch diese kann der Kernel erkennen und warnen, wenn Blöcke eines verschlüsselten Volumes ohne den passenden Schlüssel modifiziert wurden (u. a. 1 [68], 2 [69], 3 [70]).

Ferner gab es einige Optimierungen am Device Mapper, auf den Cryptsetup oder der Logical Volume Manager (LVM) zurückgreifen (1 [71], 2 [72]). Eine der Umbauten [73] verspricht Latenzen beim Dm-Cache-Target zu reduzieren, mit dem sich ein SSD-Cache vor Festplatten oder Netzwerklaufwerke schalten lässt. Über die auf den MD-Code zurückgreifende RAID-Implementation des Device Mappers lässt sich nun auch die Cache-Funktion eines Log-Device aktivieren [74].

Mit den Änderungen am via Mdadm administrierten MD-Subsystem [76] stießen einige Patches zum Kernel, die die Performance von Festplatten-Verbünden der RAID-Level 5 oder 6 steigern sollen (u. a. 1 [77], 2 [78]). Einige andere Anpassungen versprechen zudem, ein RAID-5-Recovery zu beschleunigen (u. a. 1 [79]).

Über das "Pblk" Target [80] kann man nun über ein normales Blockdevice auf Open-Channel SSD zugreifen. Anders als normale SSDs haben diese eher exotischen SSDs kein Flash Translation Layer (FTL), daher muss der Kernel die davon erledigten Aufgaben wie das Wear Leveling selbst behandeln. Diese Aufgabe hat das LightNVM-Framework, das bei Linux 4.4 [81] zum Kernel stieß.

Unter den Änderungen am Block Layer (1 [82], 2 [83], 3 [84]) waren noch eine Reihe weitere Features, darunter einige am Blk-Throttle. Mit diesem Control Groups (Cgroup) Controller lässt sich regeln, wie viele I/O-Ressourcen die Prozesse eines Systems nutzen dürfen. Durch die Änderungen gibt es eine Reihe neuer Einstellmöglichkeiten, die eine skalierbare Priorisierung ermöglichen, damit die Wete besser zu den gerade herrschenden Umgebungsbedingungen passen (u. a. 1 [85], 2 [86], 3 [87], 4 [88], 5 [89], 6 [90], 7 [91], 8 [92], 9 [93], 10 [94]).

Unter anderem für Datenintegritätstests ist der neue I/O-Control (Ioctl) "GETFSMAP" gedacht, den Ext4 und XFS jetzt beherrschen (1 [97], 2 [98], XFS [99], Ext [100], Man-Page [101]). Programme können darüber beim Dateisystem erfragen, wie es seine Blöcke nutzt. Darüber lassen sich leere Bereiche erkennen, aber auch abklären, ob dort Meta- oder Nutzdaten liegen. Ferner lässt sich feststellen, welche Nutzdaten zu welchen Dateien gehören.

Mit diesen Informationen können Programme beispielsweise eine Liste aller für Nutzdaten verwendeten Blöcke erhalten, um diese dann sequenziell auszulesen und dabei auf Lesefehler zu prüfen. Sollten welche auftreten, kann das Check-Programm ausgeben, welche Dateien davon betroffen sind. Das ist eine der Funktionen, auf die das noch in Entwicklung [102] befindliche Online-Scrubbing-Tool [103] zurückgreifen soll, das XFS-Dateisysteme im Betrieb auf Fehler untersucht. Das gelingt aber nur mit den seit Linux 4.8 [104] unterstützten Dateisystemstrukturen, die seit Linux 4.9 [105] Funktionen wie COW (Copy-on-Write) ermöglichen.

Der RAID-5/6-Code von Btrfs gilt nach wie vor als unausgereift.
Der RAID-5/6-Code von Btrfs gilt nach wie vor als unausgereift. (Bild:  Btrfs-Wiki [107])

Einige der Änderungen an Btrfs [108] beseitigen bekannte Probleme und Funktionslücken bei der Dateisystem-eigenen Implementation von RAID 5 und 6. Das ist eine der Funktionen von Btrfs, die nach wie vor als instabil gilt [109].

Zwischen den Umbauten am Ext4-Dateisystem [110] verstecken sich einige, die die Performance großer Dateisystemen verbessern sollen. Auch Workloads mit verteilten Schreiboperationen (random write) sollen zulegen.

Einige Umbauten gab es auch beim CIFS-Dateisystem [111], mit dem sich Dateifreigaben von macOS, Samba oder Windows einbinden lassen. Darunter finden sich einige, die asynchrones I/O beschleunigen (u. a. 1 [112], 2 [113], 3 [114]). Die Kernel-Entwickler haben ferner eine Inkompatibilität beseitigt [115], durch die sich SMB-Freigaben von macOS manchmal nicht mounten ließen.

Details zu weiteren Neuerungen rund um Datenspeicherung und Dateisysteme finden sich in den Kommentaren zu den Commits, die die wesentlichsten Neuerungen bei Ceph [116], Fuse [117], F2FS [118], Fsnotify [119], GFS2 [120], Libnvdimm (1 [121], 2 [122], MMC [123], MTD [124], NFS [125], NFSd [126], Orangefs [127], Overlayfs [128], Pstore [129], SCSI [130], SCSI Target [131], UBIFS [132] und XFS [133] beschreiben.

Geringe Latenzen verspricht der neue Syscall epoll_wait(). Anwendungen können über ihn einen Socket ständig immer wieder abfragen ("busy poll") [136]. Sie bekommen eingehende Pakete so möglichst schnell unter ihre Fittiche, belasten den Prozessor aber auch stärker.

Der Namespace-Support im Subsystem für CAN (Controller Area Network) ermöglicht eine Isolation von Anwendungen, die über den unter anderem in Autos und der Robotik verwendeten Bus kommunizieren (u. a. 1 [137], 2 [138]). Letztlich kann man dadurch jetzt CAN-Anwendungen mit Hilfe von Container-Techniken wie LXC und Docker abgeschottet betreiben. Ein weiterer Baustein dazu ist der neue Treiber für virtuelle CAN-Tunnel (vxcan) [139]. Er kann lokal virtuelle Verbindungen schaffen, über die Anwendungen per CAN miteinander kommunizieren können, die in unterschiedlichen Namespaces laufen; das Ganze ermöglicht somit Ähnliches wie die virtuellen Ethernet-Devices von Typ "veth". Mit Hilfe dieser Verbesserungen lassen sich beispielsweise komplette ROS Robotik-Entwicklungsumgebung samt CAN-Support als Container-Images an Entwickler verteilen; außerdem lässt sich dank des Namespace-Supports nun regeln, welche Anwendungen auf den CAN-Bus schreiben dürfen.

Der E1000e-Treiber unterstützt bereits jetzt die zur i219-Familie gehörende Netzwerkchips, die sich mit Intel-Prozessoren der Cannon-Lake-Generation einsetzen lassen (u. a. 1 [141], 2 [142]); Letztere soll "Skylake" beerbt und unter anderem in Core-i-CPUs der 8000er-Serie stecken, die Intel noch dieses Jahr einführen will.

Unter den neuen Netzwerktreibern ist einer für einen IP-Code der Enterprise Ethernet-Reihe von DesignWare, der Dwc-Xlgmac [143] heißt und Übertragungen mit 25G, 40G, 50G und 100G beherrscht. Ebenfalls neu ist der Treiber MT7530 [144], der einen 7-ports Gigabit Ethernet Switch von Mediatek unterstützt.

Der Treiber für Intels WLAN-Chips unterstützt jetzt eine neuere Revision (den "B-Step") von WLAN-Chips der 9000er-Serie [145]. Ferner erhielt Iwlwifi einige Grundlagen zum Support des Nachfolgers der 9000er-Serie (u. a. 1 [146], 2 [147], 3 [148], 4 [149]).

Weitere Neuerungen rund um den Netzwerksupport von Linux listen die Kommentare der wichtigsten Git-Merges aus diesem Kernel-Bereich (Net: 1 [150], 2 [151], 3 [152]; RDMA: 1 [153], 2 [154]). Darunter sind etwa eine Hardware Offloading API für IPSEC [155]. Ferner gab es wieder zahlreiche Verbesserungen am Code des BPF (u. a. 1 [156], 2 [157], 3 [158]). Diese Virtual Machine ist aus dem Berkeley Packet Filter (BPF) hervorgegangen und wurde anfangs eBPF (Enhanced BPF) genannt. Mittlerweile verzichten die Entwickler oft auf das "e" und sprechen schlicht nur noch vom BPF – das soll dabei aber keine Abkürzung mehr für Berkeley Packet Filter sein, denn mit ihm hat der BPF aktueller Kernel-Versionen nur noch wenig gemein.

Nach mehren Entwicklungsjahren nutzt der i915-Treiber bei moderneren Intel-Prozessoren nun standardmäßig "Atomic Modesetting" [161]. Diese seit Linux 4.2 [162] als stabil geltende Infrastruktur macht unter anderem die Monitor-Konfiguration verlässlicher, weil der Treiber eine von der Hardware nicht unterstützte Betriebsart vorab erkennen kann; dadurch kann er dann zum Beispiel einen Wechsel in eine unzulässige Mehrschirmkonfiguration verweigern, die womöglich zu einem unbedienbaren System geführt hätte.

Atomic Modesetting ermöglicht zudem eine bessere Synchronisation der Bildausgabe. Darauf greift eine andere Neuerung zurück, denn der Intel-Treiber unterstützt nun Explicit Fencing [163]. Mit Hilfe dieser seit Linux 4.10 [164] unterstützten Technik können etwa Desktop-Oberflächen und Programme zuverlässig sicherstellen, dass mehrere Ebenen eines Anwendungsfensters zeitgleich auf dem Bildschirm erscheinen – etwa damit ein Video-Player nicht das von der GPU dekodierte Video anzeigt, bevor auch der Fensterrahmen und die Steuerelemente zur Darstellung bereit sind. Ferner müssen auch Vulkan-Treiber die expliziten Synchronisationspunkte beherrschen, um die 3D-Programmierschnittstelle korrekt zu unterstützten.

Auch der Grafiktreiber "vmwgfx", der für verschiedene von VMware-Produkten emulierten GPUs zuständig ist, unterstützt jetzt Atomic Modesetting [166].

Neben dem bereits erwähnten Vega-Support gab es noch zahlreiche andere Umbauten am Amdgpu-Treiber. Durch einige lässt sich bei vielen neueren GPUs jetzt ein "Power Profile" via Sysfs setzen [167]. Anwender können darüber etwa beeinflussen, wie weit die Taktfrequenz von GPU oder Grafikspeicher sinken und wie zügig sie in schnellere oder langsamere Zustände wechseln.

Der Treiber für die Grafikkerne auf dem Raspberry Pi kann per HDMI nun auch Audio-Signale ausgeben [168].

Einige weitere Änderungen rund um die Grafiktreiber des Kernels nennt der Merge mit den wichtigsten Änderungen am Direct Rendering Manager (DRM) [169]. Darunter ist etwa noch ein generischer Treiber zur Bildausgabe mit LVDS-Paneln [170], deren Bridge keinen speziellen Treiber erfordert. Der Kernel erkennt außerdem externe, per Thunderbolt angeschlossene Grafikchips nun als solche; das vermeidet unerwünschte Wechselwirkungen mit der GPU-Zuschaltfunktion, die unter anderem für Notebooks mit zwei Grafikchips gedacht ist (u. a. 1 [171], 2 [172], 3 [173], 4 [174]).

Das Open Sound System (OSS) und die darauf aufbauenden Audio-Treiber lassen sich bei 4.12 nicht mehr aktivieren [176]. Dieser Schritt bereitet den Rauswurf von OSS vor, auf das Sound-Treiber typischerweise aufgesetzt haben, bevor die Advanced Linux Sound Architecture (ALSA) mit Linux 2.6 zum Standard-Audio-Interface von Linux wurde. Jetzt, dreizehn Jahre später, steht OSS auf der Abschussliste, weil die im Kernel enthaltene Ausführung von OSS schon lange nicht mehr ordentlich gepflegt wird; außerdem nutzt ihr Code recht häufig einen als unsauber ("hackish") eingestuften Funktionsaufruf des Kernels, den die Entwickler loswerden wollen [177]. Womöglich überdenken die Programmierer den Rauswurfplan allerdings noch, falls das Lahmlegen von OSS zu validen Einsprüchen von Anwendern führt.

Mit Hilfe der "USB Type-C Connector Class [179]" stellt das USB-Subsystem nun Schnittstellen bereit, über die Userspace-Programme besser mit den USB-C-Verbindungen eines Systems interagieren können. Anwendungen können darüber etwa den Status und grundlegende Informationen zu Typ-C-Ports abfragen, aber auch USB-C-Funktionen konfigurieren; beispielsweise Data-Role-Swapping oder die Stromversorgung per USB Power Delivery. Details hierzu erläutert die zugehörige Dokumentation [180]. Das Ganze ist aber vornehmlich für Embedded Systems und weniger für PCs oder Notebooks gedacht: Bei Letzteren funktionieren USB-C-Port schon länger recht ordentlich, weil sich typischerweise deren Firmware um die Konfiguration von Power Delivery & Co. kümmert.

Einige der mittels USB Type-C Connector Class nutzbare Funktionen erfordern Hardware-spezifische Treiber. Einer für einen von Intel gefertigten USB-C-Phy, der zur Broxton-Platform gehört [181], stieß gleich mit zum Kernel. Auf dem neuen Typ-C-Code baut auch der neue USB Type-C Port Manager (tcpm) [182] auf, der sich um die Konfiguration der Stromversorgung via Typ-C kümmern kann. Genau wie beim neuen Type-C Port Controller Interface driver (tcpci) [183] erfüllt der Code allerdings die Qualitätsrichtlinien der Kernel-Entwickler nicht und liegt daher im Staging-Bereich.

Im Bereich für Code mit Qualitätsmängeln landete auch der Treiber Rtl8723bs [184]. Er unterstützt einen gleichnamigen WLAN-Chip von Realtek, der in einer Reihe zumeist günstiger Systeme zum Einsatz steckt, darunter neben einigen Notebooks mit Atom-Prozessoren auch Intels erster Compute Stick oder der "9-Dollar-Computer" C.H.I.P. Im Staging-Bereich landete auch ein Treiber [185], mit dem ein Raspberry Pi einen Audio-Strom parallel per Kopfhörer-Anschluss und HDMI ausgeben kann.

Durch die erwähnten und zahlreiche weitere Änderungen unterstützt Linux 4.12 über 750 Geräte oder Geräteklassen mehr als sein Vorgänger. Das geht aus den Datenbanken der Linux Kernel Driver DataBase (LKDDb) [187] hervor, laut denen der Kernel durch neue und verbesserte Treiber rund 100 weitere PCI/PCIe- und USB-Geräte unterstützt. Darunter ist etwa ein Treiber für einen bei manchen Raspberry Pi eingesetzten SD-Host-Controller [188]. Ebenfalls neu dabei ist Support für Intels RealSense SR300 Camera [189] oder die Xbox-360-Gamepads Mad Catz Brawlstick und Razer Sabertooth [190]. Informationen zu zahlreichen weiteren Verbesserungen zur Hardware-Unterstützung finden sich in den wichtigsten Merges der Subsysteme Char [191], Clk [192], Dmaengine [193], I2C [194], Input (1 [195], 2 [196]), HID [197], Libata [198], GPIO [199], Hwmon [200], Media (DVB, IR, Video, …) [201], MFD [202], Platform [203], Sound (1 [204], 2 [205]), Staging [206] und USB [207].

Zur Startzeit-Optimierung bringen die Kernel-Quellen jetzt AnalyzeBoot v2.0 [211] mit. Das im Verzeichnis tools/power/pm-graph/ liegende Script erzeugt eine HTML-Datei mit einer interaktiven Balkengrafik, die zeigt, wie lange welches Kernel-Subsystem zur Initialisierung benötigt. Die dazu erforderlichen Daten kann das Skript auf zwei Arten sammeln: Über den Function Tracer (Ftrace) oder die Ausgaben von dmesg, sofern man beim Booten die Kernel-Option initcall_debug angibt. Der Beobachtungszeitraum beginnt mit dem Start des Kernels und endet mit Aufruf des Init-Prozesses. Dadurch richtet sich das Tool eher an Kernel-Entwickler und tüftelnde Linux-Experten. Werkzeuge wie Systemd-Bootchart [212] sind für viele Nutzer eine bessere Anlaufstelle, weil sie nicht nur den Start des Kernels, sondern auch die weitere Initialisierung des Betriebssystems durch den Init-Prozess analysieren.

AnalyzeBoot zeigt, wie lange die verschiedenen Subsystem zur Initialisierung brauchen, wenn der Kernel gestartet wird.
AnalyzeBoot analysiert den Kernel-Start und zeigt, wie lange die verschiedenen Subsystem zur Initialisierung benötigen.

AnalyzeBoot zählt zur von Intel vorangetriebenen [213] Werkzeugsammlung PM-Graph [214]. Zu der gehört auch AnalyzeSuspend, das dem Kernel jetzt in Version 4.6 [215] beiliegt. Dieses Tool zeigt, womit der Kernel die Zeit verbringt, wann das System in den Bereitschaftsmodus wechselt oder daraus erwacht. Details zum Einsatz der Skripte liefern die Man-Pages zu Bootgraph [216] und Sleepgraph [217].

Die Umbauten am Xen-Code [219] enthalten einen Frontend-Treiber für den "9pfs Xen Transport [220]", der einen effizienteren Datenaustausch zwischen verschiedenen Xen-Domänen verspricht; die Kommunikation erfolgt dabei über ein Backend, das in das Qemu [221] einfließen soll. Neu im Xen-Code sind auch Multi-Touch-Support im Eingabegerätetreiber [222] sowie Definitionen für mächtigere Grafik [223]- und Sound [224]-Treiber, die sich per Paravirtualisierung mit dem Hypervisor austauschen. Die Xen-Macher entwickelt [225] diese vornehmlich zum Einsatz bei IT-Systemen von Automobilen.

Eine der vielen Anpassungen an KVM (1 [226], 2 [227]) entfernt eine alte Technik [228], mit der sich Geräte des Hosts an eine Virtual Machine (VM) überstellen ließen. Ferner gab es einige Korrekturen und Optimierungen für Systeme mit Intel-Prozessoren, bei denen man aus einer VM eine weitere VM startet (Nested Virtualization/nVMX).

Eine ganze Reihe von Änderungen [230] gab es wieder an perf und der Kernel-Infrastruktur, auf die das Performance-Analyse-Tool zurückgreift. Dazu gehört Support für AMD IOMMU Events [231] und bessere Unterstützung für eine Reihe für Uncore-Events verschiedener Intel-Prozessoren (u. a. 1 [232], 2 [233], 3 [234], 4 [235]). Neu ist auch Code, der die Ausgaben von perf report und perf top nach Symbolgröße sortiert [236].

Auch bei Function Tracer (Ftrace) gab es wieder eine Reihe von Änderungen [237]. Eine davon rüstet die Trace-Option function-fork nach [238], durch die das Ablaufverfolgungswerkzeug auch alle von Kindprozessen ausgelösten Funktionsaufrufe im Blick behält, wenn es eine Gruppe von Prozessen beobachtet.

Es gab einige Änderungen, durch die sich kleinere Kernel-Images kompilieren lassen, damit Linux ressourcenschonender läuft und sich besser für Geräte des Internet of Things (IoT) eignet (u. a. 1 [240], 2 [241], 3 [242]). Außerdem gibt es Überlegungen, ein neues, schlankeres TTY-Layer [243] zu integrieren; ob das passiert ist aber nach wie vor offen, denn ein entsprechender Vorschlag war schon vor Aufnahme eines vorbereitenden Patches auf größere Gegenwehr gestoßen, wie LWN.net schreibt [244].

Ein paar Detailanpassungen sollen Programmierern des Linux-Kernels die Arbeit erleichtern. Eine neue Funktion zum atomaren Update [245] von Variablen per cmpxchg macht Code kürzer und übersichtlicher. Neu dabei sind auch die Aufrufe der Familie kv[mz]alloc* (u. a. 1 [246], 2 [247]). Mit ihnen fällt Kernel-Code automatisch auf die Speicherallokation mit vmalloc() zurück, falls kmalloc() fehlschlägt; entsprechende Aufrufe sollen an zahlreichen Stellen des Kernels enthaltenen Code ersetzen, die bislang genau das machen; Hintergründe hierzu erläutert LWN.net [248].

Details zu anderen Neuerungen im Bereich Infrastruktur finden sich in den wichtigsten Commits der Subsysteme ACPI (1 [249], 2 [250]), Devicetree [251], Device Properties Framework [252], Dokumentation [253], EDAC [254], EFI [255], IOMMU [256], IRQ [257], Kbuild (1 [258], 2 [259], 3 [260]), Kselftests [261], Locking [262], PCI [263], Power Management (1 [264], 2 [265]), RAS [266], RCU [267], Prozess-Scheduler [268], Thermal [269], Timer [270], TTY [271] und Virtio [272].

Auf x86-Systemen unterstützt Linux jetzt den "USB3 Debug Port". Über diese via earlyprintk nutzbare Technik lassen sich etwa Informationen zum Boot-Vorgang per USB ausgeben, falls der Kernel abstürzt, bevor andere Ausgabewege (Grafik, Netzwerk, ...) zur Verfügung stehen (u. a. 1 [275], 2 [276]).

Linux 4.12 spricht auf x86-64-Systemen nach wie vor bis zu 64 TByte Arbeitsspeicher an. Nach einigen in Linux 4.11 [277] eingeflossenen Vorarbeiten gab es allerdings weitere Umbauten, um auf der 64-Bit-x86-Architektur mithilfe von "5-level paging" bald bis zu 1 Petabyte Arbeitsspeicher adressieren zu können (u. a. 1 [278], 2 [279], 3 [280], 4 [281]). Einige das ermöglichende Patches [282] brauchten aber noch Feinschliff, daher wurden diese auf 4.13 vertagt.

Linux unterstützt jetzt Memory Bandwidth Allocation (MBA). Dabei handelt es sich um eine Funktion einiger Server-Prozessoren von Intel, mit der sich die Speicherbandbreite bei der Kommunikation zwischen den Kernen eines Prozessors regeln lässt (u. a. 1 [283], 2 [284], 3 [285])

Die Kernel-Entwickler haben den Support für die 32-Bit-RISC-Architektur AVR32 entfernt. Das soll Wartung und Weiterentwicklung erleichtern. Die AVR32-Prozessoren von Atmel gelten ohnehin als End-of-Life (EOL) und schon bei 4.10 lässt sich der Netzwerk-Code nicht mehr mit dem neuesten Compiler für die Architektur kompilieren; die Entwickler schreiben in der Begründung zum Rauswurf [286] zudem, dass nur noch wenige oder womöglich niemand mehr die Architektur nutze.

Details zu weiteren Änderungen am Architekturcode finden sich in den wichtigsten Merge-Commits der Subsysteme ARC [287], ARM (u. a. Core [288], Driver [289], DT [290], SoC [291]), ARM64 (Core [292], SoC [293], DT [294]), MIPS [295], NIOS2 [296], PowerPC (1 [297], 2 [298]) und S390 [299]. Unter diesen Änderungen sind etwa solche, durch die ARM64 nun Kdump (Kernel Crash Dumps) beherrscht. Der PowerPC-Code kann Anwendungen auf Wunsch jetzt einen virtuellen Adressraum von bis zu 512 TByte RAM bereitstellen. Außerdem ist jetzt Code zur Unterstützung des Rockchip RK3288 dabei, der auf dem Asus Tinkerboard sitzt. Auch der im Samsung Chromebook Plus verbaute SoC RK3399 ist neu; Ferner wurde der Support Nvidias Tegra186 (Codename "Parker") verbessert, der auf dem Jetson TX2 sitzt.

Durch einige in den letzten Monaten [301] vorbereitete Umbauten an der Handhabung von Schlüsseln [302] im Keyring des Kernels bietet Linux nun auch einen Blacklist Keyring [303]. Dieser kann Schlüssel nennen, denen der Kernel nicht trauen soll, obwohl sie als vertrauenswürdig eingestufte Signaturen oder Hashes aufweisen. Mit dieser Funktion will der zuständige Entwickler unter anderem Unterstützung für die Blacklist von UEFI Secure Boot realisieren. Dadurch soll die Kexec-Funktion von Linux keine Betriebssysteme mehr starten, deren Start die Rechner-Firmware verweigern würde.

Apropos Secure Boot: Der gleiche Entwickler hat auch einen ganzen Schwung von Patches [304] eingebracht, die Kernel- oder Modul-Parameter kennzeichnen, mit denen sich Hardware-Konfigurationsparameter beeinflussen lassen – beispielsweise die von Treibern verwendeten Ioports, Iomem-Bereiche oder IRQs. Mit solchen Parametern könnte ein Angreifer auf einem per Secure Boot gesicherten System womöglich ein Betriebssystem booten, dessen Start die Sicherheitstechnik normalerweise unterbinden würde. Bei der Secure-Boot-Implementation vieler Distributionen lassen sich diese Parameter daher schon länger nicht beeinflussen, solange die Sicherheitstechnik aktiv ist. Die jetzt integrierten Änderungen legen Grundlagen, durch die sich der offizielle Kernel in Zukunft genauso verhalten soll; Patches, die das umsetzen, sind aber noch in Entwicklung.

Kernel Address Space Layout Randomization (KASLR) gilt nun als ausgereift [306] – die Standard-Konfiguration schaltet es daher ein und auch der Hilfetext rät zum Aktivieren. Durch die Technik kann Linux viele der Kernel-intern verwendeten Speicheradressen zerhacken, um Angreifern das Leben zu erschweren. KASLR wurde bei Linux 3.14 [307] eingeführt. Die beiden Hauptentwickler der Sicherheitslösungen Grsecurity und Pax stellten damals allerdings den Nutzen des Ansatzes in Frage [308]; sie KASLR wurde seit dem aber etwas verbessert [309].

Das neue "Generic TEE Subsystem [310]" ermöglicht einen Austausch mit einem "Trusted Execution Environment" (TEE). Dabei handelt es sich um ein geschütztes Mini-Betriebssystem, das bei manchen ARM-SoCs mithilfe von TrustZone im Hintergrund läuft, wie es ähnlich bei der Management Engine von Intel-Chips der Fall ist. Mit Hilfe eines TEE lässt sich etwa Secure Boot implementieren; es kann aber auch Schlüssel aufnehmen und damit Funktionen zum Digital Rights Management (DRM) übernehmen. Der jetzt aufgenommene Code stellt lediglich die Schnittstellen zum Austausch mit einem TEE bereit; damit einer solcher gelingt ist noch ein Treiber für die TEE-Implementation des jeweiligen SoCs nötig. Details zum TEE-Subsystem liefert ein Artikel bei LWN.net [311].

Weitere Änderungen rund um die Sicherheit nennen Git-Pull-Kommentare der Subsysteme Audit [312], Crypto [313], Security [314]. Unter letzteren ist etwa Unterstützung für TPM Spaces [315], mit denen sich Zugriffe auf das Trusted Platform Modules isolieren lässt. Ferner gab es eine Detailänderung [316], die einige Bereiche des APIs für Linux Security Modules (LSM) schreibgeschützt markiert [317], damit Angreifer diese nicht so leicht für unerwünschte Zwecke missbrauchen können.

Kernel-
Version
Anzahl
Dateien¹
Zeilen
Quelltext
(Ohne Doku)²
Entwick-
lungs-
zeitraum
Commits
(Ohne
Merges)³
Diffstat⁴
Linux 4.5 [319] 52.916 21.154.659
(19.489.725)
63 Tage 13.173
(12.080)
11.590 files changed,
1.146.355 insertions(+),
854.286 deletions(-)
Linux 4.6 [320] 53.660 21.422.808
(19.724.413)
63 Tage 14.618
(13.517)
10.250 files changed,
606.023 insertions(+),
337.875 deletions(-)
Linux 4.7 [321] 54.400 21.720.955
(19.971.725)
70 Tage 13.433
(12.283)
9909 files changed,
575.816 insertions(+),
277.305 deletions(-)
Linux 4.8 [322] 55.503 22.071.048
(20.266.168)
70 Tage 14.552
(13.382)
11.483 files changed,
662.558 insertions(+),
314.177 deletions(-)
Linux 4.9 [323] 56.223 22.348.356
(20.520.460)
70 Tage 17.392
(16.214)
11.416 files changed,
713.497 insertions(+),
436.209 deletions(-)
Linux 4.10 [324] 57.202 22.839.659
(20.864.595)
70 Tage 14.249
(13.029)
11.913 files changed,
806.420 insertions(+),
312.218 deletions(-)
Linux 4.11 [325] 57.994 23.137.402
(21.132.076)
70 Tage 13.891
(12.724)
12.528 files changed,
550.108 insertions(+),
252.364 deletions(-)
Linux 4.12 59.845 24.170.860
(22.125.075)
63 Tage 15.736
(14.570)
12.531 files changed,
1.342.677 insertions(+),
309.204 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; echo "($(git-log --pretty=oneline --no-merges vx.(y-1)..vx.(y) | wc -l))"
⁴ git diff --shortstat vx.(y-1)..vx.(y)

Mit der Freigabe von Linux 4.12 [326] beginnt jetzt die zweiwöchige Phase, in der Linus Torvalds das Gros der Änderungen für den Nachfolger aufnimmt. Dieses "Merge Window" schließt der Linux-Erfinder typischerweise nach zwei Wochen mit der Veröffentlichung einer ersten Vorabversion ab. Sie läutet zugleich die Stabilisierungsphase ein. Derzeit ist diese meist acht Wochen lang, daher erscheint Linux 4.13 wahrscheinlich am 11. September; es waren aber auch häufiger schon nur sieben Wochen, daher könnte es bereits am 4. September so weit sein.

(thl [327])

Den neuen Linux-Kernel herunterladen und einrichten

Die neue Linux-Version steht wie gewohnt über Kernel.org zum Download [328] bereit. Hinweise zur Einrichtung eines eigenen Kernels finden Sie im Artikel "Linux-Kernel maßgeschneidert [329]". 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 das neue Linux 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 normalerweise nur beim Wechsel auf eine neue Ausgabe der Distribution einen Versionssprung.

Versionshistorie dieses Artikels

Der nebenstehende Text Artikel wird zwischen Freigabe der ersten Vorabversion und Fertigstellung von Linux 4.12 mehrfach erweitert, um schrittweise alle wichtigen Änderungen der neuen Kernel-Version zu erläutern. Einmal publizierte Absätze werden nur verändert, wenn triftige Gründe es erfordern; zur Freigabe des neuen Kernels werden wir den Text aber umstellen, damit die wichtigsten Informationen vorne stehen.

[330]


URL dieses Artikels:
http://www.heise.de/-3712705

Links in diesem Artikel:
[1] https://www.heise.de/ct/artikel/Kernel-Log-zu-Linux-5-0-Ruckelfrei-zocken-schnellerer-Datenaustausch-4307315.html
[2] https://www.heise.de/ct/artikel/Linux-4-20-freigegeben-Performance-Optimierungen-und-neue-Treiber-4223066.html
[3] https://www.heise.de/ct/artikel/Linux-4-19-Schoener-starten-und-bereit-fuer-das-WLAN-von-Morgen-4144037.html
[4] https://www.heise.de/ct/artikel/Linux-4-18-freigegeben-Raspi-3-Support-und-Vorboten-neuer-Firewall-Technik-4078605.html
[5] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-17-4061166.html
[6] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-16-3964466.html
[7] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-15-3900646.html
[8] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-14-3831941.html
[9] 
[10] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-0-2600242.html
[11] https://git.kernel.org/torvalds/c/d83a7cb375eec21f04c83542395d08b2f6641da2
[12] #changelog
[13] https://git.kernel.org/torvalds/c/af085d9084b48530153f51e6cad19fd0b1a13ed7
[14] https://git.kernel.org/torvalds/c/3ec24776bfd09668079df7dca0c0136d80820ab4
[15] 
[16] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-8-3283402.html?#bpf
[17] https://git.kernel.org/torvalds/c/b5cdae3291f7be7a34e75affe4c0ec1f7f328b64
[18] https://prototype-kernel.readthedocs.io/en/latest/blogposts/xdp25_eval_generic_xdp_tx.html
[19] https://www.youtube.com/watch?v=iBkR4gvjxtE&t=1m37s
[20] http://netdevconf.org/2.1/slides/apr7/gospodarek-Netdev2.1-XDP-for-the-Rest-of-Us_Final.pdf
[21] 
[22] https://git.kernel.org/torvalds/c/464826d67aee079e34c8b8bb652cef71c1a7dbe4
[23] https://git.kernel.org/torvalds/c/0e5ca0d1ac07ef8b3a52d3b0404482207cb4da5a
[24] https://git.kernel.org/torvalds/c/09bfb8912dc16383ce9f95600134d8eb120107f8
[25] https://git.kernel.org/torvalds/c/f83a9991648bb4023a53104db699e99305890d51
[26] https://git.kernel.org/torvalds/c/733acf561e0e93e4c38ce6581c65bd2c4b499779
[27] https://git.kernel.org/torvalds/c/b1023571479020e9e9c15a51b43bf8e15406952b
[28] https://git.kernel.org/torvalds/c/4adc5ab813eaf57fe4027ea93fcc91182f613495
[29] https://www.heise.de/meldung/AMD-Radeon-Vega-Frontier-Edition-1200-Euro-mit-Luftkuehlung-1750-Euro-mit-Wasserkuehlung-3758101.html
[30] https://www.heise.de/meldung/AMD-Radeon-RX-Vega-Karten-ab-August-im-Handel-Spieleleistung-weiter-ungewiss-3729812.html
[31] https://www.heise.de/meldung/Kryptogeld-Mining-Grafikkarten-Hohe-Preise-fuer-AMD-Radeon-Knappheit-dauert-an-3751288.html
[32] https://cgit.freedesktop.org/~agd5f/linux
[33] https://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-Driver-for-Radeon-Vega-Frontier-Edition-Linux-Release-Notes.aspx
[34] https://www.heise.de/ct/ausgabe/2014-23-Die-Grafiktreiber-Architektur-von-Linux-2415770.html
[35] https://www.heise.de/ct/artikel/Mesa-17-1-steigert-3D-Performance-von-Linux-3706515.html
[36] 
[37] https://nouveau.freedesktop.org/wiki/CodeNames/#NV130
[38] https://git.kernel.org/torvalds/c/2ebd42bc28525da52162425ecd7472846b78584d
[39] https://git.kernel.org/torvalds/c/b2c4ef70790cee37f243af2b303727394edae1d5
[40] 
[41] https://www.heise.de/ct/artikel/Kernel-Log-Was-3-17-bringt-1-Storage-Netzwerk-2399706.html
[42] 
[43] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-11-3641334.html
[44] https://git.kernel.org/torvalds/c/00e043936e9a1c274c29366c7ecd9e17c79418e6
[45] http://marc.info/?l=linux-block&m=148978871820916&w=2
[46] https://git.kernel.org/torvalds/c/aee69d78dec0ffdf82e35d57c626e80dddc314d5
[47] https://git.kernel.org/torvalds/c/e21b7a0b988772e82e7147e1c659a5afe2ae003c
[48] https://git.kernel.org/torvalds/c/44e44a1b329ed37a98bc41ab21fb6897d5a922ac
[49] https://git.kernel.org/torvalds/c/54b604567fbfa1a35a44c2ac4a35c959d277adc2
[50] https://git.kernel.org/torvalds/c/36eca894832351feed9072d0f97eb06fc9482ca4
[51] http://algo.ing.unimo.it/people/paolo/disk_sched/
[52] http://algo.ing.unimo.it/people/paolo/disk_sched/results.php
[53] https://lwn.net/Articles/720675/
[54] 
[55] 
[56] https://git.kernel.org/torvalds/c/3418d036c81dcb604b7c7c71b209d5890a8418aa
[57] https://git.kernel.org/torvalds/c/4536bf9ba2d03404655586b07f8830b6f2106242
[58] https://git.kernel.org/torvalds/c/ba903a3ea465bd2f2bb9316054b295e79a7a518e
[59] https://git.kernel.org/torvalds/c/664aed04446c7f653d8acbe2cdf7989f28238524
[60] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/md/raid5-ppl.txt
[61] http://www.raid-recovery-guide.com/raid5-write-hole.aspx
[62] https://www.spinics.net/lists/raid/msg56274.html
[63] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-4-3053832.html
[64] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-10-3596869.html
[65] 
[66] https://git.kernel.org/torvalds/c/7eada909bfd7ac90a4522e56aa3179d1fd68cd14
[67] https://git.kernel.org/torvalds/c/9d609f85b7eb96697ae22ad1d47a3a3920174ba8
[68] https://git.kernel.org/torvalds/c/ef43aa38063a6b2b3c6618e28ab35794f4f1fe29
[69] https://git.kernel.org/torvalds/c/33d2f09fcb357fd1861c4959d1d3505492bf91f8
[70] https://git.kernel.org/torvalds/c/8f0009a225171cc1b76a6b443de5137b26e1374b
[71] https://git.kernel.org/torvalds/c/d35a878ae1c50977b55e352fd46e36e35add72a0
[72] https://git.kernel.org/torvalds/c/7b66f13207e60e7c550af730986e77e38a0c69a3
[73] https://git.kernel.org/torvalds/c/b29d4986d0da1a27cd35917cdb433672f5c95d7f
[74] https://git.kernel.org/torvalds/c/6e53636fe81465d6810f4e0910e7238edf12a133
[75] 
[76] https://git.kernel.org/torvalds/c/e5021876c91dc3894b2174cca8fa797f8e29e7b9
[77] https://git.kernel.org/torvalds/c/aaf9f12ebfafd1ea603d61ead6dbcf456a86e0f3
[78] https://git.kernel.org/torvalds/c/535ae4eb1225f19e1d1848c65eafea8b7e9112f4
[79] https://git.kernel.org/torvalds/c/effe6ee7523aa50d0517bd7da141e112b44d89fa
[80] https://git.kernel.org/torvalds/c/a4bd217b432685d6a177c28a2af187f041c473b7
[81] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-4-3053832.html?#lightnvm
[82] https://git.kernel.org/torvalds/c/694752922b12bd318aa80191bd9d8c3dcfb39055
[83] https://git.kernel.org/torvalds/c/08c521a2011ff492490aa9ed6cc574be4235ce2b
[84] https://git.kernel.org/torvalds/c/044f1daaaaf7c86bc4fcf433848b7baae236946b
[85] https://git.kernel.org/torvalds/c/9e234eeafbe17e85908584392f249f0b329b8e1b
[86] https://git.kernel.org/torvalds/c/327ffb9b37a9df80dad4fa176fbf0c0fb1ac4ac0
[87] https://git.kernel.org/torvalds/c/cd5ab1b0fcb44ab5d00358edc9b0b2e2a966fb22
[88] https://git.kernel.org/torvalds/c/c79892c5576163b3c7403b9d75cbe8dcae65e428
[89] https://git.kernel.org/torvalds/c/b22c417c885ea973149ecf56286aabec060153e2
[90] https://git.kernel.org/torvalds/c/297e3d854784821d3b8ff3ae117f20d71f125504
[91] https://git.kernel.org/torvalds/c/b9147dd1bae2b15d6931ecd42f8606c775fecbc9
[92] https://git.kernel.org/torvalds/c/ada75b6e5b2a939401d4919dfaf2f2fc9484f68a
[93] https://git.kernel.org/torvalds/c/ec80991d6fc2cb17abfc5427ac1512d2ccd40589
[94] https://git.kernel.org/torvalds/c/53696b8d212f4a0f0e5dcdb3df64558dcdf03d1a
[95] 
[96] 
[97] https://git.kernel.org/torvalds/c/80c9f490f344be7999f57fc31a8ed956f8c65f3b
[98] https://git.kernel.org/torvalds/c/d0649f0416feb616d34d15e541716cb8a555e899
[99] https://git.kernel.org/torvalds/c/e89c041338ed6ef2694e6465ca1ba033e0a2978c
[100] https://git.kernel.org/torvalds/c/0c9ec4beecac94cb450c8abb2ac8b7e8a79240ea
[101] https://www.spinics.net/lists/linux-btrfs/msg63189.html
[102] https://blogs.oracle.com/linuxkernel/entry/upcoming_xfs_work_in_linux
[103] https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=djwong-devel
[104] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-8-3283402.html
[105] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-9-3351436.html
[106] 
[107] https://btrfs.wiki.kernel.org/index.php/Status
[108] https://git.kernel.org/torvalds/c/1176032cb12bb89ad558a3e57e82f2f25b817eff
[109] https://btrfs.wiki.kernel.org/index.php/Status
[110] https://git.kernel.org/torvalds/c/dd727dad37297f497dc69ac00182abf9651e7b6c
[111] https://git.kernel.org/torvalds/c/fe7a719b30dfdb4d55680461954b99b257ebe671
[112] https://git.kernel.org/torvalds/c/6685c5e2d1acae8e7d3b63b1a205f58420ce7150
[113] https://git.kernel.org/torvalds/c/ccf7f4088af2dd6733bfcbc40b488e2484345ae5
[114] https://git.kernel.org/torvalds/c/c610c4b619e53494d9c512fa0333e28c732e976f
[115] https://git.kernel.org/torvalds/c/7db0a6efdc3e990cdfd4b24820d010e9eb7890ad
[116] https://git.kernel.org/torvalds/c/26c5eaa1326e9703effd01e7cc3cc0d4ad4b3c19
[117] https://git.kernel.org/torvalds/c/a2e5ad45a9741068f357de4dbff50bb37c233e1b
[118] https://git.kernel.org/torvalds/c/70ef8f0d37573079e093305214d0cc9eb71100f7
[119] https://git.kernel.org/torvalds/c/5133cd7518758211e827481e7d5053333bb926f0
[120] https://git.kernel.org/torvalds/c/1a5fb64fee203f9f5a9274c67ddbb821a29f723f
[121] https://git.kernel.org/torvalds/c/53ef7d0e208fa38c3f63d287e0c3ab174f1e1235
[122] https://git.kernel.org/torvalds/c/0fcc3ab23d7395f58e8ab0834e7913e2e4314a83
[123] https://git.kernel.org/torvalds/c/be580e7522eecfcf31c70abdf6fa0ae77b2e293b
[124] https://git.kernel.org/torvalds/c/9786e34e0a6055dbd1b46e16dfa791ac2b3da289
[125] https://git.kernel.org/torvalds/c/73ccb023a2f25b72c4b95499ca24760588014614
[126] https://git.kernel.org/torvalds/c/c70422f760c120480fee4de6c38804c72aa26bc1
[127] https://git.kernel.org/torvalds/c/aeced66196460a04644538f4985192ce6be6acc0
[128] https://git.kernel.org/torvalds/c/b948abf53a381a0c681aadd612e2affba47f62bc
[129] https://git.kernel.org/torvalds/c/2575be8ad32f9910d7e7c118e73f529b8d5b8b7b
[130] https://git.kernel.org/torvalds/c/8d5e72dfdf0fa29a21143fd72746c6f43295ce9f
[131] https://git.kernel.org/torvalds/c/bd1286f964041a2fe5eec8801a51bd79d905bd02
[132] https://git.kernel.org/torvalds/c/b53c4d5eb7cda86f7bf495f52116ae43bdc9cf23
[133] https://git.kernel.org/torvalds/c/d484467c860dab3e17893d23b2238e1f581460fa
[134] 
[135] 
[136] https://git.kernel.org/torvalds/c/bf3b9f6372c45b0fbf24d86b8794910d20170017
[137] https://git.kernel.org/torvalds/c/8e8cda6d737d356054c9eeef642aec0e8ae7e6bc
[138] https://git.kernel.org/torvalds/c/cb5635a3677679666e4e81ecbb209d32f13dedcd
[139] https://git.kernel.org/torvalds/c/a8f820a380a2a06fc4fe1a54159067958f800929
[140] 
[141] https://git.kernel.org/torvalds/c/c8744f44aeaee1caf5d6595e9351702253260088
[142] https://git.kernel.org/torvalds/c/3a3173b9c37aa1f07f8a71021114ee29a5712acb
[143] https://git.kernel.org/torvalds/c/65e0ace2c5cdd7aa898fea17d6e7bdc909394bf9
[144] https://git.kernel.org/torvalds/c/b8f126a8d54318b82703783e76d28fd7c1ae6bed
[145] https://git.kernel.org/torvalds/c/5da083d1922c23b75e921c85b687c8e112e8280e
[146] https://git.kernel.org/torvalds/c/623e7766be907d9c20af334e25f98005c75b5d32
[147] https://git.kernel.org/torvalds/c/6b35ff91572f7fc42ec0026f512a8d274071163b
[148] https://git.kernel.org/torvalds/c/fa1f2b617a94ff734fe2d5136bbda4e4f2d22635
[149] https://git.kernel.org/torvalds/c/eda50cde58de7368f982e3906090fc033ecb9360
[150] https://git.kernel.org/torvalds/c/8d65b08debc7e62b2c6032d7fe7389d895b92cbc
[151] https://git.kernel.org/torvalds/c/4ac4d584886a4f47f8ff3bca0f32ff9a2987d3e5
[152] https://git.kernel.org/torvalds/c/50fb55d88c999b3c17f93357a009b04d22eda4f7
[153] https://git.kernel.org/torvalds/c/1684096b1ed813f621fb6cbd06e72235c1c2a0ca
[154] https://git.kernel.org/torvalds/c/3341713c67d5eae5c68bab30add97e9f9ecfafa5
[155] https://git.kernel.org/torvalds/c/d77e38e612a017480157fe6d2c1422f42cb5b7e3
[156] https://git.kernel.org/torvalds/c/fb30d4b71214aa1811e997f8f753b14b46d5b912
[157] https://git.kernel.org/torvalds/c/56f668dfe00dcf086734f1c42ea999398fad6572
[158] https://git.kernel.org/torvalds/c/1cf1cae963c2e6032aebe1637e995bc2f5d330f4
[159] 
[160] 
[161] https://git.kernel.org/torvalds/c/8d2b47dde8a097e6fef2ebb5042cbb267cc75adf
[162] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-2-2789351.html?#gpu
[163] https://git.kernel.org/torvalds/c/fec0445caa273209d2809760ac7c63e743d6f512
[164] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-10-3596869.html?#gpufences
[165] 
[166] https://git.kernel.org/torvalds/c/f7c478be0abb5f6db5dfa13bb8118628817b9afe
[167] https://git.kernel.org/torvalds/c/34bb2734d1bc3c72e4739234481c0efab0941d14
[168] https://git.kernel.org/torvalds/c/bb7d78568814a31a11fa14f1479a9fe51f1582ad
[169] https://git.kernel.org/torvalds/c/2f34c1231bfc9f2550f934acb268ac7315fb3837
[170] https://git.kernel.org/torvalds/c/7c9dff5bd643052989ec0982a8fc30b26b940db9
[171] https://git.kernel.org/torvalds/c/8531e283bee66050734fb0e89d53e85fd5ce24a4
[172] https://git.kernel.org/torvalds/c/84c8b22e9fe8d9a7f2ab3d561a6b4576540f5a31
[173] https://git.kernel.org/torvalds/c/1d3c11030103680a30bbe78b599f7e009bba3bc6
[174] https://git.kernel.org/torvalds/c/7ffb0ce31cf90c21dfa496c19c2c795534b12e76
[175] 
[176] https://git.kernel.org/torvalds/c/31cbee6a5611f07d2d66f55bb6f8648db5947e32
[177] https://lwn.net/Articles/722267/
[178] 
[179] https://git.kernel.org/torvalds/c/fab9288428ec0fbd09adb67d3a17c51d78196f9c
[180] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/usb/typec.rst
[181] https://git.kernel.org/torvalds/c/d2061f9cc32dbb895191833063d9f3366fdaae78
[182] https://git.kernel.org/torvalds/c/f0690a25a140b853b1842fa80faf828601bb47e8
[183] https://git.kernel.org/torvalds/c/74e656d6b0551999194b5ab1e45ff8b1e82b898e
[184] https://git.kernel.org/torvalds/c/554c0a3abf216c991c5ebddcdb2c08689ecd290b
[185] https://git.kernel.org/torvalds/c/325b5b6c96a863989078df402d1670d061f52d88
[186] 
[187] http://cateee.net/lkddb/
[188] https://git.kernel.org/torvalds/c/660fc733bd7436f4fa1a351376493e635514ed64
[189] https://git.kernel.org/torvalds/c/c4a0968aea0d887b15d8df15399f8e0dc614aecf
[190] https://git.kernel.org/torvalds/c/4706aa075662fe3cad29c3f49b50878de53f4f3b
[191] https://git.kernel.org/torvalds/c/af82455f7dbd9dc20244d80d033721b30d22c065
[192] https://git.kernel.org/torvalds/c/b5a53b61a2890ec08f404f524c1c42aa86f09be4
[193] https://git.kernel.org/torvalds/c/4879b7ae05431ebcd228a4ff25a81120b3d85891
[194] https://git.kernel.org/torvalds/c/14b730723aac9cf3ba0a74e830491e9a43bfc80a
[195] https://git.kernel.org/torvalds/c/16a12fa9aed176444fc795b09e796be41902bb08
[196] https://git.kernel.org/torvalds/c/cd636458904a04de2349c728323c5d2af1203bdf
[197] https://git.kernel.org/torvalds/c/7af4c727c7b6104f94f2ffc3d0899e75a9cc1e55
[198] https://git.kernel.org/torvalds/c/e69bbe75de8ee0e732b8c009197f1a97e804d43c
[199] https://git.kernel.org/torvalds/c/2bd80401743568ced7d303b008ae5298ce77e695
[200] https://git.kernel.org/torvalds/c/cdbfbba98c151886a8e74116fbd8ba14e8200cb4
[201] https://git.kernel.org/torvalds/c/e87d51ac61f88ae44fe14b34abe08566032d726b
[202] https://git.kernel.org/torvalds/c/d26f552ebbfb0f2c7fe712f457a038d60ed73daa
[203] https://git.kernel.org/torvalds/c/99a7583de5ffd5cd82c407aad32bcbdeea09155b
[204] https://git.kernel.org/torvalds/c/221656e7c4ce342b99c31eca96c1cbb6d1dce45f
[205] https://git.kernel.org/torvalds/c/deac8429d62ca19c1571853e2a18f60e760ee04c
[206] https://git.kernel.org/torvalds/c/c6a677c6f37bb7abc85ba7e3465e82b9f7eb1d91
[207] https://git.kernel.org/torvalds/c/8f28472a739e8e39adc6e64ee5b460df039f0e4f
[208] 
[209] 
[210] 
[211] https://git.kernel.org/torvalds/c/c4980cee82efb4fef8afac3675cb25fba3baca34
[212] https://github.com/systemd/systemd-bootchart
[213] https://01.org/suspendresume
[214] https://github.com/01org/pm-graph
[215] https://git.kernel.org/torvalds/c/bc167c7de8886f08b3d8266b176eefaa9f22cd80
[216] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/power/pm-graph/bootgraph.8
[217] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/power/pm-graph/sleepgraph.8
[218] 
[219] https://git.kernel.org/torvalds/c/a96480723c287c502b02659f4b347aecaa651ea1
[220] http://xenbits.xen.org/gitweb/?p=xen.git;a=blob_plain;f=docs/misc/9pfs.markdown;hb=HEAD
[221] https://lists.gnu.org/archive/html/qemu-devel/2017-03/msg03932.html
[222] https://git.kernel.org/torvalds/c/f9ebfc22cc15c06ba61563c885f40a4bc07cccea
[223] https://git.kernel.org/torvalds/c/8945c08e2b148be926b5f1aa653b2021a127e905
[224] https://git.kernel.org/torvalds/c/2843531fb6ca74a960d6dd2b7fda0717f60bf2e9
[225] https://www.linux.com/blog/xen-project/2017/6/xen-related-work-linux-kernel-current-and-future-plans
[226] https://git.kernel.org/torvalds/c/2d3e4866dea96b0506395b47bfefb234f2088dac
[227] https://git.kernel.org/torvalds/c/5ccd414080822d5257c3569f4aeca74f63f4a257
[228] https://git.kernel.org/torvalds/c/ad6260da1e23cf937806e42c8490af3ff4530474
[229] 
[230] https://git.kernel.org/torvalds/c/7c8c03bfc7b9f5211d8a69eab7fee99c9fb4f449
[231] https://git.kernel.org/torvalds/c/cf25f904ef75aa7c25097eb4981bbc634bf5ff9e
[232] https://git.kernel.org/torvalds/c/092a95d41655bdd31d7d28f1788818724505feb2
[233] https://git.kernel.org/torvalds/c/bccdcb2a77ba0bef17baf152179e30ca35459a0c
[234] https://git.kernel.org/torvalds/c/80432c7311dbcf0c814d4923480b055a725b0be2
[235] https://git.kernel.org/torvalds/c/92c6de0f10a80e4936fac04148bd3783a7c2b9f8
[236] https://git.kernel.org/torvalds/c/7768f8dada66d6052fccbc2ddc375f3e650455b9
[237] https://git.kernel.org/torvalds/c/4c174688ee92805aa5df6e06e5b625a3286e415c
[238] https://git.kernel.org/torvalds/c/1e10486ffee0a5b060c58b9c8c712422f7b88b3b
[239] 
[240] https://git.kernel.org/torvalds/c/ec48c940da6cb96c4be6638d0f2efade24d5242a
[241] https://git.kernel.org/torvalds/c/f44a2920c84af809883ecbbd08d47fb5fe47c8ad
[242] https://git.kernel.org/torvalds/c/68b43744c1fb3f86238527a696c0dc5f2bd6ea1b
[243] https://git.kernel.org/torvalds/c/a1235b3eb10086b8420f37bbb6c29436f55940ba
[244] https://lwn.net/Articles/721074/
[245] https://git.kernel.org/torvalds/c/a9ebf306f52c756c4f9e50ee9a60cd6389d71344
[246] https://git.kernel.org/torvalds/c/a1235b3eb10086b8420f37bbb6c29436f55940ba
[247] https://git.kernel.org/torvalds/c/752ade68cbd81d0321dfecc188f655a945551b25
[248] https://lwn.net/Articles/711653/
[249] https://git.kernel.org/torvalds/c/08be881064da126b8df4b96b0b3e2e307969a4a1
[250] https://git.kernel.org/torvalds/c/dc9edaab90de9441cc28ac570b23b0d2bdba7879
[251] https://git.kernel.org/torvalds/c/3ef2bc099d1cce09e2844467e2ced98e1a44609d
[252] https://git.kernel.org/torvalds/c/5fab10041b4389b61de7e7a49893190bae686241
[253] https://git.kernel.org/torvalds/c/c58d4055c054fc6dc72f1be8bc71bd6fff209e48
[254] https://git.kernel.org/torvalds/c/89d1cf89c88f4684a51bd1f3e3aff0ae32572292
[255] https://git.kernel.org/torvalds/c/3711c94fd6593318146348c940d81040acf9e877
[256] https://git.kernel.org/torvalds/c/28b47809b2171a6cfbab839936b24280639c9f85
[257] https://git.kernel.org/torvalds/c/3cb6653552ddd0b5670a445032ecb9f162e950ff
[258] https://git.kernel.org/torvalds/c/593043d35ddff8ab033546c2a89bb1d4080d03e1
[259] https://git.kernel.org/torvalds/c/23ea3f62f3f90caaa7b4bf32690c341101228cca
[260] https://git.kernel.org/torvalds/c/791a9a666d1afe2603bcb2c6a4852d684e879252
[261] https://git.kernel.org/torvalds/c/2868b2513aa732a99ea4a0a6bf10dc93c1f3dac2
[262] https://git.kernel.org/torvalds/c/207fb8c3049cdc31de20ca9f91d0ae319125eb62
[263] https://git.kernel.org/torvalds/c/857f8640147c9fb43f20e43cbca6452710e1ca5d
[264] https://git.kernel.org/torvalds/c/0e285e90887bcb248178d55960e1276188c657c9
[265] https://git.kernel.org/torvalds/c/2e4ab937ec49a6616e7354ccf4b18e4373f5f8a3
[266] https://git.kernel.org/torvalds/c/3dee9fb2a4ced89a13a4d4b72b0b7360b701e566
[267] https://git.kernel.org/torvalds/c/de4d195308ad589626571dbe5789cebf9695a204
[268] https://git.kernel.org/torvalds/c/3527d3e9514f013f361fba29fd71858d9361049d
[269] https://git.kernel.org/torvalds/c/6a776e47a045462a1df1a3a9592598259ffd614f
[270] https://git.kernel.org/torvalds/c/174ddfd5dfbfc2d91a45332f809977050ac3fdc5
[271] https://git.kernel.org/torvalds/c/8f3207c7eab9d885cc64c778416537034a7d9c5b
[272] https://git.kernel.org/torvalds/c/c44b59430393c38873fd933333d945f426857a59
[273] 
[274] 
[275] https://git.kernel.org/torvalds/c/aeb9dd1de98c1a5f2007ea5d2a154c1244caf8a0
[276] https://git.kernel.org/torvalds/c/1b5aeebf3a92273b4d85aeff37a16037bc3c3abf
[277] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-11-3641334.html
[278] https://git.kernel.org/torvalds/c/0318e5abe1c0933b8bf6763a1a0d3caec4f0826d
[279] https://git.kernel.org/torvalds/c/3677d4c6a2010e4f5a0ca8b617b595fe4cc7ba6b
[280] https://git.kernel.org/torvalds/c/4c7c44837be77e2689c577abef155c4b5d873c82
[281] https://git.kernel.org/torvalds/c/4547833602fdd3b672c9b945818cc658d38bfcf1
[282] http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1414019.html
[283] https://git.kernel.org/torvalds/c/05b93417ce5b924c6652de19fdcc27439ab37c90
[284] https://git.kernel.org/torvalds/c/db69ef65636e6da135680d75d8646bd7e76136bc
[285] https://git.kernel.org/torvalds/c/a9cad3d4f046bbd8f096b78d220c8d7074c2e93f
[286] https://git.kernel.org/torvalds/c/2dbf3d5c32bf905c2575e5759f2ab6262ec9c6c5
[287] https://git.kernel.org/torvalds/c/4a1e31c68e9f40be32838944931178b0d9ed9162
[288] https://git.kernel.org/torvalds/c/9c6ee01ed5bb1ee489d580eaa60d7eb5a8ede336
[289] https://git.kernel.org/torvalds/c/0160e00ae8e987be8822745fb166aa76451c9bcc
[290] https://git.kernel.org/torvalds/c/85d604902eb28eaea4f9e0f3a655ae986fa4bd2e
[291] https://git.kernel.org/torvalds/c/8d648aad05811ccc07df22834de60a7bf8d9e0e6
[292] https://git.kernel.org/torvalds/c/ab182e67ec99ea0c8d7435a32a4a1ed9bb02559a
[293] https://git.kernel.org/torvalds/c/0ff4c01b279a590a2826ade9321ad8c7ca5a1b6c
[294] https://git.kernel.org/torvalds/c/c6778ff813d2ca3e3c8733c87dc8b6831a64578b
[295] https://git.kernel.org/torvalds/c/ac3c4aa248c5b5390c40fad1ceb0a15a53f57a36
[296] https://git.kernel.org/torvalds/c/0ba1c1950c320fcfdfe3dbc7470884e4a390083c
[297] https://git.kernel.org/torvalds/c/7246f60068840847bdcf595be5f0b5ca632736e0
[298] https://git.kernel.org/torvalds/c/dc2a24816637ff6c60f08c4245aba01c6e9b6a79
[299] https://git.kernel.org/torvalds/c/b68e7e952f24527de62f4768b1cead91f92f5f6e
[300] 
[301] http://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1116927.html
[302] https://git.kernel.org/torvalds/c/0302e28dee643932ee7b3c112ebccdbb9f8ec32c
[303] https://git.kernel.org/torvalds/c/734114f8782f6c3398762f2353fe9101d87b6d06
[304] https://git.kernel.org/torvalds/c/291b38a7565b41676cafd1b4052315a94d9c8977
[305] 
[306] https://git.kernel.org/torvalds/c/6807c84652b0b7e2e198e50a9ad47ef41b236e59
[307] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-3-14-2150433.html
[308] https://forums.grsecurity.net/viewtopic.php?f=7&t=3367
[309] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-8-3283402.html#kaslr
[310] https://git.kernel.org/torvalds/c/967c9cca2cc50569efc65945325c173cecba83bd
[311] https://lwn.net/Articles/717125/
[312] https://git.kernel.org/torvalds/c/46f0537b1ecf672052007c97f102a7e6bf0791e4
[313] https://git.kernel.org/torvalds/c/5a0387a8a8efb90ae7fea1e2e5c62de3efa74691
[314] https://git.kernel.org/torvalds/c/0302e28dee643932ee7b3c112ebccdbb9f8ec32c
[315] https://git.kernel.org/torvalds/c/745b361e989af21ad40811c2586b60229f870a68
[316] https://git.kernel.org/torvalds/c/ca97d939db114c8d1619e10a3b82af8615372dae
[317] http://blog.namei.org/2017/03/09/hardening-the-lsm-api/
[318] 
[319] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-5-3132326.html
[320] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-6-3197968.html
[321] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-7-3217845.html
[322] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-8-3283402.html
[323] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-9-3351436.html
[324] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-10-3596869.html
[325] https://www.heise.de/ct/artikel/Die-Neuerungen-von-Linux-4-11-3641334.html
[326] https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1435922.html
[327] mailto:thl@ct.de
[328] https://kernel.org/
[329] https://www.heise.de/ct/artikel/Linux-Kernel-massgeschneidert-1402386.html
[330]