zurück zum Artikel

Die Neuerungen von Linux 3.16

| Thorsten Leemhuis

Btrfs und NFS sollen robuster und schneller arbeiten. Ein neues Skript vereinfacht die Fehleranalyse. Optimierungen am Locking-Code können die Performance signifikant verbessern. Die sollen auch einige Änderungen an den Grafiktreibern von AMD und Intel steigern. Nvidia arbeitet jetzt am Nouveau-Treiber mit.

Linus Torvalds hat den Linux-Kernel 3.16 freigegeben [1]. Zu dessen wichtigsten Neuerungen zählen allerlei Änderungen an den Grafiktreibern des Kernels. Jener für Grafikkerne von Intel unterstützt dadurch jetzt Userspace Pointer [2]. Durch diese auch User Pointer oder Userptr genannte Funktion müssen Speicherbereiche regulärer Programme nicht erst in den Kernel-eigenen Speicherbereich kopiert werden, damit der Grafikkern auf sie zugreifen kann; das vermeidet Overhead und kann so 3D-, Video- und OpenCL-Leistung verbessern.

Der Radeon-Treiber beherrscht nun HDMI Deep Color [3]. Zudem unterstützt der Treiber bei neueren AMD-Prozessoren mit Grafikkern (APU/Accelerated Processing Unit) jetzt BAPM (Bidirectional Application Power Management); dadurch kann der Grafikkern etwas höher takten und mehr Leistung liefern, wenn die APU ihre maximale thermische Verlustleistung (TDP/Thermal Design Power [4]) noch nicht erreicht hat, weil die CPU-Kerne gerade nicht so viel zu tun haben (1 [5], 2 [6]).

Mehr Infos

Im Detail

Bereits in den vergangenen Wochen hat die Kernel-Log [7]-Artikelserie "Was 3.16 bringt" detailliert über die Änderungen von Linux 3.16 berichtet. Das war möglich, weil die Hauptentwicklungsphase dieser Version bereits Mitte Juni endete [8]:

  1. Storage & Netzwerk [9]
  2. Infrastruktur [10]
  3. Treiber [11]

Der nebenstehende Text fasst die wichtigsten Neuerungen dieser Artikel zusammen und gibt einen Ausblick auf einige Neuerungen, die in 3.17 einfließen dürften.

Der Nouveau-Treiber bietet nun Basis-Support für den Grafikchip GK110B [12], den etwa die GeForce GTX 780 Ti nutzt. Nvidia hat Code beigesteuert, damit der Treiber auch den GK20a-Grafikkern des System-on-Chip (SoC) Tegra K1 [13] unterstützt (u. a. 1 [14], 2 [15], 3 [16]). Damit beteiligt sich Nvidia erstmals signifikant an der Entwicklung des Nouveau-Treibers, der maßgeblich per Reverse Engineering entwickelt wird. Nvidia will die Mitarbeit am Treiber aber auch in Zukunft auf Code konzentrieren, der zur Unterstützung der Grafikkerne in den hauseigenen ARM-SoCs benötigt wird.

Das Btrfs-Dateisystem unterstützt [18] nun das bei Linux 3.11 eingeführte Open-Flag O_TMPFILE [19]; damit lassen sich temporäre Dateien anlegen, die beim Auflisten der Dateisysteminhalte nie zu sehen sind und beim Schließen gelöscht werden. Ferner haben die Kernel-Entwickler einige Macken am Quota-Support von Btrfs beseitigen (u. a. 1 [20], 2 [21]). Das Netzwerk-Dateisystem NFS soll bessere Performance liefern, wenn Verzeichnisse viele Dateien enthalten oder Access Control Lists (ACLs) im Spiel sind. Der Kernel unterstützt [22] nun FAT-Dateisysteme im DOS-1.x-Format [23], das die ersten PCs bei Disketten mit 160, 180, 320 und 360 KByte Speicherplatz verwendet haben.

TCP Fast Open (TFO), das seit 3.13 den Aufbau von HTTP-Verbindungen beschleunigen [25] kann, funktioniert nun auch mit IPv6 [26]. Die Netzwerk-Treiber für Xen-Hosts und Gäste verwenden nun mehrere Warteschlangen und sollen dadurch schneller arbeiten (1 [27], 2 [28], 3 [29]).

Der bei 3.15 erneuerte Berkeley Packet Filter (BPF) [31] kann auf x86-64-Systemen nun auf einen Just in Time Compiler zurückgreifen [32]. Er ersetzt einen x86-64-JIT, der für den alten BPF-Interpreter geschriebenen Code ausführen konnte. Solchen Code soll der neue JIT ebenso schnell ausführen wie der alte, der allerdings drei BPF-Extensions nicht unterstützt hat. Der neue JIT kennt diese und kann so auch von dem bei 3.5 eingeführten Seccomp Filters Mechanism genutzt werden [33], der Funktionsaufrufe filtert, um Software in eine Sandbox zu sperren. Durch den neuen JIT sollen Filter, die auf solche BPF-Erweiterungen zurückgreifen, deutlich schneller arbeiten; einige Micro-Benchmarks sollen zwanzig Mal bessere Werte liefern.

