Intel-Grafikkarten unter FreeBSD

Tulkas

Well-Known Member
Hi,
momentan läuft mein Lenovo T420 (i5-2520M Sandy-Bridge) prima unter FreeBSD12-CURRENT. Was mich allerdings zunehmend verwirrt ist die ganze Grafiktreibergeschichte der verbauten Intel-Prozessor-Grafikkarte für Xorg.
Im Internet gibt es Informationsbrocken mit den Buzzwords "modesetting", "i915", "intel", "i915kms". Dann gibt es diesen ominösen 4.9er branch, den TrueOS nutzt um die neueren Intels zu beschleunigen.

Was genau ist jetzt der korrekte Treiber für Intel-Grafikkarten um die Hardware-Beschleunigung zu bekommen und tearing zu vermeiden? Kann mir jemand den Zusammenhang erklären und sagen, ob jetzt "intel" oder "modesetting" der korrekte Treiber ist?
 
Eigentlich ist es ganz einfach, man sollte für den Anfang ins Linux-Lager schauen: Vor inzwischen mehr als ein paar Jahren entschloss man sich unter Linux den Grafikstack komplett umzubauen. Im Rahmen dessen wurde der ganze Kram neu geordnet. Auf Seiten des Kernels gibt es vereinfacht gesagt einmal das "Kernel Mode Setting", was für die Ausgabe verantwortlich ist. Also welches Bild in der welcher Auflösung und Farbtiefe auf welchen Ausgang der Grafikkarte geschrieben wird und wie die an die Grafikkarte angeschlossenen Monitore zusammenhängen. Dazu kommt der "Direct Rendering Manager", der die GPU selbst ansteuert und aus einem Instruktionsstrom das Bild rendert. Wie das mit Kernelmodulen, Speichermanagern und so weiter zusammenhängt, ist sehr von der jeweiligen GPU und ihrer Treiberimplementierung abhängig. Auf Userlandseite braucht man eine Frontend-Bibliothek, die den Instruktionsstrom für die GPU erzeugt. Das ist bei den freien Treiber (fast) immer Mesa3D, was sich wiederum seitens der Anwendung durch OpenGL, OpenGL ES, DirectX und Vulkan in verschiedenen Versionen ansprechend lässt.

Nimmt man nun Wayland oder ein ähnliches Window System wie das gerade verstorbene Mir oder Androids Dingens, dessen Namen ich immer vergesse, ist man an dieser Stelle fertig. Ein Compositor rendert die Desktopdarstellung über Mesa3D, die GPU erzeugt vom Direct Rendering Manager gesteuert ein Bild und es wird dann per Kernel Mode Setting ausgegeben. Bei X11 benötigt man allerdings ein weiteres Modul, da X11 selbst Dinge managemen will, für die andere Komponenten zuständig sind. Außerdem nutzen nicht alle Windows Manager Compositing, auch die alten 2D-Rendering APIs sind noch weit verbreitet. Daher benötigt man einen DDX-Treiber, der X11 ermöglicht, all dies anzubieten. Früher gab es für jede Grafikkartenfamilie einen eigenen DDX-Treiber, also xf86-video-intel, xf86-video-radeon, etc. Da hauptsächlich dank Kernel Mode Setting und weniger wichtig dem Direct Rendering Manager aus dem Userland alle Grafikkarten gleich erscheinen, kann man mit xf86-video-modesetting einen generischen DDX-Treiber installieren.

Also unter Linux:
  • Freie Treiber: Kernel Mode Setting und den Direct Rendering Manager zusammengetüdelt durch den Kerneltreiber, Mesa3D und xf86-video-modesetting.
  • Nvidia: Kernel Mode Setting (nvidia-modesetting), Nvidias proprietäres Renderinterface (nvidia), Nvidias libGL, xf86-video-nvidia.
  • AMD: Kernel Mode Setting und den Direct Rendering Manager + Proprietäre Erweiterungen zusammengetüddelt durch amdgpu (auch von freien Treibern nutzbar), AMDs proprietäre libGL oder Mesa3D, xf86-video-modesetting. Das ist noch sehr beta, in der Praxis dürfte man vor allem die Variante mit Mesa3D oder den alten, freien Render-Stack über radeonsi finden.
