Les cartes 3D sous Linux : Sécurité, Direct Rendering et performances...

     Attention, ce qui suit est à déconseiller aux ames sensibles, je vous aurais prévenu :-)

A quoi sert GLX ?

     Le but de GLX est d'encapsuler les commandes OpenGL dans le protocole X11. L'applicatif envoie une commande encapsulée au serveur X11, celui-ci la reçoit, la décode, et envoie l'ordre à la couche OpenGL pour affichage. L'avantage de cette méthode est qu'il est possible d'afficher une appli 3D accélérée sur un affichage distant en utilisant l'accélération 3D distante. Seules les commandes 3D passent par le réseau. Le défaut est qu'en affichage local, cet encodage/décodage des appels OpenGL dans X11 nuit énormément aux performances.

Pour résoudre ce problème, tous les drivers ici présents peuvent fonctionner de 2 façons :

  • Indirect Rendering : les commandes OpenGL passent à la moulinette de l'encodage/décodage
  • Direct Rendering : la couche X11 est court-circuitée et les commandes passent directement de l'application à la couche OpenGL. Les performances sont maximales mais ça n'est applicable qu'en local, évidement.

Le driver NVidia et la couche DRI pour XFree 4 fonctionnent parfaitement en direct rendering, aucun problème. Le support de l'indirect rendering est par contre assez balutiant pour l'instant donc l'affichage distant d'applis 3D n'est pas encore la tasse de thé de ces drivers.


Le cas très particulier d'Utah-GLX

     Les cas d'Utah-GLX est très différent. Comme il est basé sur XFree 3 qui ne prévoyait pas l'intégration de l'accès direct à la carte 3D, les développeurs Utah-GLX ont rusé en permettant directement l'accès au matériel aux librairies 3D en bloquant X11 (John Carmack explique ça mieux que moi dans le fichier X_dma_hack.txt que vous trouverez dans le répertoire docs de a distribution Utah-GLX). Qui dit accès au matériel sous Unix dit droits root et trou de sécurité majeur. Pour bénéficier du direct rendering avec Utah-GLX et donc de l'accélération maximale, il faut se connecter en tant que root ! De plus, une seule application peut bénéficier du direct rendering à la fois. La seconde application 3D lancée repassera en indirect rendering. Ce sont les inconvénients majeurs d'Utah-GLX mais l'intégration correcte dans XFree 3 était à ce prix. Dans XFree 4, la DRI (qui veut dire Direct Rendering Infrastructure, je le rapelle) a été développée spécialement pour résoudre toutes ces limitations.


NVidia sécurisé ? Peut-être... :-)

     Les drivers NVidia n'utilisent pas DRI car ils permettent l'accès direct au hardware pour l'application. Ca n'est (à priori puique qu'on ne peut pas lire leur sources !) pas un problème de sécurité puisque les cartes NVidia ont l'intéressante faculté de vérifier de façon matérielle tout ce qu'on leur envoie. Une application mal intentionnée ne pourrait donc pas être écrite de façon à profiter de failles pour explorer le reste de la mémoire de la machine et ainsi la pirater (ou surtout la crasher).

Pour information, la plupart des autres cartes 3D (dont les Matrox) ne disposent pas de cette fonction et nécessitent donc une surcouche qui s'occupe de tout vérifier (DRI dans XFree 4) ou d'être root pour aller vite (Utah-GLX).


     Voilà, c'est tout pour cette plongée au coeur de la très complexe architecture des drivers de cartes 3D dans un OS qui tient compte de la sécurité ! Si vous voulez en apprendre plus, je ne peux que vous conseiller la lecture des documentations d'Utah-GLX et de la DRI.


Page suivante : Les cartes 3D testées

Table des matières :

Projet Mesa 3D Projet Utah-GLX DRI pour XFree86 Site officiel OpenGL Drivers Linux Nvidia