Mesa 19.1 freigegeben: Neue 3D-Linux-Grafiktreiber für ARM und Intel

Mesa 19.1

Trends & News | News

Linux-Distributionen werden mittelfristig einen anderen 3D-Treiber für Intel-Chips nutzen. Den führt Mesa nun ein und bringt auch Treiber für verbreitete ARM-Mali-GPUs mit. Der Vulkan-Treiber für AMDs Radeon beherrscht jetzt Freesync.

Das Mesa-Projekt hat die Version 19.1 seiner Grafikbibliothek veröffentlicht. Deren 3D-Treiber kommen bei allen für PCs gängigen Linux-Distributionen standardmäßig zum Einsatz. Neue Mesa-Version haben daher größere Auswirkungen auf die Hardware-Unterstützung und die Spieltauglichkeit von Debian, Fedora, Ubuntu und so weiter. Bei der jetzt erhältlichen Version 19.1 kommt Intels neuer OpenGL-Treiber Iris hinzu; er gilt vorerst als experimentell, soll langfristig aber zum Standardtreiber für moderner Intel-GPus werden.

Von großer Bedeutung sind auch die beiden neuen Treiber für Mali-GPUs von ARM, denn durch sie werden Linux-Distributionen mittelfristig viele Einplatinencomputer und Chromebook besser unterstützen. Der Radeon-Treiber Radv kann per Variable Refresh Rate (VRR) jetzt die Bildwiederholrate des Bildschirms dynamisch anpassen, was zu einer flüssigen 3D-Darstellung beiträgt. Außerdem gab es allerlei Feintuning, um die 3D-Performance zu verbessern.

Der neue OpenGL-Treiber Iris soll mittelfristig den Treiber i965 beerben, der nahezu alle Grafikkerne unterstützt, die Intel in den letzten zehn Jahren in Mainboard-Chipsätzen oder Prozessoren integriert hat. Iris spricht allerdings nur GPUs in Prozessoren seit der 2015 breit eingeführten Broadwell-Generation an und unterstützt daher alle Core-i-Prozessoren der Core-i-5000er-Serie und neuer. Außerdem erfordert er mindestens den Linux-Kernel 4.16.

Der neu entwickelte Iris vermeidet so Ballast, der sich beim i965-Treiber angesammelt hat. Er ist aber auch schlanker, weil er im Unterschied zu i965 auf Gallium3D aufbaut: Einem in Mesa enthaltene Framework zur Programmierung von Grafiktreibern, das von i965 abgesehen alle aktuell relevanten OpenGL-Treiber von Mesa nutzen; darunter etwa jener für die VC4-Grafik des Raspberry Pi oder die Treiber für moderne Radeon- und GeForce-GPUs von AMD und Nvidia.

Iris soll vor allem die Performance verbessern und zugleich die Belastung des Hauptprozessors reduzieren. Laut Messungen des zuständigen Intel-Entwicklers Kenneth Graunke schneidet der Treiber in einzelnen Benchmarks bereits besser ab und belastet die CPU teilweise deutlich weniger. Alle wesentlichen Funktionen soll Iris bereits beherrschen, noch gilt er aber als experimentell. Bevor er zum Standardtreiber werden kann, stehen noch Praxistests, Fehlerkorrekturen und Feintuning an. Diese Arbeiten werden jetzt leichter, denn man muss Iris nicht mehr per Patch nachrüsten, sondern nur noch beim Übersetzen von Mesa explizit aktivieren. Um ihn zu verwenden, muss man dann noch eine Umgebungsvariable setzen – etwa indem man sie beim Aufruf eines Programms vorgibt oder in der jeweiligen Shell exportiert und dann Programme dort startet.

MESA_LOADER_DRIVER_OVERRIDE=iris glxgears
export MESA_LOADER_DRIVER_OVERRIDE=iris
glxgears