Unter FreeBSD ist die Sache nun ähnlich:
  • Für Intel: Kernel Mode Setting und den Direct Rendering Manager, implementiert durch i915kms.ko und drm2.ko. Im Userland eigentlich xf86-video-modesetting, da das aber derzeit kaputt ist, doch wieder xf86-video-intel. Das alte x915.ko ist der alte Render Stack ohne Kernel Mode Setting. Der ist nur noch aus historischen Gründen da und funktioniert meines Wissens nicht mehr sauber. In 12-CURRENT ist er entfernt.
  • Für Nvidia: Kernel Mode Setting durch nvidia-modesetting.ko, Nvidias proprietäres Renderinterface durch nvidia.ko, Nvidias libGL, xf86-video-nvidia
Derzeit ist unter FreeBSD allerdings bei den freien Treibern bei Intel Haswell Schluss und AMD wird praktisch gar nicht unterstützt. Zumindest keine halbwegs aktuellen Karten und die älteren Modelle nur recht bröselig. Daher gibt es ein Projekt, um ein aktuellen Kernel Mode Setting, einen aktuellen Direct Rendering Manager, aktuelle AMD- und Intel-Treiber, sowie den daran hängenden Rattenschwanz auf FreeBSD zu portieren. Anders als bisher wird aber keine echte Portierung mehr gemacht, stattdessen baut man einen Wrapper, der den Linux-Code idealerweise 1:1 auf FreeBSD ausführen kann. Damit kann man später einfach neuere Versionen übernehmen, muss allenfalls den Wrapper anpassen. Dies Projekt heißt "drm-next", basierte einige Zeit auf Linux 4.9, inzwischen ist es aber weiter, meine ich. Bisher ist es noch nicht in FreeBSD angekommen, sollte es aber bald. Wer es nutzen will, um aktuellen AMD- und Intel-Karten anzusprechen, muss daher seinen Kernel aus dem Branch bauen.

Keine Ahnung, ob das in nun in allen Details so korrekt und nicht zu sehr vereinfacht ist. Aber zumindest für den Überblick sollte es stimmen. Wikipedia hat auch noch eine Menge, ein guter Einstiegspunkt ist: https://en.wikipedia.org/wiki/Mesa_(computer_graphics) Anders als ich unterschlagen sie auch nicht das Direct Rendering Interface, was das alles zusammenklebt.
 
Derzeit ist unter FreeBSD allerdings bei den freien Treibern bei Intel Haswell Schluss
Ja, aber als Ergänzung: Haswell geht nun gut (auch wenn ich mir wieder eine passiv gekühlte Nvidia einbauen werde). Haswell war noch vor einigen Monaten als Desktopsystem ein No-Go und läuft mittlerweile selbst mit plasma5 schön flüssig.

Einziger Nachteil beim Modesetting: Nach dem Start des Xservers ist beim Wechseln mit Strg+Alt+F1 auf ttyv1 die Schrift dort dermaßen winzig, dass ich Schwierigkeiten habe, sie zu lesen. Bei Intelgrafik ist das schon lange so, unter Nvidia ohne modesetting vor einigen Monaten war das nicht so.
 
Im Userland eigentlich xf86-video-modesetting, da das aber derzeit kaputt ist, doch wieder xf86-video-intel
Hast du eine Idee, bis wann xf86-video-modesetting nutzbar sein soll? Vermutlich ab FreeBSD 12.0, oder schon wenn drm-next in HEAD landet? Hab hier einen Intel NUC stehen der mal gefüttert werden will.
 
Da dieser Faden nun gerade wieder hochgezogen wurde:
Einziger Nachteil beim Modesetting: Nach dem Start des Xservers ist beim Wechseln mit Strg+Alt+F1 auf ttyv1 die Schrift dort dermaßen winzig, dass ich Schwierigkeiten habe, sie zu lesen. Bei Intelgrafik ist das schon lange so, unter Nvidia ohne modesetting vor einigen Monaten war das nicht so.
Da gäbe es wohl verschiedene Ansätze, einer davon wäre, sich Schriftarten mittels vtfontcvt passend selbst zu machen, das wird im FreeBSD Wiki im newcons Artikel im Abschnitt Font Support am Beispiel Terminus Font kurz erklärt:
https://wiki.freebsd.org/Newcons

Oder aber man setzt die vt's auf Textmode in der /boot/loader.conf:
Code:
hw.vga.textmode=1
was ja auch beim nvidia-driver hilft, die vt's leserlich zu behalten, nach XServer Start.
 