Die Reader Writer Semaphores (rwsem) [34], die der Kernel an manchen Stellen zum Locking verwendet, nutzen nun "Optimistic Spinning" [35] und sollen dadurch in bestimmten Situationen deutlich schneller arbeiten. Der Entwickler der Änderung erwähnt im Commit-Kommentar eine Messung mit dem Aim7-Benchmark, der um 20 bis 60 Prozent bessere Werte erzielt habe; der PostgreSQL-Benchmark Pgbench habe in einem Test rund 60 Prozent mehr Durchsatz geliefert.

Den Kernel-Quellen liegt nun [36] das Bash-Skript decode_stacktrace.sh [37] bei. Es kann die bei Kernel-internen Fehlern ausgegebenen Stacks-Dumps aufarbeiten, damit der Aufrufweg der Funktion klarer zu sehen ist, in der der Fehler aufgetreten ist.

Die Kernel-Entwickler haben das Locking des Storage-Treibers virtio-blk optimiert [39]. Der vor allem bei der KVM-Virtualisierung in Linux-Gästen verwendete Treiber soll dadurch in bestimmten Situationen erheblich schneller arbeiten. Der Treiber für die Micron RealSSD PCIe [40] verwendet nun den Multi-Queue Block IO Queueing Mechanism (blk-mq). Diese für sehr schnelle Storage-Hardware entwickelte Infrastruktur bietet Basis-Funktionen für Storage-Treiber; sie wurde bei 3.13 integriert [41] und erhielt jetzt mehrere Verbesserungen [42]. Blk-mq soll damit nun nahe am gewünschten Funktionsumfang sein und in bestimmten Situationen nochmals schneller arbeiten (u. a. 1 [43]).

Der neue Kernel bringt wieder einige wichtige Verbesserungen – es sind aber weniger als bei den vorangegangenen Versionen. Die wichtigsten sind die Verbesserungen bei den Grafiktreibern. Der JIT für den Berkeley Packet Filter (BPF) und die Optimierungen am Block-Layer scheinen nicht sonderlich bedeutsam zu sein, sind aber wichtige Fundamente für zukünftige Verbesserungen.

Direkt nach der Freigabe der neuen Version beginnt nun das Merge Window [46], in dem Linus Torvalds das Gros der Änderungen für den Nachfolger annimmt. Diese Phase endet mit der Veröffentlichung der ersten Vorabversion von 3.17 und ist typischerweise zwei Wochen lang; weil Torvalds reist [47] könnten es diesmal aber auch drei Wochen werden.

Zur Aufnahme ist unter anderem ein Treiber für die Thunderbolt-Schnittstellen von Apple MacBooks [48] vorgesehen. Integriert werden sollen auch die Unterstützung [49] für den mit DisplayPort 1.2 spezifizierten Multi-stream Transport (MST) [50], mit dem sich mehrere Monitore über eine DisplayPort-Verbindung ansprechen lassen. Auch die Patches [51], durch die SCSI-Treiber auf die Multiqueue-Infrastuktur im Block-Layer zurückgreifen können, sollen in 3.17 einziehen.

Noch unklar ist, ob die von David Herrmann vorangetriebenen Änderungen [52] aufgenommen werden, die File Sealing und den Syscall memfd_create() [53] nachrüsten. Mit diesen Funktionen lassen sich file descriptor [54] für anonymous memory [55] austauschen und auf Wunsch versiegeln; der designierte D-Bus-Nachfolger Kdbus [56] will diese Funktionen beim Austausch größerer Datenmengen per IPC (Inter-process communication) [57] nutzen.

Außen vor dürften bei 3.17 noch die Änderungen der Kpatch- und Kgraft-Entwickler bleiben, mit denen sich Kernel-Fehler im Betrieb korrigieren lassen [58]. Die Kgraft-Entwickler waren während der Entwicklung von 3.16 schon vorgeprescht und hatten um die Aufnahme ihrer Lösung in linux-next gebeten; dort werden Patches aufeinander abgestimmt und zum Testen gesammelt, die in die jeweils übernächste Kernel-Version einfließen sollen. Auf diese Bitte hin haben einige Kernel-Entwickler dann aber gefordert, es müsse erst noch diskutiert werden, welche der beiden Lösungen denn in den Kernel einfließen soll (1 [59], 2 [60]).

Sofern Torvalds und seine Mitstreiter mit dem gewohnten Tempo arbeiten, dürfte 3.17 Ende September oder Anfang Oktober erscheinen. Ein Artikel wie dieser wird dann wieder einen Überblick über die wichtigsten Neuerungen der Version liefern.