Weitere Details zu Motivation, Eigenschaften und Entwicklungsstand von Iris erläutert eine Merge Request, in der Graunke um Aufnahme von Iris gebeten hat. Wann Distributionen den OpenGL-Treiber mitliefern werden, bleibt abzuwarten. Selbiges gilt für die Frage, wann sich die Entwickler entscheiden, Iris zum Standard-OpenGL-Treiber für moderne Intel-GPUs zu befördern.

Mesa bringt jetzt die OpenGL-Treiber Lima und Panfrost mit. Über sie lässt sich die 3D-Beschleunigung der meisten von ARM entwickelten Mali-GPUs nutzen, die diverse Hersteller in SoCs (System-on-a-Chip) einsetzen, die in Android-Geräten, Chromebooks, Embedded Systems oder Einplatinensystemen (Single Board Computer/SBCs) stecken. Die beiden Treiber erfordert dazu allerdings jeweils gleichnamige Treiber im Direct Rendering Manager (DRM) des Kernels, die das Mitte Juli erwartete Linux 5.2 mitbringen wird.

Das Duo aus Lima-Kernel-Treiber und Lima-OpenGL-Treiber unterstützt dabei "Utgard"-GPUs der Mail-400er-Serie. Das Panfrost-Duo hingegen ist für die neueren Mali-Generationen "Midgard" und "Bifrost" ausgelegt, die unter den Mali-Modelbezeichnungen T6xx, T7xx, T8xx respektive G3x, G5x, G7x segeln – die neueste, kürzlich mit dem ARM Cortex-A77 und Mali-G77 eingeführte Mali-Generation "Valhall" unterstützt Panfrost derzeit nicht.

Zig Treiber für einen Chip

Die Kernel-Treiber Lima und Panfrost sind nur für 3D-Beschleunigung zuständig, die die gleichnamigen Mesa-Treiber über DRM Render Nodes nutzen. Mit der Monitoransteuerung haben die Treiber nichts zu tun, denn Display Engine, 3D-Einheiten und Video-Beschleuniger sind bei SoCs nicht Teil eines mächtigen Grafikchipdesigns, wie es bei PCs üblich ist; um diese drei Funktionen kümmern sich vielmehr separate Komponenten, die SoC-Hersteller als IP-Cores von einem oder unterschiedlichen Unternehmen zukaufen und kombinieren.

Neben Lima oder Panfrost ist daher ein weiterer Kernel-Treiber für die Display Engine nötig, die den Bildschirm ansteuert und sich oft abermals aus verschiedenen IP-Cores zusammensetzt. Solche zumeist Kernel-based Mode-setting (KMS) bietenden Treiber gibt es aber für die meisten SoCs mit Mali-GPUs und sie sind typischerweise auch Open Source Software. Für Video-Beschleuniger bedarf es ähnlich wie bei 3D eigener Treiber sowohl im Kernel als auch im Userspace.

ARM hat sich an der Entwicklung der neuen Treiber nicht beteiligt, obwohl die Firma in anderen Bereichen selbst für ordentliche Linux-Unterstützung ihrer Hardware-Designs sorgt. Die zwei neuen Treiber entstanden daher weitgehend mithilfe von Reverse Engineering, indem die Entwickler das Verhalten von Hardware und anderen, teilweise proprietären Treiber analysiert haben. Die beiden Treiber beherrschen daher nur einen Teil der Funktionen, die die Hardware bietet. Außerdem unterstützten die Treiber längst nicht alle Grafikkerne der erwähnten Serien; Panfrost etwa wurde nur auf den Midgard-GPUs T760 und T860 getestet. Vermutlich stehen deshalb noch etliche Probleme und Stolpersteine mit den OpenGL-Treibern an. Die Aufnahme der Treiber in Linux-Kernel und Mesa hat erfahrungsgemäß aber Signalwirkungen, durch die sich mehr Tester und Entwickler auf die Treiber stürzen – das kann der Treiberqualität und dem Umfang der Hardware-Unterstützung einen ordentlichen Schub gehen.

