Das X-Windows Universum auf Linux

Wenn alle Tage neue Features eingeführt werden, Buzzwords inflationär auftauchen, alte Gewohnheiten nicht mehr gelten  und dadurch Probleme bei der täglichen Arbeit entstehen wird es mal wieder Zeit sich einen Überblick über den Stand der Technik zu verschaffen.

Wie jeder weiss ist Linux nur der Betriebssystemkern. Alle graphischen Anwendungen, sei es das komplette Desktopsytem wie KDE oder Gnome, als auch einzelne Anwendungen, wie Grafikprogramme oder Spiele benötigen ein X-Window System.

X.Org ist unter Linux die Referenzimplementierung dieses Systems und liegt derzeit in der Version 7.4 vor. Die X.Org Foundation sah sich ursprünglich nur für X-Standards verantwortlich, während XFree86 das Projekt war, dass die eigentliche Implementierung mit dem xserver als Kernbestandteil, zur Verfügung stellte.
Die Entwicklung im XFree86 Projekt war allerdings recht träge und führte dazu, dass der Innovationsabstand zwischen X-Windows auf UNIX Systemen gegenüber MS Windows und Mac OS X immer grösser wurde. Als im Jahr 2003 dann Streitigkeiten über eine neue Lizenz aufkeimten, zogen viele Entwickler die Notbremse und gründeten die neue X.Org-Stiftung die nun ebenfalls eine X-Window Implementation herausbrachte.
Innerhalb kürzester Zeit erschien X.Org 6.8 auf Basis von XFree86 4.4, welches dann nacheinander von allen Distributionen als Standard X-Windows System installiert wurde.

Erstes Ziel war die Modularisierung um die Grafiktreiberprogrammierung zu erleichtern und eine ausbaufähige Grundlage für zukünftige Modernisierungen zu schaffen. Dieses Ziel wurde mit X.Org 7.0 erreicht.

Mit dem Aufkommen der Composite Window Manager einerseits und dem Eintreten von Intel als GPU Hersteller andererseits kam eine für dieses Projekt ungekannte Dynamik ins Spiel. Dafür sind jetzt eine Reihe von Begriffsklärungen notwendig:

xserver

Während X.Org die Agglomeration aller am X-Windows System beteiligten Komponenten ist, also inkludierte Grafiktreiber, Keyboard Treiber, X-Video Erweiterung, stellt der xserver die zentrale Komponente des Systems dar.
Mit erscheinen von X.Org 7.4 wurde xserver in Version 1.5.2 mitgeliefert. Im Februar 2009 erschien dann aber xserver 1.6.0 ohne ein gleichzeitiges Minor Update von X.Org. Der neue xserver integriert sich stattdessen in X.Org 7.4 und stellt neue Features, allen voran DRI2 bereit.

Direct Rendering Interface (DRI)

Komponenten, die es Applikationen erlauben, innerhalb des X-Window Systems, die Video Hardware direkt, unter Umgehung des xservers, anzusprechen.

Die Beteiligten Komponenten sind:
Kerneltreiber (Direct Rendering Manager, DRM) der eine Schnittstelle zur Grafikkarte bereitstellt
Userland Treiber innerhalb des MESA Projektes.

Seit 2000 (XFree86 4.0) war DRI1 die Major Revision, welches OpenGL Applikationen veranlasst direkt auf den Framebuffer zu zeichnen. Mit Erscheinen des xservers 1.6 wurde DRI2 released. Dies erlaubt jetzt die Umleitung auf ein Offscreen Memory, so dass der Compositing Manager verschiedene Ströme zusammen verarbeiten kann. DRI2 erfordert aber ein neues Grafik-Speichermanagement, names GEM.

Derzeit unterstützen alle Open-Source Treiber sowie der proprietäre AMD/ATI Grafiktreiber DRI1. Intel unterstützt seit der Intel Grafiktreiberversion 2.6 auch DRI2, benötigt aber damit GEM und implizit damit mindestens Kernel 2.6.28.

Der proprietäre nVIDIA Grafiktreiber hat ein völlig eigenständiges Direct Rendering Konzept welches im Kerneltreibermodule realisiert wird.

MESA