Linux-
Version
Anzahl
Dateien¹
Zeilen
Quelltext
(OhneDoku)²
Entwick-
lungs-
zeitraum
Anzahl
Commits³
Diffstat⁴
3.9 [62] 42423 16686879
(15563152)
69 Tage 11910 11120 files changed,
 608436 insertions(+),
 338439 deletions(-)
3.10 [63] 43016 16955489
(15803499)
63 Tage 13637
10471 files changed,
 660572 insertions(+),
 391966 deletions(-)
3.11 [64] 44002 17403279
(16225814)
63 Tage 10893 9692 files changed,
 788982 insertions(+),
 341196 deletions(-)
3.12 [65] 44586
17726872
(16529850)
62 Tage 10927 8636files changed,
 587004 insertions(+),
 263408 deletions(-)
3.13 [66]

44970 17930916
(16703764)
77 Tage 12127 9843 files changed,
 441474 insertions(+),
 237428 deletions(-)
3.14 [67] 45935 18271989
(17002462)
70 Tage 12311 10601 files changed,
 605655 insertions(+),
 264576 deletions(-)
3.15 [68] 46780 18632574
(17323446)
53 Tage 13722 11427 files changed,
 932110 insertions(+),
 571520 deletions(-)
3.16 47425 18879129
(17527507)
56 Tage 12804 9807 files changed,
 513830 insertions(+),
 267276 deletions(-)
¹ find . -type f -not -regex '\./\.git/.*' | wc -l
² find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l; echo "($(find . -name *.[hcS] -not -regex '\./\.git.*' | xargs cat | wc -l))"
³ git-log --no-merges --pretty=oneline v3.(x-1)..v3.(x) | wc -l
⁴ git diff --shortstat v3.(x-1)..v3.(x)
⁵ Stand: 30.07.
Mehr Infos

Linux herunterladen

Die neue Linux-Version steht über Kernel.org zum Download [69] bereit; bereits kurz nach der Veröffentlichung liefern auch viele Spiegelserver [70] den neuen Kernel aus.

Den Quellcode von Linux gibt es in Tar-Archiven, die mit Gzip und Xz komprimiert wurden. Die folgenden Befehle zeigen am Beispiel von Linux 3.1, wie Sie die Quellen herunterladen, entpacken und auf Unversehrtheit prüfen:

[thl@thl tmp]$ export linux_version=3.1
[thl@thl tmp]$ wget --quiet \
http://www.kernel.org/pub/linux/kernel/v3.0/linux-${linux_version}.tar.sign \
http://www.kernel.org/pub/linux/kernel/v3.0/linux-${linux_version}.tar.xz
[thl@thl tmp]$ xz -d linux-${linux_version}.tar.xz
[thl@thl tmp]$ gpg --verify linux-${linux_version}.tar.sign
gpg: Unterschrift vom Mo 24 Okt 2011 09:17:58 CEST mittels RSA-Schlüssel ID 00411886
gpg: Korrekte Unterschrift von "Linus Torvalds <torvalds@linux-foundation.org>"
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck = ABAF 11C6 5A29 70B1 30AB E3C4 79BE 3E43 0041 1886

Einige Hinweise zur Einrichtung eines neuen Kernels finden Sie im Artikel "Linux-Kernel maßgeschneidert [71]", der die Einrichtung eines Kernels mit Hilfe des Make-Targets "localmodconfig" beschreibt.

(thl [72]) (thl [73])


URL dieses Artikels:
https://www.heise.de/-2278810