ARM beobachtet die Entwicklung bereits genau und erwägt offenbar, sich zumindest bei den Kernel-Treibern einzubringen. Offenbar gibt es zudem ARM-Entwickler, die das Unternehmen intern drängen, sich stärker zu engagieren; das zeigt sich etwa im Zeitabschnitt 23:23 bis 28:44 eines Videos von einer jüngst abgehaltenen Linaro-Konferenz, wo der angesehene Linux-Entwickler und ARM-Mitarbeiter Grant Likely einige Andeutungen macht.

Der für modernen AMD-GPUs zuständige OpenGL-Treiber Radeonsi beherrscht seit Mesa 19.0 die als Freesync oder Variable Refresh Rate (VRR) genannten Technik, die die Bildwiederholrate eines Monitors dynamisch an die Grafikkartenausgabe anpasst; das trägt zu flüssiger 3D-Darstellung bei und hilft, Ruckler und Verzögerungen zu vermeiden. Mit Version 19.1 beherrscht nun auch der für AMDs-GPUs zuständige Treiber Radv diese Technik. Beide Treiber setzen dazu Linux 5.0 oder neuer voraus, denn seit dieser Kernel-Version kann der DRM-Treiber Amdgpu auf den Radeonsi und Radv zurückgreifen.

Die AMD-Entwickler haben ferner einige Performance-Optimiungen vorgenommen und Unterstützung für Delta Color Compression (DCC) bei Raven-GPUs nachgerüstet. Bei einzelnen Anwendungen wie Civilization 6 nutzt Radeonsi beim Kompilieren von Shadern jetzt die modernere und NIR abgekürzte "New IR (internal representation)". Sie bringt einige Vorteile für moderne Einsatzzwecke, daher verwenden der Treiber i965 und einige andere die NIR schon standardmäßig. Bislang musste man den Einsatz von NIR beim Radeonsi über eine Umgebungsvariable explizit anfordern, weil vor einer vollständigen Umstellung auf NIR noch Finetuning und Feldtests nötig sind. Letztere werden durch die vorgenommenen Änderungen jetzt leichter, denn durch sie lässt sich über die Konfigurationsdatei driconfig jetzt global und statisch festlegen, welche Internal Representation (IR) der Shader-Compiler nutzt.

Beim OpenGL-Treiber i965 gab es allerlei Feintuning, um die Unterstützung für Intels GPUs der elften Generation (Gen11) zu verbessern, die kürzlich mit den ersten Ice-Lake-Prozessoren debütierte. Außerdem unterstützt der i965-Treiber jetzt die GPUs der Prozessor-Generationen Comet Lake (Gen9) und Elkhart Lake (Gen11), an denen Intel arbeitet. Kernel-seitige Unterstützung für all diese GPUs wird Linux 5.2 mitbringen.

Intels Vulkan-Treiber Anvil kann jetzt die aktuelle Bildrate und einige andere Informationen in einem kleinen halbtransparenten Bereich zeigen, der in einer Bildschirmecke eingeblendet wird. Andere Vulkan-Treiber dürften diese Funktion aufgreifen. Viele auf Gallium 3D aufbauende OpenGL-Treiber von Mesa unterstützten so ein HUD (Heads-up Display) schon länger.

Bei Treibern, die auf Gallium aufbauen, vergehen zwischen Eingang der Zeichenanforderung beim Treiber ("Draw") und Ausgabe des Bildes ("Present") jetzt nicht mehr zwei Frames, sondern nur noch einer – bei der Bildberechnung mit 60 Frames per Second (FPS) sieht der Anwender so das Bild 16,6 Millisekunden früher. Das ist einem AMD-Mitarbeiten zu verdanken, der den Render-Pfad im Gallium-Code optimiert hat.

Ferner gab es allerlei Performance-Optimierungen beim Treiber Virgl, über ihn kann ein Linux in einer virtuellen Maschine die 3D-Beschleunigung des Linux Hosts nutzen; die Technik wird unter anderem von Gnome Boxes und dem Linux-Support in ChomeOS genutzt.