Mesa ist eine Open Source 3D Grafikbibliothek welche eine generische OpenGL Implementation zur Verfügung stellt.

Eine OpenGL Anwendung linkt dabei gegen /usr/lib/libGL.so.X

Mesa sorgt dafür, dass diese Datei ein softlink zur MESA (OpenGL) Bibliothek darstellt. Weiterhin stützt sich diese Bibliothek entweder auf eine passende DRI Bibliothek der Grafikkarte – und damit direktes (hardwareunterstütztes) Rendering oder er fällt auf indirektes (softwaregestütztes) Rendering zurück.

Da der proprietäre nVIDIA Treiber die DRI Architektur nicht unterstützt, muss allein schon deshalb der softlink von /usr/lib/libGL.so.X auf die eigene OpenGL Biblitohek zeigen, welche die OpenGL Kommandos dann in Hardwarebefehle umsetzen kann.

Memory Management / GEM

Bis xserver 1.6 haben ausnahmslos alle Grafiktreiber die Verwaltung des Grafikspeichers selbst implementiert.
Mit DRI2 wird jetzt erstmals – mit dem Graphics Execution Manager (GEM) – ein generischer Memory Manager für GPU’s vom Kernel (ab 2.6.28) bereitgestellt. Er kontrolliert den Ausführungskontext und managt NUMA auf modernen Grafikkarten. Verschiedene Applikationen können nun GPU Ressourcen teilen ohne GPU state changes selber verwalten zu müssen.
GEM wird derzeit nur vom Intel Treiber 2.6.0 verwendet.

X Rendering Extension (XRender)

Stellt eine Komponente für Porter-Duff Image Compositing und Alpha-Blending bereit. Gedacht war diese Erweiterung v.a. für Antialiased Schriften, wird aber auch für alle möglichen Desktop Effekte genutzt. XRender stützt sich massgeblich auf die 2D Beschleunigungsarchitektur von X.Org ab.

Unter den KDE4 Systemeinstellungen kann man wählen, ob die Desktop Effekte via OpenGL (also DRI, oder nVIDIA Direct Rendering) oder XRender ausgeführt wird.

2D Beschleunigung

Während mit DRI+MESA bzw. nVIDIA’s eigener Architektur, die 3D Funktionalität bereitgestellt wird, gibt es im 2D Bereich eine eigene Subkomponente.
Seit 1996 exisitert mit dem Modul XAA (XFree86 Acceleration Architecture) eine Treiberarchitektur die es ermöglicht auf die 2D Hardwarebeschleunigung von GPU’s zuzugreifen.
Da XAA viele 2D Operationen sowie XRender nicht mehr genügend beschleunigte und zusätzlich erhebliche Probleme mit Compositing Window Manager hat (siehe xVideo) wurde mit X.Org 7.0 EXA als Übergangslösung bis zum vollständigen 3D Desktop vorgestellt. EXA sollte schlank sein und XRender so gut wie möglich unterstützen. Mittlerweile unterstützen viele Grafiktreiber dieses Modul.
Ganz neu ist UXA, eine EXA Reimplementation , entwickelt von Intel & Tungsten Graphics, unter Zuhilfenahme von GEM.

nVIDIA unterstützt defaultmässig direkt die hardwarebeschleunigung der XRender Extension und damit die 2D Befehle.

X Video extension (Xv/XVideo)

Video Ausgabe Mechanismus des X-Window Sytems. Haupt Usecase ist die Skalierung von Videowiedergabe in der Video Controller Hardware, bspw. für Vollbilddarstellung.
Wenn allerdings die Compositing Erweiterung des Window Managers eingestellt ist, werden Programme die Xv in Kombination mit XAA benutzen –  wie VLC – sofort mit folgender Meldung terminieren:

X11 error: BadAlloc (insufficient resources for operation)

Grund dafür ist, dass der XAA Beschleuniger kein Mechanismus beherscht um Pixmaps vom Systemspeicher in das Video RAM zu laden.

X Resize and Rotate Extension (XRandR)