Hast du eine Idee, bis wann xf86-video-modesetting nutzbar sein soll? Vermutlich ab FreeBSD 12.0, oder schon wenn drm-next in HEAD landet? Hab hier einen Intel NUC stehen der mal gefüttert werden will.
xf86-video-modesetting funktioniert bei mir seit dem Update der Mesa3D-Pakete auf 17.x. Allerdings brauchst du dafür eben ein funktionierendes Treiber-Modul für deine GPU im Kernel. Also erst mit drm-next. :(
 
Allerdings brauchst du dafür eben ein funktionierendes Treiber-Modul für deine GPU im Kernel. Also erst mit drm-next
Das habe ich. Ich habe mir den drm-next Branch via github.com gezogen und auch kompiliert. Der Kernel bootet und das Modul i915kms kann ich laden. Mir ist jetzt nur nicht ganz klar, wo ich xf86-video-modesetting finde bzw. kompiliere.
 
Wenn du einen aktuellen xorg-server installiert hast, hast du xf86-video-modesetting bereits. Es ist fest integriert. Theoretisch sollte er es auch von alleine nutzen, sofern du nicht explizit irgendwas konfiguriert hast. Ansonsten kann es wie ein ganz normaler Treiber in die xorg.conf in die Grafikkarten-Sektion eingetragen werden. Also so in etwa:

Code:
Section "Device"
    Identifier  "Card0"
    Driver      "modesetting"
EndSection
 
Ich bekomme es einfach nicht hin. Ich finde nirgends einen Treiber xf86-video-modesetting. Ich werde warten, bis der Code in base/head angekommen ist.

In der Zwischenzeit habe ich das Ganze mal mit Arch Linux versucht. Dort funktioniert es. Leider nerven mich andere Sachen wie Tearing bei diesem Treiber. Im Moment scheint es bei xf86-video-modesetting keine Option dafür zu geben. Nur mit dem Treiber xf86-video-intel gibt es dafür Möglichkeiten. Ob diese funktionieren, weiss ich aber leider nicht (musste den NUC abgeben aber ich bekomme nochmal einen).

Im Moment scheint einzig Nvidia für mich eine einfache nutzbare Option. Dort gibt es 120hz und dank der Optionen ForceCompositionPipeline=On, ForceFullCompositionPipeline=On keine Probleme mit Tearing.
 
Da ist er: /usr/local/lib/xorg/modules/drivers/modesetting_drv.so
Und die Manpage: /usr/local/man/man4/modesetting.4.gz

Wie gesagt, er gehört zu dem xorg-server Paket. Wenn du das hast, hast du auch den Modesetting-Treiber. Ich weiß nur nicht, ob xorg-server in den Quarterly-Paketen aktuell genug ist... Das ist alles gerade ziemlich im Fluss, was es unübersichtlich macht.

Auf Arch - oder besser im ganzen Linux-Lager - ist das Problem, dass xf86-video-intel de facto tot ist. Intel fixed ab und an noch Bugs, aber eine echte Fortentwicklung und neue Releases machen sie nicht mehr. Wie weit das Auswirkungen hat, kommt sehr auf den Einsatz drauf an. Einfachen Window Managern ist das egal, aber der gute KWin und Gnomes Mutter crashen gerne mal unerklärlich. AMD sieht es etwas entspannter und baut mit xf86-video-amdgpu sogar noch einen neuen DDX-Treiber. Vielleicht, ganz, ganz vielleicht, kommt der auch irgendwann zu FreeBSD.
 
Ich nutze Arch auf meinem Laptop mit xf86-video-intel und ich habe kein Tearing und nutze sogar OpenCL für die Bildbearbeitung mit darktable. Das alles läuft ziemlich anständig - natürlich kein Vergleich mit der Performance einer nVidia-Karte...

Ich benutze aber auch nur dwm ohne compton oder andere Spielereien als Desktopumgebung.

PS: Gerade mal unter Arch xf86-video-intel runtergeschmissen: Tearing, dafür allerdings mit compton zusammen keine Probleme.
 
Wie gesagt, er gehört zu dem xorg-server Paket. Wenn du das hast, hast du auch den Modesetting-Treiber. Ich weiß nur nicht, ob xorg-server in den Quarterly-Paketen aktuell genug ist
Den Quarterly Branch habe ich extra nicht verwendet. Ich werde übers Wochenende nochmals schauen, ob ich den Treiber unter dem Pfad oben auch habe. Danke.
Tearing, dafür allerdings mit compton zusammen keine Probleme.
Ja compton kann das fixen aber das verschieben von Fenstern und die Mausverzögerung ist damit so unglaublich langsam. Klar das sind vielleicht meine Macken aber alles unter 120Hz geht einfach nicht mehr und dazu zähle ich auch Tearing.
 
Zurück
Oben