Links in diesem Artikel:
[1] http://article.gmane.org/gmane.linux.kernel/1761453
[2] https://git.kernel.org/linus/5cc9ed4b9a7ac579362ccebac67f7a4cdb36de06
[3] http://en.wikipedia.org/wiki/Color_depth#Deep_color_.2830.2F36.2F48-bit.29
[4] http://de.wikipedia.org/wiki/Thermal_Design_Power
[5] https://git.kernel.org/linus/09f95d5b8ca64a9ebb5e206ed936c1a70dc8e9c8
[6] https://git.kernel.org/linus/0c78a44964db3d483b0c09a8236e0fe123aa9cfc
[7] http://www.heise.de/glossar/entry/Kernel-Log-397909.html
[8] https://www.heise.de/news/Erste-Vorabversion-verfuegbar-Linux-3-16-bringt-aufgebohrte-Grafiktreiber-2222275.html
[9] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-1-Dateisysteme-Storage-2244446.html
[10] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-3-Infrastruktur-2261539.html
[11] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-4-Treiber-2267746.html
[12] https://git.kernel.org/linus/9abdbab031f3f4f1817ecac737771b071eb48443
[13] https://www.heise.de/news/Entwickler-Kit-mit-Nvidia-SoC-Tegra-K1-erhaeltlich-2154937.html
[14] https://git.kernel.org/linus/fef94f6272c6d1ce1c9177770f50f7281d61f5f6
[15] https://git.kernel.org/linus/a4d4bbf130724c9a9a3dff673eb9342f1dbe2392
[16] https://git.kernel.org/linus/52e98f1a84094f9cfb36d02a73bc4271a71c70eb
[17] 
[18] https://git.kernel.org/linus/ef3b9af50bfa6a1f02cd7b3f5124b712b1ba3e3c
[19] https://www.heise.de/hintergrund/Kernel-Log-Was-3-11-bringt-1-Dateisysteme-Storage-1930673.html
[20] https://git.kernel.org/linus/fcebe4562dec83b3f8d3088d77584727b09130b2
[21] https://git.kernel.org/linus/faa2dbf004e89e8f7ccd28fbe6f07c308417b8ae
[22] https://git.kernel.org/linus/190a8843ded231638d0e7ae7d8ca6a712472d114
[23] http://en.wikipedia.org/wiki/File_Allocation_Table#FAT12
[24] 
[25] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-2-Netzwerk-2066673.html
[26] https://git.kernel.org/linus/3a19ce0eec32667b835d8dc887002019fc6b3a02
[27] https://git.kernel.org/linus/50ee60611bf0c7328e5cae438ea5c26590f3f747
[28] https://git.kernel.org/linus/8d3d53b3e43363e79ab9a9ecc149b06c1314b25d
[29] https://git.kernel.org/linus/a2deb8b1e7a403fd63e08f87eb95217dd983e0d3
[30] 
[31] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-3-Infrastruktur-2195662.html
[32] https://git.kernel.org/linus/622582786c9e041d0bd52bde201787adeab249f8
[33] https://www.heise.de/hintergrund/Kernel-Log-Was-3-5-bringt-5-Infrastruktur-1633847.html
[34] http://de.wikipedia.org/wiki/Semaphor_(Informatik)
[35] https://git.kernel.org/linus/4fc828e24cd9c385d3a44e1b499ec7fc70239d8a
[36] https://git.kernel.org/linus/dbd1abb209715544bf37ffa0a3798108e140e3ec
[37] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/scripts/decode_stacktrace.sh
[38] 
[39] https://git.kernel.org/linus/e8edca6f7f92234202d6dd163c118ef495244d7c
[40] https://git.kernel.org/linus/ffc771b3ca8b2c03e5e9faa6335b4862108f111f
[41] https://www.heise.de/hintergrund/Kernel-Log-Was-3-12-bringt-1-Dateisysteme-Storage-2062929.html
[42] https://git.kernel.org/linus/681a2895486243a82547d8c9f53043eb54b53da0
[43] https://git.kernel.org/linus/4bb659b156996f2993dc16fad71fec9ee070153c
[44] 
[45] 
[46] https://www.heise.de/glossar/entry/Entwicklungszyklus-des-Linux-Kernels-397915.html
[47] http://article.gmane.org/gmane.linux.kernel/1761453
[48] http://thread.gmane.org/gmane.linux.kernel/1717419/focus=32447
[49] http://thread.gmane.org/gmane.comp.freedesktop.xorg.drivers.intel/40377/
[50] http://en.wikipedia.org/wiki/DisplayPort#Multiple_displays_on_single_DisplayPort_connector
[51] http://thread.gmane.org/gmane.linux.kernel/1723773
[52] http://thread.gmane.org/gmane.linux.kernel.mm/120587/focus=120888
[53] https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
[54] http://en.wikipedia.org/wiki/File_descriptor
[55] http://en.wikipedia.org/wiki/Mmap#File-backed_and_anonymous
[56] https://www.heise.de/hintergrund/Die-Kernel-Dbus-Implementation-Kdbus-2089531.html
[57] http://en.wikipedia.org/wiki/Inter-process_communication
[58] https://www.heise.de/news/Suses-Live-Patching-Technik-fuer-den-Linux-Kernel-jetzt-verfuegbar-2156942.html
[59] http://thread.gmane.org/gmane.linux.kernel/1732690
[60] http://thread.gmane.org/gmane.linux.kernel/1746770
[61] 
[62] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-9-1844759.html
[63] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-10-1898006.html
[64] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-11-1944715.html
[65] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-12-1981573.html
[66] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-12-2087964.html
[67] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-12-2150433.html
[68] https://www.heise.de/hintergrund/Die-Neuerungen-von-Linux-3-12-2196231.html
[69] http://www.kernel.org/pub/linux/kernel/v3.0/
[70] http://www.kernel.org/mirrors/
[71] https://www.heise.de/tests/Linux-Kernel-massgeschneidert-1402386.html
[72] mailto:thl%40ct.de
[73] mailto:thl@ct.de