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.

In Pocket speichern vorlesen Druckansicht 8 Kommentare lesen
Lesezeit: 11 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

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).

Was Linux 3.19 bringt

Linux 3.19 erscheint vermutlich zu Beginn der zweiten Februar-Woche, wie Linus Torvalds bei der Freigabe der siebten Vorabversion andeutete. Größere Umbauarbeiten sind keine mehr zu erwarten, denn alle wesentlichen Neuerungen haben die Kernel-Hacker bereits im Dezember integriert. Das Kernel-Log konnte daher bereits vor der Fertigstellung einen Überblick über die wichtigsten Änderungen dieser Version liefern. Das erfolgt mit der vierteiligen Artikelserie "Was 3.19 bringt", die sich nach und nach den verschiedenen Bereichen des Kernels gewidmet hat:

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.

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.

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.

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.

Eine Änderung beschleunigte einen Microbenchmark um rund 30 Prozent.

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.

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

Infrastruktur

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)