Neu dabei ist der Vulkan-Treiber Turnip, der moderne Qualcomm-Grafikkerne der Adreno-Serie unterstützt; einen OpenGL-Treiber für dieser Grafikkerne bringt Mesa schon länger mit.

Ein Broadcom-Entwickler hat dem Treiber V3D allerlei Feintuning zukommen lassen; er ist für die VC5 und VC6 genannten Grafikkerne zuständig, die den beim Raspberry Pi eingesetzten VC4 beerben.

Die Ankündigungsmail und die Freigabehinweise nennen zahlreiche weitere Neuerungen von Mesa 19.1. Dort werden unter anderem einige OpenGL- oder Vulkan-Extensions genannt, die jetzt unterstützt werden; insbesondere die Treiber von AMD und Intel haben weitere gelernt. OpenGL 4.6 implementiert aber nach wie vor keiner der beiden; einige Patch-Serien auf den Mailinglisten lassen aber durchscheinen, dass Support für den neuesten OpenGL-Level langsam in greifbare Nähe rückt. Wie immer haben viele Entwickler eine Reihe von Detailverbesserungen vorgenommen, um Fehldarstellungen in Spielen zu beseitigen und die 3D-Performance zu steigern.

Als neue Major Release gilt das neue Mesa wie üblich als "Development Release". Auf Stabilität bedachte Anwender sollen laut den Entwicklern vorerst bei der Versionsreihe 19.0 bleiben und auf 19.1.1 warten, das in wenigen Wochen erscheinen soll; erfahrungsgemäß integrieren einzelne Distributionen das neue Mesa bereits vorher. Die Entwickler haben derweil schon mit der Arbeit an Mesa 19.2 begonnen, das in zwei bis drei Monaten erscheinen soll. (thl)

Welche Distribution das neue Mesa nachreichen

Rolling-Release-Distributionen wie Arch Linux oder openSUSE Tumbleweed dürften das neue Mesa mitsamt seiner verbesserten OpenGL-, Vulkan- und Video-Treiber in den nächsten Tagen und Wochen über die reguläre Systemaktualisierung erhalten. Fedora und ein paar andere Distributionen bekommen es meist etwas später als Update, kurz bevor der Support der vorherigen Mesa-Versionsreihe ausläuft.

Letztlich wird das frischere Mesa bei diesen Distributionen somit die 3D-Performance, die Spiele-Kompatibilität, die Video-Beschleunigung und den Umfang der Hardware-Unterstützung spürbar verbessern.

Debian GNU/Linux, Linux Mint, OpenSuse Leap, Ubuntu und viele anderen konservativ gewartete Distributionen erhalten neue Mesa-Versionen meist nicht über Updates. Daher dürfte es bis zum im Herbst erwarteten Ubuntu 19.10 dauern, bis beispielsweise Nutzer von Canonicals Distribution von den Verbesserungen des neuen Mesa profitieren. Das dort beliegende Mesa (vermutlich die ab jetzt vorbereitete Version 19.2) geht zusammen mit neuen Versionen von Linux, Libdrm, Wayland-Biliotheken und X-Server dann einige Monate später als Hardware Enablement Stack (HWE) auch an Nutzer von Ubuntu 18.04 und wird im Februar 2020 dann Standard mit Ubuntu 18.04.4. Da die Linux-Mint-Entwickler kein Release planen, das auf diesem Minor Release von Ubuntu aufbaut, dürften Linux-Mint-Nutzer die Verbesserungen des neuen Mesa erst im Sommer 2020 mit Linux Mint 20 bekommen.

Bei manchen Distributionen wird man das neue Mesa über Backports-Repositories nachrüsten können, die aber standardmäßig inaktiv sind, weil für sie andere Pflegerichtlinien gelten; Sicherheitskorrekturen beispielsweise werden dort vielfach nicht garantiert, auch wenn es sie meist zeitnah gibt.

