Inhaltsverzeichnis
Wayland, Nvidia und »explicit sync«
2024 ist das Jahr von Wayland. Die Linux-Gemeinde freut sich darüber, dass nach über 15 Jahren Entwicklung die Ablösung von X11 endlich Fahrt aufnimmt. Wenn da nicht das Lager der Nvidia-User wäre. Vor allem ältere Nvidia-Karten können, je nachdem in welcher Umgebung sie laufen, immer noch Probleme im Zusammenspiel mit Wayland machen. Das äußert sich in Display-Flackern, fallen gelassenen Frames oder Artefakten bis hin zu Freezes und Abstürzen in Games.
Wayland und Nvidia
Das soll nun bald ein Ende haben und eine Technik namens »explicit sync« soll dafür sorgen. Der nötige Code wurde kürzlich in das Wayland-Protokoll integriert und soll am 15. Mai auch in der Beta-Version von Nvidias proprietärem Treiber in Version 555 zu finden sein. Commits für die Integration in Compositoren wie Mutter und KWin sowie in die Kompatibilitätsschicht Xwayland sind in vollem Gange. Mit KDE Plasma 6.1 im Juni 2024 sollte Wayland dann auch mit Nvidias proprietären Treibern problemlos funktionieren.
Um zu verstehen, was hier passiert, muss man verstehen, dass die noch vorhandenen Probleme durch die verwendete Art der Synchronisation beim Rendern von grafischen Elementen im Zusammenspiel von CPU, GPU und der anfordernden Applikation entstehen. KDE-Entwickler Xaver Hugl erklärt die Hintergründe in einem aktuellen Blogpost.
Synchronisation
Vereinfacht ausgedrückt, heißt das: Wenn eine Anwendung das Rendern eines grafischen Inhalts anfordert, schickt die CPU diesen Auftrag an die GPU. Diese rendert aber nicht jeden Auftrag separat, sondern sammelt diese und führt sie zu einem ihr genehmen Zeitpunkt aus. Würde jede Rendering-Anforderung sofort ausgeführt, würden CPU und GPU die meiste Zeit aufeinander warten und somit Zeit verschwenden. Da Rendering-Aufträge aber nicht für sich alleine stehen, sondern beispielsweise mit Befehlen zur Umwandlung in ein anderes Format oder der Rückgabe an die CPU zum Speichern auf die Festplatte verknüpft sind, funktioniert dieser Ablauf nicht ohne Synchronisation.
Imlizit und Explizit
Das bisherige Modell nutzte dazu imlicit sync, was im Gegensatz zu explicit sync ohne Beteiligung der anfordernden Anwendung funktioniert. Das kann unter Wayland zu Problemen führen, da die Anwendung nicht weiß, mit welchen Aufgaben sie synchronisiert, und es kann passieren, dass sie versehentlich und unwissentlich mit GPU-Befehlen synchronisiert, die für Ihre Aufgabe gar nicht relevant sind. Das führt dann wiederum zu den bekannten Problem wie Flackern und Stottern. Beim explicit sync ist die Anwendung beteiligt und weiß, wann das Rendering abgeschlossen ist und welche Aufgaben überhaupt synchronisiert werden sollen.
Komplexes Problem
Es dauerte insgesamt rund vier Jahre und viele Diskussionen, bis der ursprüngliche Merge-Request für Wayland angenommen wurde. Die Komplexität erwuchs aus dem nötigen Zusammenspiel von CPU und GPU, der verwendeten Treiberversion, dem Kernel und dem Compositor. Mit der Implementierung in Xwayland, Mutter, KWin und Mesa sollten die Probleme mit Wayland und Nvidia aber hoffentlich bald der Vergangenheit angehören. Damit wird auch die Akzeptanz von Wayland generell ansteigen.