Linux 5.3 freigegeben: Prioritäten deckeln und Trouble für Nvidia

Seite 5: Treiber für AMDs neue Grafikchip-Generation

Inhaltsverzeichnis

Im Oktober erwartete Linux-Distributionen wie Ubuntu 19.10 und Fedora 31 werden wahrscheinlich automatisch ordentliche Treiber für die am 7. Juli vorgestellten AMD-Grafikkarten der neuen Radeon-RX-5700-Serie konfigurieren. Das ist vor allem einer in Linux 5.3 eingeflossenen Erweiterung am Treiber Amdgpu zu verdanken, die Support für die Navi10-GPUs nachrüsten, die auf den neuen Grafikkarten sitzen; es sind die ersten Grafikchips, die zu AMDs neuer Architektur "Radeon DNA" (RDNA) gehören, die "GCN" (Graphics Core Next) beerbt.

Linux 5.3 wird AMDs Radeon RX 5700 XT unterstützen.

(Bild: Carsten Spille/c't)

Die Erweiterung zur Navi10-Unterstützung besteht aus über 450 Patches, durch die der Kernel-Quellcode von zirka 26,6 auf satte 27 Millionen Zeilen wuchs. Von den rund 400.000 neuen Codezeilen stecken allerdings ungefähr 348.000 in weitgehend computergenerierten Header-Dateien, die die Hardware-Beschreibung enthalten und somit Register, Standardwerte und Zugriffsmakros definieren (u. a. 1, 2, 3, 4, 5, 6, 7, 8). Solch umfangreiche Header-Dateien waren auch früher schon zum Support neuer AMD-GPUs in den Kernel eingeflossen.

Durch die Erweiterung des Amdgpu-Treibers ermöglicht der Linux-Kernel jetzt die Nutzung aller wesentlichen Funktionen von Navi10-Grafikchips – also die Bildschirmansteuerung über die Display-Engine, die Stromsparfunktionen, die De- und Encoder zur Video-Beschleunigung sowie die Einheiten, die sich um generische Berechnungen (Compute) und 3D-Beschleunigung kümmern. Das Wort "ermöglicht" deutet es schon an: Die kernelseitige Unterstützung ist nur ein Baustein für alle diese Aufgaben, denn allein ist sie zu nicht viel mehr als der Monitorkonfiguration und der Bildausgabe nütze. Um die anderen erwähnten Funktionen in Linux-Programmen verwenden zu können, sind noch eine Handvoll weiterer Userland-Treiber nötig. Die sprechen allerdings nie direkt mit der Hardware, sondern immer über den Kernel-Treiber Amdgpu.

Die 3D-Beschleunigung der Radeon-RX-5700-Karten wird sich beispielsweise mit dem OpenGL-Treiber Radeonsi und dem Vulkan-Treiber Radv nutzen lassen, die das im September erwartete Mesa 19.2 mitbringen wird.

Die entsprechenden Erweiterungen für Radeonsi stammen von AMD-Entwicklern. Die Navi-Unterstützung für den Radeon-Vulkan-Treiber Radv haben hingegen Programmierer von Valve und Google eingebracht, die den Treiber zusammen mit Red-Hat-Leuten und anderen Entwicklern gestartet haben und nach wie vor vorantreiben.

Die OpenGL- und Vulkan-Treiber Radeonsi und Radv brauchen aber nicht nur die Hilfe des Kernel-Treibers Amdgpu, sondern auch die der Compiler-Infrastruktur LLVM. Auch die muss daher Navi-Unterstützung bieten. Die haben AMD-Mitarbeiter jüngst in den Entwicklerzweig von LLVM eingebracht, daher findet sich Navi-Support im dieser Tage erwarteten LLVM 9.0.

Damit nicht genug: Userland-Treiber wie die von Mesa sprechen nicht direkt mit dem Kernel-Treiber Amdgpu, sondern interagieren mit ihm über die Libdrm. Auch die muss daher Navi-Support bieten, was seit Libdrm 2.4.99 bereits der Fall ist.

AMDs Grafiktreiber für den X-Server von X.org, Xf86-Video-Amdgpu, unterstützt die neuen Grafikkarten bereits, denn er braucht für neue GPUs gar nicht angepasst zu werden. Kein Wunder, denn Bildausgabe und Monitorkonfiguration obliegen ohnehin dem Kernel-Treiber – heuer delegieren X-Server-Treiber daher viele Aufgaben dorthin, um die sie sich früher selbst kümmern mussten. Das ist auch der Grund, warum Wayland-Compositoren (etwa Gnome-Shell und KDE Plasma im Wayland-Modus) keinen derartigen Treiber brauchen und schon mit dem auskommen, was Kernel- und Mesa-OpenGL-Treiber bieten.

Der von AMD selbst vorangetriebene und daher mit Radv konkurrierende Vulkan-Treiber AMDVLK (AMD Open Source Driver for Vulkan) unterstützt Navi10-GPUs seit Version 2019.Q3.2, die AMD neun Tage nach Einführung der RX 5700 freigegeben hat. Radv wusste Navi zu dem Zeitpunkt bereits einige Tage anzusprechen.

Letztlich braucht man daher Linux 5.3, Libdrm 2.4.99, LLVM 9.0 und Mesa 19.2, um die 3D-Beschleunigung von RX-5700-Grafikkarten verwenden zu können. Alle diese Versionen erscheinen in den nächsten Wochen und dürften dadurch in viele Linux-Distributionen einfließen, die im Herbst erscheinen.

Mehr Infos

Die Grafiktreiber-Architektur von Linux

Bei Linux ist es ganz normal, dass man einen Schwung von Treibern braucht, um die vielen Funktionen moderner PC-Grafikchips zu nutzen. Der Grafikstack zum Support von Intel-GPUs ähnelt daher jenem für Grafikchips von AMD. Von der Komplexität bekommen die meisten Anwender aber nichts mit, weil sich alle Treiber automatisch konfigurieren. Hintergründe dazu erläutert der kostenlos abrufbare Artikel Die Grafiktreiber-Architektur von Linux aus c't 23/2014.

Wie uns ein Entwickler mitteilte, sollten die in Mesa enthaltenen Treiber auch schon in der Lage sein, Videos mit der Video-Engine von Navi-GPUs zu de- oder encodieren. Das gelingt bei modernen Radeon-Chips über Treiber für die Programmierschnittstellen OpenMAX (OMX), VA-API (Video Acceleration API) und VDPAU (Video Decode and Presentation API for Unix), die aktuellen Mesa-Versionen beiliegen. Durch die Kürze der Zeit konnten wir zur Publikation des Textes nicht klären, wie es um Userspace-Treiber zum Compute-Support steht; also Treiber zur Verwendung von Grafikchips für allgemeine Berechnungen (GPGPU/General Purpose Computation on Graphics Processing Units). Alles, was Kernel-seitig dazu nötig ist, bringt 5.3 indes mit.

Userspace-Treiber wie die von Mesa eignen sich für verschiedene Chips der Navi-Reihe. Der Linux-Kernel hat bislang nur Unterstützung für den Navi10 der RX-5700-Modelle gelernt. Änderungen zum Support der GPUs Navi12 und Navi14 haben den Einzug in Linux 5.3 knapp verpasst, daher sollen sie erst in Linux 5.4 einfließen.

AMD bietet für die Radeon RX-5700-Serie auch Linux-Treiberpakete auf seiner Homepage an, die aber nur für eine handvoll im Unternehmensumfeld gängige Distributionen ausgelegt sind. Mitte Juli bei entstehen dieser Zeilen behauptete die zugehörige Dokument zudem, dass im Archiv zwei Treiberstacks stecken: "AMDGPU All-Open", der nur quelloffene Treiber nutzt, und "AMDGPU-Pro Driver", der auch proprietäre Treiber enthält. Das Installationsskript richtete aber nur den quelloffenen Stack ein; dieses installiert unter anderem einen per DKMS (Dynamic Kernel Module Support) gebauten Amdgpu-Kernel-Treiber und Navi-taugliche Ausführungen von Libdrm, dem Mesa-OpenGL-Treiber Radeonsi, einem X.org-X-Server-Grafiktreiber Amdgpu und Mesa-Treiber zur Video-Beschleunigung über die Programmierschnittstelle OpenMAX, VA-API und VDPAU. Diese Treiber sind sehr eng mit jenen verwandt, mit denen Kernel, Mesa & Co. moderne Radeon-Chips unterstützen.