Oftmals kann man neue Mesa-Versionen aber über Fans oder Entwickler erhalten, die öffentlich Repositories mit Paketen zum einfachen Nachrüsten neuerer Mesa-Versionen pflegen. Anwender sollten sich dabei bewusst sein, dass sie mit solchen Repositories einen oder mehrere zentrale Bausteine im Fundament ihrer Distribution austauschen. Wer solche Angebote wahrnimmt, sollte den Anbietern des Repositories daher ähnlich trauen wie seinem Distributor, denn über solche Paket-Depos lassen sich kinderleicht Hintertüren einschleusen. Nach dem Einbinden solcher Repositories obliegt es zudem den Machern dieser Depots, die ausgetauschten Pakete fortan mit Sicherheitskorrekturen zu versorgen. Das Aktivieren solcher Repositories kann zudem zu Abhängigkeitsproblemen bei späteren Updates der Distribution führen. Da zentrale Software ausgetauscht wird, können solche Pakete leicht zu Instabilitäten oder einem womöglich nicht mehr recht startenden System führen.

Bedeutung der Mesa-Treiber für Grafikprozessoren von PCs

Die in Mesa enthaltenen OpenGL- und Vulkan-Treiber sind die besten und einzig relevanten Linux-3D-Treiber für die Grafikkerne aktueller Intel-Prozessoren. Die 3D- und Video-Treiber von Mesa sind in nahezu allen Fällen auch die besten und schnellsten für Radeon-GPUs von AMD. Deshalb nutzt das Unternehmen davon abgeleitete Treiber sogar in seinem eigenen Linux-Treiber-Paket. Das ist allerdings vor allem auf Firmenkunden abgestimmt, die auf Zertifizierungen aus sind; daher funktioniert die Treibersammlung auch längst nicht auf allen Distributionen, sondern nur auf einer Handvoll, die Unternehmenskunden ansprechen.

Die AMD- und Intel-Treiber in Mesa treiben vornehmlich Entwickler der jeweiligen Unternehmen voran, wenn man vom Radeon-Vulkan-Treiber Radv absieht. Nvidia hingegen bringt sich so gut wie gar nicht in die Entwicklung des Mesa-Treibers für Nvidia-GPUs ein. Das ist ein Grund, warum Mesa die GeForce-GPUs nur dürftig unterstützt und nur einen Bruchteil des Leistungspotenzials liefert, das die proprietären Linux-Treiber von Nvidia locker machen.

Weitere Hintergründe zu diesen groben Einordnungen beschreibt der kostenlos abrufbare c't-Artikel "Grafik-Hardware für Linux-Anwender"; ein gleichnamiger Folgeartikel in c't 23/2018, S. 124 beleuchtet einige neuere Aspekte.

Die Mesa-Treiber entscheiden übrigens keineswegs allein über 3D-Performance und Umfang des Hardware-Support, schließlich sind sie nur Teil einer eng zusammenarbeitenden Familie von Treibern. Andere Mitglieder bestimmen über 3D-Leistung und Hardware-Support mit – allen voran die verwendeten Grafiktreiber im Linux-Kernel, denn über ihn kommunizieren alle anderen Treiber einer Treiberfamilie mit der Grafik-Hardware – also jene, die für Techniken wie OpenGL, Vulkan, Video-Decoding, Video-Encoding oder OpenCL zuständig sind. Details zum Zusammenwirken dieser verschiedenen Treiber liefert der im Herbst 2014 erschienene und kostenfrei abrufbare c't-Artikel "Die Grafiktreiber-Architektur von Linux".

Hauptschuld an der dürftigen 3D-Performance des Mesa-OpenGL-Treibers Nouveau ist daher auch nicht der Treiber selbst, sondern der zugrunde liegende und ebenfalls Nouveau genannte Treiber im Linux-Kernel. Die Defizite dieses Treibers entstehen vor allem durch eine restriktive Informationspolitik seitens Nvidia sowie die unzulängliche Firmware, die das Unternehmen der Open-Source-Welt zur Verfügung stellt.

Kommentare

Anzeige