Kernel-Log – Was 3.19 bringt (3): Infrastruktur
Der Linux-Kernel kann eine der HSA-Techniken nutzen, mit denen AMD die Effizienz seiner Chips steigern will. Der IPC-Dienst von Android ist nun vollwertiger Bestandteil des Kernels. Linux kann nun Abwärtskompatibilität bieten, die sich ARM bei seinen CPU-Kernen spart.
- Thorsten Leemhuis
Der Linux-Kernel enthält nun den Treiber "amdkfd" (1, 2, 3, 4), mit dem sich "Heterogeneous Queuing" (HQ) bei Prozessoren und Grafikchips von AMD nutzen lässt. Die Technik ist eine von mehreren der "Heterogeneous System Architecture" (HSA), mit denen AMD und andere Unternehmen die Effizienz bei der Zusammenarbeit verschiedener Chips eines Systems steigern wollen. Heterogeneous Queuing soll das leisten, indem es Teilaufgaben einer größeren Arbeitsaufgabe mit jeweils dem Chip ausführt, der dazu am besten geeignet ist.
Programme interagieren aber nicht direkt mit dem neuen Treiber, sondern reihen die Arbeitsaufgaben mit einer "HSA Runtime" in Warteschlangen für die einzelnen Chips ein. Diese Aufgaben können sich gegenseitig aufrufen, damit etwa eine Aufgabe in der GPU-Warteschlange einige Daten verarbeitet kann, um dann eine Aufgabe in der CPU-Warteschlange zu starten, die die Daten weiter verarbeitet; das vermeidet Kontextwechsel und steigert so die Effizienz beim Aufteilen von Arbeit zwischen CPU und GPU.
Die HSA Runtime ist eine Userspace-Biliothek, die AMD selbst entwickelt und im November unter einer Open-Source-Lizenz veröffentlicht hat. Die HSA-Runtime interagiert nicht nur mit dem neuen Kernel-Treiber, sondern auch mit dem R600-Backend von LLVM, das auf CPU oder GPU ausgeführten Code erzeugt. Die dafür zuständigen Funktionen haben AMD-Entwickler zu LLVM beigetragen; sie werden Bestandteil der LLVM-Version 3.6, die noch im Frühjahr erscheinen soll. Zu den AMD-Chips, die Heterogeneous Queuing unterstützen, zählen die Prozessoren mit Kaveri-Kern, die AMD seit Anfang 2014 verkauft.
Noch in der Begutachtungsphase stecken Kernel-Änderungen, um die bekannteste HSA-Technik zu nutzen: Die als Heterogeneous Memory Management (HMM) oder Heterogeneous Uniform Memory Access (HUMA) bekannte Funktion, bei der HSA-taugliche Chips einen gemeinsamen virtuellen Adressraum nutzen. Vom Hauptprozessor verarbeitete Daten müssen dadurch nicht erst vom Arbeitsspeicher in den Speicher des Grafikprozessors kopiert werden, bevor dort laufender Code die Daten verarbeiten kann; stattdessen braucht lediglich ein Pointer übergeben werden, der auf Bereich im virtuellen Adressraum zeigt, der die Daten erhält.
Dasselbe funktioniert auch in die umgekehrte Richtung und vereinfacht zusammen mit dem im Kernel 3.19 bereits aufgenommenen amdkfd-Treiber den Einsatz von Grafikprozessoren für allgemeine Rechenaufgaben (GPGPU/General Purpose Computation on Graphics Processing Unit). HSA ist aber auch zum effizienteren Anbinden anderer Chips interessant, etwa für Crypto-Beschleuniger oder Funktionseinheiten von System on Chips (SoCs).
IPC per Kernel
Das bei Android zur Interprozesskommunikation verwendete Binder ist nun ein vollwertiger Bestandteil des Kernels. Der IPC-Dienst steckte bislang im Staging-Zweig für Code mit Qualitätsmängeln.Diese Mängel wurden bislang allerdings nicht beseitigt; es gibt auch keine Pläne, das zu tun.
Staging-Betreuer Greg Kroah-Hartman hat Binder trotzdem in den regulären Kernel-Code übernommen, da man das Binder-API ohnehin unterstützten müsse; in einem Merge-Kommentar hat er den Code jedoch als "grässlich" bezeichnet und erklärt, das API lasse viel zu wünschen übrig. Drei langjährige Kernel-Entwickler haben die Aufwertung in einer Diskussion heftig kritisiert; sie warnten zudem vor dem API und dessen Einsatz in Programmen, konnten die Hochstufung aber nicht verhindern.
Damit hat der Kernel jetzt einen High-Level-IPC-Dienst – wie Kroah-Hartman in dem Merge-Kommentar andeutet, sind aber Arbeiten im Gange, um Binder durch etwas Besseres zu ersetzen. Damit spielt er offenbar auf Kdbus an, den im Systemd-Umfeld entstanden Kernel-IPC-Dienst, der D-Bus beerben will. Kroah-Hartman arbeitet selbst an der Entwicklung von Kdbus mit, dessen Kernel-Teile kürzlich zum dritten Mal zur öffentlichen Begutachtung an die Liste der Kernel-Entwickler gingen. Es ist aber noch nicht abzusehen, wann die Kdbus-Entwickler versuchen, ihren Code in den Linux-Kernel zu integrieren.
64-Bit ARM
Der ARM64-Code von Linux kann nun einige von älteren ARM-Architekturen unterstützte CPU-Instruktionen emulieren, die ARM mit ARMv8 aufgeben hat oder irgendwann aufgeben will (u. a. 1, 2, 3). Anders als in der x86-Welt sind neue ARM-Architekturen nämlich nicht voll abwärtskompatibel, daher lassen sich ohne eine solche Emulation keine Programme ausführen, die für ältere ARM-Architekturen kompiliert wurden und die die aufgegebenen Instruktionen verwenden; Details erläutert ein Artikel bei LWN.net.
Der Linux-Kernel unterstützt nun AMDs SoC Seattle (Opteron A1100), einen für Server gedachten 64-Bit-Baustein mit ARMv8-Architectur, den es bislang nur auf Mainboards gibt, die für Entwickler konzipiert wurden. Ein solches ist auch das von ARM selbst stammende ARMv8-Board Juno, das der Kernel nun ebenfalls unterstützt. Details zu diesen und anderen Änderungen am ARM- und ARM64-Code listet der ARM-Subsystem-Maintainer Arnd Bergmann in einem Blog-Beitrag.
x86
Der Speichermanagement-Code des Kernels unterstützt nun mehr Funktionen der Page Attribute Table (PAT). Dadurch könnten nun beispielsweise Grafiktreiber Write-Through Caching beim Zugriff auf den Video-Speicher nutzen, was die Grafik-Performance steigern kann.
Der Linux-Kernel kennt jetzt die x86-Instruktion MPX (1, 2), einen Hardware-Schutz gegen Buffer-Over- und Underflows, den eine Meldung im heise Newsticker und die Dokumentation zum Kernel-Support näher erläutern. Intels will diese Speicherschutzerweiterung erstmals bei der Prozessorgeneration "Skylake" unterstützen, die laut dem Prozessorgeflüster der c't 4/15 in der zweiten Jahreshälfte erwartet wird.
Verschiedenes
Der Kernel unterstützt nun den "Nios II", eine von Altera geschaffene 32-Bit-Prozessor-Architektur, die das Unternehmen bei einigen FPGAs nutzt (u. a. 1, 2).
Die Kernel-Entwickler haben Unterstützung für Device Tree Overlays aufgenommen. Über sie lässt sich der Kernel einfacher mit Informationen zur Ausstattung und Konfiguration von Hardware-Komponenten versorgen, die bereits im Boot-Prozess verwendet wird. Das ist etwa zum einfacheren Ansprechen der "Shields" genannten Aufsteckplatinen wichtig, mit denen sich manche Boards mit ARM-SoCs erweitern lassen; Details erläutert ein Artikel bei LWN.net.
Einige Änderungen am Speichermanagement können die Skalierung des Kernels verbessern. Ein spezieller Microbenchmark legte durch die Änderung um gut 30 Prozent zu – allerdings in einem Testaufbau, den der Entwickler speziell zum Ausmessen der von ihm vorgenommenen Änderung geschaffen hatte.
Merge Commits
Es gab noch hunderte andere Änderungen am Code der beschriebenen Kernel-Bereiche. Informationen zu diesen finden Sie über die folgenden Links, die auf Git-Merge-Commits verweisen, mit denen die wesentlichsten Neuerungen dieser Bereiche für die nächste Kernel-Version integriert wurden.
Architektur- und Board-Support
- Pull ACCESS_ONCE cleanup preparation from Christian Borntraeger
- Pull Altera Nios II processor support from Ley Foon Tan
- Pull arch/arc updates from Vineet Gupta
- Pull arch/chris updates from Jesper Nilsson
- Pull arch/hexagon updates from Richard Kuo
- Pull arch/tile updates from Chris Metcalf
- Pull arm64 fixes from Will Deacon
- Pull ARM64 SoC changes from Arnd Bergmann
- Pull arm64 updates from Will Deacon
- Pull ARM SoC cleanup on mach-at91 from Arnd Bergmann
- Pull ARM SoC cleanups from Arnd Bergmann
- Pull ARM SoC defconfig changes from Arnd Bergmann
- Pull ARM SoC driver updates from Arnd Bergmann
- Pull ARM SoC DT updates from Arnd Bergmann
- Pull ARM SoC fixes from Arnd Bergmann
- Pull ARM SoC non-critical bug fixes from Arnd Bergmann
- Pull ARM SoC/OMAP GPMC driver cleanup and move from Arnd Bergmann
- Pull ARM SoC platform changes from Arnd Bergmann
- Pull ARM updates from Russell King
- Pull asm-generic asm/io.h rewrite from Arnd Bergmann
- Pull EDAC updates from Borislav Petkov
- Pull EFI updates from Ingo Molnar
- Pull m68k updates from Geert Uytterhoeven.
- Pull MIPS updates from Ralf Baechle
- Pull powerpc updates from Michael Ellerman
- Pull s390 updates from Martin Schwidefsky
- Pull second batch of powerpc updates from Michael Ellerman
- Pull sparc update from David Miller
- Pull x86 apic updates from Thomas Gleixner
- Pull x86 asm updates from Ingo Molnar
- Pull x86 boot and percpu updates from Ingo Molnar
- Pull x86 build, cleanup and defconfig updates from Ingo Molnar
- Pull x86 fixes from Ingo Molnar
- Pull x86 microcode loading updates from Ingo Molnar
- Pull x86 mm tree changes from Ingo Molnar
- Pull x86 platform changes from Ingo Molnar
- Pull x86 RAS update from Ingo Molnar
- Pull x86 vdso updates from Ingo Molnar
- Pull Xtensa fixes from Chris Zankel
Infrastruktur
- Merge first patchbomb from Andrew Morton
- Merge second patchbomb from Andrew Morton
- Pull additional xen update from David Vrabel
- Pull ARM SoC DT updates part 2 from Arnd Bergmann
- Pull audit updates from Paul Moore
- Pull cgroup update from Tejun Heo
- Pull crypto update from Herbert Xu
- Pull documentation update from Jonathan Corbet
- Pull ftrace self-test updates from Steven Rostedt
- Pull irq core updates from Thomas Gleixner
- Pull irq domain updates from Thomas Gleixner
- Pull kbuild updates from Michal Marek
- Pull kselftest update from Shuah Khan
- Pull ktest changes from Steven Rostedt
- Pull KVM update from Paolo Bonzini
- Pull leftover perf fixes from Ingo Molnar
- Pull libata changes from Tejun Heo
- Pull locking tree changes from Ingo Molnar
- Pull misc kbuild changes from Michal Marek
- Pull module updates from Rusty Russell
- Pull more 2038 timer work from Thomas Gleixner
- Pull nmi-safe seq_buf printk update from Steven Rostedt
- Pull percpu updates from Tejun Heo
- Pull perf events update from Ingo Molnar
- Pull perf fixes and cleanups from Ingo Molnar
- Pull pstore fixes from Tony Luck
- Pull pstore update #2 from Tony Luck
- Pull RCU updates from Ingo Molnar
- Pull scheduler updates from Ingo Molnar
- Pull security layer updates from James Morris
- Pull timer core updates from Thomas Gleixner
- Pull tracing updates from Steven Rostedt
- Pull tracing updates from Steven Rostedt
- Pull user namespace related fixes from Eric Biederman
- Pull VFIO updates from Alex Williamson
- Pull virtio fixes from Michael S Tsirkin
- Pull virtio updates from Michael Tsirkin
- Pull virtio updates from Rusty Russell
- Pull workqueue update from Tejun Heo
- Pull xen features and fixes from David Vrabel
Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden über das Twitter-Konto "@kernellog" annonciert. (thl) (thl)