20.11.2013 Aufrufe

Folien - Chemnitzer Linux-Tage

Folien - Chemnitzer Linux-Tage

Folien - Chemnitzer Linux-Tage

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Grafiktreiber im <strong>Linux</strong>kernel<br />

- die Außenseiter -<br />

Creative Commons by-nc-nd<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

– Coprozessor mit extrem vielen Kernen<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

– Coprozessor mit extrem vielen Kernen<br />

●<br />

Wie wird dieser Prozessor angesteuert?<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

– Coprozessor mit extrem vielen Kernen<br />

●<br />

Wie wird dieser Prozessor angesteuert?<br />

– PCI Adressraum (BAR)<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

– Coprozessor mit extrem vielen Kernen<br />

●<br />

Wie wird dieser Prozessor angesteuert?<br />

– PCI Adressraum (BAR)<br />

– Direktes schreiben in Register<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Grundlagen<br />

●<br />

Was ist eine Grafikkarte?<br />

– Ausgabelogik<br />

– Coprozessor mit extrem vielen Kerne<br />

●<br />

Wie wird dieser Prozessor angesteuert?<br />

– PCI Adressraum (BAR)<br />

– Direktes schreiben in Register<br />

– Ausführen eines DMA Puffers<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- grundsätzlicher Aufbau -<br />

Userspace<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- grundsätzlicher Aufbau -<br />

Userspace<br />

Userspace<br />

Ioctrl und mmap Interface<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- grundsätzlicher Aufbau -<br />

Grafisches Virtual Terminal<br />

Userspace<br />

Userspace<br />

Ioctrl und mmap Interface<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- grundsätzlicher Aufbau -<br />

Userspace<br />

Userspace<br />

Grafisches Virtual Terminal X Server<br />

Ioctrl und mmap Interface<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- grundsätzlicher Aufbau -<br />

Userspace<br />

Userspace<br />

Grafisches Virtual Terminal DDX X Server<br />

Ioctrl und mmap Interface<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Userspace<br />

- indirect Rendering -<br />

Userspace<br />

2D Rendering Client<br />

DDX<br />

X Server<br />

3D Rendering Client<br />

OpenGL<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- direct Rendering -<br />

Userspace<br />

Graphisches<br />

Virtual Terminal<br />

X Server<br />

libdrm<br />

Ioctrl und mmap Interface<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Userspace<br />

- direct Rendering -<br />

2D Rendering Client<br />

Userspace<br />

3D Rendering Client<br />

OpenGL<br />

DDX<br />

X Server<br />

Mesa3D<br />

libdrm<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

– Widerspricht dem Sinn eines Betriebssystems<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

– Widerspricht dem Sinn eines Betriebssystems<br />

– Sicherheitslücke<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

– Widerspricht dem Sinn eines Betriebssystems<br />

– Sicherheitslücke<br />

●<br />

Jede Applikation verwaltet ihren eigenen<br />

Adressraum<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

– Widerspricht dem Sinn eines Betriebssystems<br />

– Sicherheitslücke<br />

●<br />

Jede Applikation verwaltet ihren eigenen<br />

Adressraum<br />

– Keine Zusammenarbeit möglich<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Probleme dieser Architektur<br />

●<br />

Voller Durchgriff der Userspacekomponenten<br />

auf die Hardware<br />

– Widerspricht dem Sinn eines Betriebssystems<br />

– Sicherheitslücke<br />

●<br />

Jede Applikation verwaltet ihren eigenen<br />

Adressraum<br />

– Keine Zusammenarbeit möglich<br />

– Keine zentrale Verwaltung mit Überblick über<br />

Systemressourcen<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- Memory Manager -<br />

Userspace<br />

Userspace Applikationen<br />

Ioctrl und mmap Interface<br />

Graphics memory manager (TTM)<br />

Kernel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


TTM (GEM)<br />

●<br />

Kernel übernimmt zentrale Speicherverwaltung<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


TTM (GEM)<br />

●<br />

Kernel übernimmt zentrale Speicherverwaltung<br />

– Verfügbare Ressourcen können besser an die<br />

Clients verteilt werden<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


TTM (GEM)<br />

●<br />

Kernel übernimmt zentrale Speicherverwaltung<br />

– Verfügbare Ressourcen können besser an die<br />

Clients verteilt werden<br />

– Auslagern von Bereichen des Grafikspeichers<br />

wird möglich<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


TTM (GEM)<br />

●<br />

Kernel übernimmt zentrale Speicherverwaltung<br />

– Verfügbare Ressourcen können besser an die<br />

Clients verteilt werden<br />

– Auslagern von Bereichen des Grafikspeichers<br />

wird möglich<br />

– Kernel kann eigene Kommandopuffer erstellen<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- Kernel Mode Setting -<br />

Userspace<br />

Userspace Applikationen<br />