Erlaubt es X clients dynamisch X Screens zu vergrößern/verkleinern und zu rotieren. Generell geht es darum die Display Charakteristik zu verändern, ohne den xserver neu starten zu müssen.
XRandR unterstützt (derzeit) nicht Multi-Screens, bei denen ein WindowManager mehrere Screens verwaltet, die allerdings nicht durchgängig sind. Xinerama Mode wird dagegen unterstützt. Bei diesem Mode spannen mehrere Monitore einen grossen virtuellen Screen auf. Dieser Mode heisst bei nVIDIA TwinView und kann über das nVIDIA eigene Setting Tool angewählt werden.
Da Xinerama/TwinView einen grossen virtuellen Screen aufspannt, benötigt man dadurch wesentlich mehr VRAM. Auch wenn die Menge an verfügbarem VRAM stark gestiegen ist, muss man sich im klaren sein, dass bei eingeschaltetem Antialiasing der Memory sehr schnell ausgeschöpft sein wird (siehe Full Screen Antialiasing)

XRandR lag lange Zeit in Version 1.2 vor und wurde mit xserver 1.6 auf Version 1.3 upgedatet. Neu ist u.a. das Panning Feature.
XRandr lässt sich mit dem gleichnamigen (kleinschreibung beachten) Kommandotool bedienen. Ein Generisches GUI oder die Integration in die bekannten Desktop Systeme – Gnome und KDE – lässt auf sich warten. Einzelne Features lassen sich aus GPU Settings Applikationen der Hersteller bedienen, so bspw. TwinView mittels nvidia-settings.

X Input Extension

Zuständig für Einrichtung und Abfrage von Eingabegeräten. Mit xserver 1.6 wurde X Input 1.5 vorgestellt, welches neben Vereinfachungen auch Predictable Pointer Acceleration einführt, welches verbesserte und beschleunigte Darstellung des Mauszeigers bietet.

Gallium 3D

Eines der vielversprechendsten Projekte innerhalb des X-Window System seit langen. Unter der Federführung von Tungsten Graphics, welche im Auftrag von Intel deren Grafiktreiber erstellt, entsteht langfristig ein neuer Layer anstatt der MESA<->DRI Kombination.

Das Gallium API kann als Input unterschiedliche Grafikbibliotheken – OpenGL, Direct3D.. – verarbeiten und hat nur noch ein backend, den sog. State Tracker.
Grafikkartentreiber müssen nur noch diesen State-Tracker verarbeiten – bisher muss für jeden Grafikkartentreiber ein angepasstes mesa-DRI Modul geschrieben werden. Zudem benutzt Gallium3D unter Linux auch das Kernel Memory Management – GEM – wobei Gallium selber plattformneutral ist.
Mit einem dummy-Treiber lassen sich sogar Ergebnisse von nicht vorhandener GPU-Hardware simulieren.
Ob dieses Modul tatsächlich in den Produktiveinsatz kommt und ev. sogar über die Grenzen von X.Org/Linux sich durchsetzt kann derzeit noch nicht abgeschätzt werden.

Kernel Mode Settings

Dies ist die Bestrebung die bisher im Userland des xservers angesiedelten Modecodes in den Linux Kernel zu transferieren.
Neben der wiederholten Redundanzvermeidung wird es substantielle Verbesserungen geben:

  • Verbesserte (oder erstmals verlässlich eingeführte) Unterstützung für Suspend und Resume
  • Verlässliches Virtual Terminal (VT) Switching
  • Flickerfreies booten / einloggen in die Desktop Umgebung

Diese Featureset wird seit Kernel 2.6.29 angeboten und wird erstmals von der Intel Treiber Serie 2.6.x genutzt (Einstellungsmöglichkeit)

X.Org erlebt derzeit seine aufregendste – der Enduser eventuell seine nervigste – Zeit. Probleme gibt es derzeit mit

  • Instabilität des Intel Treiber 2.6 mit UXA
  • Ring of Death Probleme des Intel Treibers 2.x mit X.Org 7.4 und EXA
  • nVIDIA’s 2D Beschleunigung unter Composite Window Manager
  • Generell 3D Performance auf Composite Window Manager

Sollten sich die Beteiligten nicht irrational verhalten, wird X.Org wahrscheinlich als bestes Window System auf dem gesamten Desktop Markt hervorgehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.