Ioctrl und mmap Interface<br />

Graphics memory manager (TTM)<br />

Kernel<br />

Kernel Mode Setting (KMS)<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Modesetting<br />

●<br />

Einstellen der Auflösung bei angeschlossenen<br />

Monitoren<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Modesetting<br />

●<br />

Einstellen der Auflösung bei angeschlossenen<br />

Monitoren<br />

●<br />

Mehr Informationen zur Bootzeit<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Modesetting<br />

●<br />

Einstellen der Auflösung bei angeschlossenen<br />

Monitoren<br />

●<br />

●<br />

Mehr Informationen zur Bootzeit<br />

Grafischer Boot<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Modesetting<br />

●<br />

Einstellen der Auflösung bei angeschlossenen<br />

Monitoren<br />

●<br />

●<br />

●<br />

Mehr Informationen zur Bootzeit<br />

Grafischer Boot<br />

Schnelle Wechsel zwischen Terminals<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


<strong>Linux</strong> Grafikstack<br />

- Kernel Mode Setting -<br />

Userspace<br />

libdrm<br />

Ioctrl und mmap Interface<br />

Graphics memory manager (TTM)<br />

Kernel<br />

Kernel Mode Setting (KMS)<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Userspace<br />

- Gallium3D -<br />

2D Rendering Client<br />

Userspace<br />

3D Rendering Client<br />

OpenGL<br />

DDX<br />

X Server<br />

Mesa3D<br />

libdrm<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Userspace<br />

- Gallium3D -<br />

2D Rendering Client<br />

Userspace<br />

3D Rendering Client<br />

OpenGL<br />

DDX<br />

X Server<br />

Mesa3D<br />

Gallium3D<br />

libdrm<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Winsys:<br />

– Abstrahieren Betriebssytemeigenheiten<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Winsys:<br />

– Abstrahieren Betriebssytemeigenheiten<br />

●<br />

Pipedriver:<br />

– Abstrahieren Hardwareunterschiede<br />

– Stellen Gallium Interface bereit<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Winsys:<br />

– Abstrahieren Betriebssytemeigenheiten<br />

●<br />

Pipedriver:<br />

– Abstrahieren Hardwareunterschiede<br />

– Stellen Gallium Interface bereit<br />

●<br />

Statetracker:<br />

– Setzen auf Gallium Interface auf<br />

– Implementieren jeweils eine Rendering API<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Highlights:<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Highlights:<br />

– Sehr viel gemeinsam genutzter Code trotz<br />

unterschiedlichster Hardware<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Highlights:<br />

– Sehr viel gemeinsam genutzter Code trotz<br />

unterschiedlichster Hardware<br />

– Einfache Implementation neuer Rendering APIs<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Gallium3D<br />

●<br />

Highlights:<br />

– Sehr viel gemeinsam genutzter Code trotz<br />

unterschiedlichster Hardware<br />

– Einfache Implementation neuer Rendering APIs<br />

– Durch reichen des Interfaces an Gastsysteme in<br />

virtualisierten Umgebungen<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Wohin geht die Reise?<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Wohin geht die Reise?<br />

●<br />

GPGPU Computing durch OpenCL<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Wohin geht die Reise?<br />

●<br />

GPGPU Computing durch OpenCL<br />

●<br />

Überarbeitung des Gallium Interfaces<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Wohin geht die Reise?<br />

●<br />

GPGPU Computing durch OpenCL<br />

●<br />

Überarbeitung des Gallium Interfaces<br />

●<br />

„Playing Catch up“<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Mithilfe<br />

●<br />

Die Grafiktreiberentwickler sind immer auf der<br />

Suche nach neuen Helfern<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Mithilfe<br />

●<br />

Die Grafiktreiberentwickler sind immer auf der<br />

Suche nach neuen Helfern<br />

●<br />

Auch gern Leute mit weniger<br />

Programmiererfahrung und/oder weniger Zeit<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Mithilfe<br />

- Anlaufstellen -<br />

●<br />

Nouveau Treiber:<br />

– Nouveau Mailinglist<br />

●<br />

nouveau@lists.freedesktop.org<br />

– Freenode IRC Channel<br />

●<br />

●<br />

#nouveau<br />

#dri-devel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Mithilfe<br />

- Anlaufstellen -<br />

●<br />

Radeon Treiber:<br />

– DRI Mailinglist<br />

●<br />

dri-devel@lists.freedesktop.org<br />

– Freenode IRC Channel<br />

●<br />

●<br />

#radeon<br />

#dri-devel<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Fragen / Diskussion<br />

●<br />

Fragen?<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)


Fragen / Diskussion<br />

●<br />

Fragen?<br />

●<br />

Falls später noch Fragen auftauchen:<br />

– dev@lynxeye.de<br />

20. März 2011 Lucas Stach (dev@lynxeye.de)

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!