Ceci est une ancienne révision du document !



nVidia Optimus : la vidéo hybride

La technologie Optimus est développée par le fabricant de cartes graphiques nVidia, elle est à destination des ordinateurs portables. Elle a pour but de trouver le juste équilibre entre autonomie de la batterie et performances graphiques.

Explications générales

Partant du constat que l'autonomie est un point crucial pour les ordinateurs portables, Intel inclut une carte graphique basse consommation dans quasiment tous ses processeurs mobiles depuis Janvier 2010, permettant ainsi de se passer d'une carte graphique dédiée plus performante mais également plus énergivore, du moins tant qu'il ne s'agit que de bureautique ou de films classiques (les Blu-Ray sont plus ou moins bien supportés).

Cette puce graphique intégrée est en effet à ce jour bien en-deçà de ce que peuvent fournir des cartes dédiées en termes de performances, et dès que l'on veut utiliser des logiciels requérant des capacités 3D tels les jeux vidéos, le montage vidéo ou édition numérique lourde, la modélisation 3D, etc …, on se retrouve très vite limité par celle-ci.

Aussi, nVidia (suivi par ATI/AMD depuis) a réfléchi à un système permettant d'avoir les avantages des deux mondes : une grande autonomie ET des performances graphiques relativement élevées.

C'est ainsi qu'est née la technologie Optimus, permettant de combiner la grande autonomie de la puce graphique intégrée avec les performances d'une carte dédiée. Cette technologie comporte donc une composante matérielle et une composante logicielle, ce qui explique en partie les difficultés rencontrées pour son support sous Linux.

Dans la pratique, ce système est censé fonctionner de la manière suivante : en utilisation bureautique/légère, la carte graphique dédiée nVidia est éteinte électriquement, sa consommation est ainsi nulle et on se retrouve dans la situation classique ou la carte graphique intégrée s'occupe de tout. Si un programme demandant des performances 3D vient à être lancé, alors la carte nVidia s'allume et fait tourner le programme en question. Elle s'éteint lorsque celui-ci s'arrête. Ce fonctionnement est globalement transparent pour l'utilisateur, mais il s'agit ici de la théorie.

La partie qui suit aborde cette technologie à un niveau plus technique et détaillé, que l'utilisateur normal n'a pas besoin de connaître nécessairement.

Description technique

La question de l'autonomie face aux performances dans le monde de l'informatique mobile n'est en réalité pas nouvelle, et nVidia n'en est pas à son premier essai.

En fait, Intel développe depuis longtemps des contrôleurs graphiques intégrés, la nouveauté est que ceux-ci sont désormais directement intégrés dans les processeurs, tandis qu'avant il s'agit d'un chipset séparé.

Là où il suffisait à nVidia de remplacer ce chipset externe par ses propres cartes graphiques, il faut maintenant nécessairement faire avec la présence de cette carte graphique intégrée.

nVidia, avant Optimus, avait déjà développé une technologie hybride utilisant une puce graphique Intel combinée à l'une des siennes, cette technologie s'appelait Hybrid SLI. La partie matérielle était prépondérante dans ce système, les deux cartes étant complètement indépendantes l'une de l'autre et accédaient au contrôle de l'affichage via un multiplexeur graphique (Graphic Multiplexer). C'est un composant matériel qui permet de basculer l'écran d'une sortie vidéo à l'autre. Pour l'utilisateur, cela impliquait une certaine latence lors du transfert du contrôle (un écran blanc ou noir de quelques secondes), ce qui s'avérait assez pénible à l'usage. De plus, c'était à l'utilisateur de demander le switch. Et ce switch était intégral, ce qui signifie que certaines applications pouvaient planter si elles étaient entrain d'utiliser la carte graphique intégrée. La gestion de ce système sous Linux était inexistante, et en fait cet absence de support était la cause de plusieurs problèmes que l'on rencontre également avec Optimus, détaillés dans la seconde partie de cette documentation. Certaines solutions permettant de gérer la technologie Optimus sous Linux sont également fonctionnelles pour Hybrid SLI, ce support peut être amené à changer lorsque les différences matérielles entreront en ligne de mire (actuellement, ces solutions sont purement logicielles dans le sens où elles ne font pas intervenir les spécificités matérielles de ce système).

Seulement, à partir du moment où Intel intègre directement ses contrôleurs graphiques dans ces processeurs des générations Core iX et Atom (à noter qu'il existe deux exceptions à cette règle pour le grand public : l'Atom Z560 et les Core i7 QM et XM de première génération sont dépourvus de partie graphique intégrée, et de manière plus générale pour les Atom, il ne s'agit que de ceux sortis depuis Janvier 2010), il n'est plus possible de mettre aisément en place un système utilisant un multiplexeur, d'autant plus que les problèmes intrinsèques à ce système ne sont pas négligeables. Aussi, il a fallu à nVidia une autre idée, et c'est là qu'entre en jeu Optimus.

Techniquement, Optimus exploite deux cartes graphiques :

  • l'IGP (Integrated Graphics Processor), chipset graphique intégré au processeur, peu consommateur d'énergie mais aussi moins performant ;
  • le GPU (Graphics Processing Unit), la carte graphique dédiée (Discrete Card), puissante mais gourmande.

Matériellement, seul l'IGP est connecté à l'écran, il est donc impossible de l'éteindre, car c'est lui qui gère l'affichage dans tous les cas. En fait, ce n'est pas exactement l'IGP qui est connecté, mais une unité appelée Display Controller. Cette unité fait néanmoins partie de l'IGP, mais elle accepte des connexions externes, et c'est ainsi que la carte nVidia est reliée au système.

Ainsi, par défaut, la carte nVidia est éteinte électriquement, et tout est géré par l'IGP (les calculs graphiques et l'affichage). Ensuite, en théorie, le lancement d'un programme nécessitant des capacités 3D déclenche l'allumage de la carte nVidia, et tous les appels graphiques lancés par ce programme sont envoyés à la carte nVidia, qui les exécute et renvoie le résultat au Display Controller, qui les affiche alors à l'écran. Le reste du système (environnement du bureau, autres applications tournant durant le même laps de temps) continue à utiliser l'IGP pour les calculs graphiques et l'affichage. Lorsque le dernier (il peut y en avoir plusieurs à la fois) programme utilisant la carte nVidia est fermé, celle-ci est à nouveau éteinte pour préserver la batterie.

Seulement, tout cela est pour la théorie.

Analyse

Dans la pratique, si cela est un peu près fonctionnel sous Windows, le support de cette technologie sous Linux est plutôt catastrophique.

Le serveur d'affichage X.org se fait vieux, et il n'a pas été conçu pour gérer cette situation. Devant cette situation, une réécriture intégrale de celui-ci est en cours, mais c'est un projet à long terme tant cela est fastidieux. Pour les curieux, il s'agit de Wayland. Les problèmes techniques pour l'implémentation de cette technologie sous Linux sont détaillés dans le dernier paragraphe de cette partie.

En l'état, sur les portables équipés de la technologie Optimus, à savoir tout ordinateur portable pourvu d'un processeur Intel Core iX ou Atom ainsi que d'une carte graphique dédiée nVidia (une étiquette Optimus est généralement présente sur ces modèles), de nombreux problèmes peuvent survenir par le simple manque de support (i.e. problèmes aggravant la situation par rapport à celle où la carte nVidia serait juste là pour décorer), parmi lesquels on compte notamment :

  • l'impossibilité de démarrer un média d'installation (LiveCD, LiveUSB) et de manière plus générale, l'impossibilité de démarrer un Linux quelconque. Ce problème est généralement dû à un Kernel Panic provoqué par le pilote libre pour carte graphique nVidia, nouveau, qui supporte très mal cette technologie, d'autant plus qu'il s'agit souvent de cartes récentes. Une solution existe, c'est la suivante : s'il s'agit de faire démarrer un noyau quelconque, il faut ajouter nouveau.modeset=0 aux options de démarrage de celui-ci, l'alternative pour un système installé est d'ajouter un fichier blacklist-nouveau.conf dans le dossier /etc/modprobe.d/ contenant la ligne suivante : blacklist nouveau ;
  • problèmes de surchauffe et de ventilateur tournant à plein régime en permanence liés au fait que la carte nVidia est allumée et consomme en permanence par défaut ;
  • sous Ubuntu, le gestionnaire de pilote propriétaires propose l'installation des pilotes propriétaires nVidia (en indiquant la mention "recommandé", ce qui induit l'utilisateur en erreur), il NE faut surtout PAS procéder à l'installation de ces pilotes, l'installation de ceux-ci résultera soit à un écran noir au prochain redémarrage, soit si on a de la chance, à une simple perte de l'accélération 3D fournie par la carte Intel, ce qui se verra par un basculement d'Unity vers Unity 2D et l'impossibilité d'utiliser un programme nécessitant des capacités 3D. La solution est de démarrer en mode de récupération si nécessaire pour accéder à un terminal, puis de lancer ceci : sudo apt-get purge nvidia-current, et normalement, l'accélération graphique devrait fonctionner de nouveau.

Ensuite, si l'on a de la chance, il ne reste plus que les deux problèmes suivants, qui sont eux présents pour tous en revanche :

  • la carte graphique nVidia (GPU) n'est pas utilisable, seul la carte intégrée Intel est exploitable, offrant des performances décevantes au regard de celles de la plupart des GPU.
  • pour autant, le GPU reste alimenté en permanence (et consommant plus que ce que devrait consommer cet état passif), diminuant l'autonomie tout en restant inutilisable.

Pilotes

Comme expliqué dans la partie précédente, l'installation des pilotes propriétaires nVidia, proposée automatiquement, provoque divers problèmes. Il vaut donc mieux s'abstenir d'effectuer cette action, il est plutôt conseillé de ce diriger vers l'une des solutions présentées dans le paragraphe suivant.

Pilotes propriétaires

A l'heure actuelle, nVidia n'a développé aucun pilote pour Linux permettant le support d'Optimus. La marque a d'ailleurs indiqué qu'il n'était pas prévu de le faire. Cependant, les récentes avancées autour de Wayland, le successeur de X.org, ont trouvé écho chez nVidia, qui envisage de supporter Optimus sous Wayland. Seulement, ce n'est pas pour aujourd'hui, ni pour demain d'ailleurs.

Pilotes libres

Optimus étant une technologie relativement récente (lancée début 2010), les travaux de la communauté sont encore expérimentaux. Pour l'instant, aucune solution fiable n'est applicable.

Des travaux sont entrepris sur différents composants. Globalement, ils ne concernent pas uniquement Optimus mais plus généralement les technologies basées sur le même concept (AMD/ATI PowerXpress 4.0 étant également de la partie). Cela passe par la réécriture totale de X.org en le nouveau projet Wayland, ainsi que par un meilleur support au niveau du Kernel, et enfin dans le cas d'Optimus, un support par le driver libre nouveau.

Solutions existantes

On distingue globalement deux types de solutions : celles permettant d'utiliser la carte graphique, celles permettant de l'éteindre pour s'affranchir des problèmes liés sans toutefois pouvoir l'utiliser.


Ancien texte non réécrit.

Le module développé permet toutefois de désactiver la plupart des cartes graphiques dédiées équipées de la technologie Optimus de nVidia et ainsi de ne plus alimenter la carte nVidia économisant ainsi du temps de fonctionnement sur batterie.

Il est toutefois possible de désactiver la carte graphique dédiée sur un grand nombre d'ordinateur portable en utilisant un module nommé acpi_call dont l'installation est détaillée sur un site anglophone consacré au développement du support des cartes graphiques hybrides: linux-hybrid-graphics. L'utilisation de ce module permet d'économiser de l'énergie (en pratique quelques watts) mais ne permet pas d'utiliser la carte graphique dédiée qui n'est pas alimentée.

Il existe aussi Bumblebee, un autre petit logiciel qui éteind la carte nVidia automatiquement et de l'allumer quand on le souhaite pour lancer un jeu par exemple, ou n'importe quelle autre application, permettant ainsi de profiter de l'autonomie de sa batterie et de la puissance de la carte nVidia à travers le pilote propriétaire quand l'utilisateur le souhaite.

Un premier module permettant de basculer à chaud entre le GPU et l'IGP est actuellement en phase expérimentale, utilisable avec le pilote libre Nouveau.

Solutions

Bumblebee

Bumblebee est un petit logiciel capable, si votre ordinateur est compatible, d'éteindre automatiquement la carte nVidia et de ne l'allumer que quand vous le souhaitez (pour lancer un jeu par exemple). Le but à long terme est de fournir un support complet de la technologie Optimus. Le soft ne permet pas pour l'instant un switch "transparent" comme sous Windows, mais le switch existe toujours et permet d'utiliser la 3D, tout en économisant en batterie.

Voir le site du projet sur GitHub.

Pour installer Bumblebee, il existe deux méthodes :

Télécharger l'archive sur le site puis l'installer
Utiliser le PPA

Ce Personal Package Archives (PPA) est mis à disposition sur la plate-forme launchpad par l'auteur :

  • Rendez-vous sur la page de la plate-forme hébergeant l'archive.
  • Dans la section "Adding this PPA to your system", dérouler le menu "Technical details about this PPA" et choisir la version d'Ubuntu que vous utilisez.
  • Copier les adresses des dépôts APT, ajoutez les à votre liste de sources, puis actualiser votre liste de paquets.
  • Installer le paquet en utilisant la logitheque d'Ubuntu où il apparaîtra sous le nom de "Bumblebee". Il sera mis à jour automatiquement lorsque l'auteur publiera de nouvelles versions.
N'installez pas les pilotes propriétaires Nvidia au préalable, puisque le script Bumblebee se charge de le faire.

Une fois l'installation finie, disons que vous voulez lancer le jeu vidéo Amnesia. Pour cela, ouvrez un terminal et tapez, si vous êtes sur Ubuntu 64 bits:

optirun64 amnesia

et sur Ubuntu 32 bits:

optirun32 amnesia

Les deux commandes optirun sont les commandes qui permettent d'allumer la carte nVidia et de lancer n'importe quel logiciel avec la carte nVidia.

Liste des ordinateurs supportés

Voici une liste d'ordinateur qui fonctionnent (en date du 22 mai 2011). Si votre ordinateur n'est pas sur la liste mais que Bumblebee fonctionne, alertez l'auteur sur sa page github pour qu'il l'ajoute à la liste.

marque modèle
Acer Aspire 5742G
Aspire 5745PG
Alienware M11X R2
Asus EeePC 1215N
K52JC
N53JG
N61Jv (X64Jv)
N73Jn
N82Jv
P52JC
P31JG
U30J
U35J
U35JC
U36JC
U35SD
U43JC
U53JC
X52JC
N55SF
CLEVO W150HNQ
Dell Vostro 3300
Vostro 3400
Vostro 3500
XPS 15 (L502x)
XPS 17 L701x
XPS 17 L702x
Samsung RF511
RF711
Toshiba Satellite M645-SP4132L
  • Si Bumblebee ne marche pas: Rester sous Ubuntu tant que l'on n'a besoin que de la puissance de l'IGP (bureautique, vidéo…) et redémarrer sous Windows (qui lui, gère l'Optimus sans problème) pour tout ce qui demande plus de ressources 3D (jeux…). Eventuellement, regarder la méthode de l'acpi_call pour couper l'alimentation de la carte nvidia.
  • Si on souhaite acquérir un portable: Bien se renseigner sur la présence d'Optimus ou d'autres technologies d'affichage hybride. Le mieux étant de les éviter, pour l'instant ou d'acheter un portable compatible avec Bumblebee. À défaut, mieux vaut prendre une machine pourvue d'un IGP OU d'un GPU, mais pas les deux.
  • Certains ordinateurs proposent dans leur BIOS de désactiver le mode hybride et de n'utiliser que la carte graphique nVidia. Source : LinuxFR (Qui se traduit généralement par un choix entre "Enhanced" et "Compatible", choisissez compatible et installez le pilote normalement, et repassez à "Enhanced" lors d'un éventuel redémarage sous Windows, qui plantera sans cette formalité)

Désactiver la carte graphique nVidia

Attention ce qui suit est encore au stade expérimental mais néanmoins fonctionnel. À vos risques et périls !

Ces explications s'inspirent de ceci.

Si Bumblebee ne marche pas avec votre ordinateur et qu'il vous faut absolument de l'autonomie, une autre solution est de désactiver complètement la carte nVidia. Il faut savoir que cette manipulation ne permet plus d'éteindre Ubuntu directement via votre session. La solution étant de taper dans un terminal :

sudo shutdown now

A noter également que cette manipulation sera à refaire à chaque mise à jour du noyau (kernel).

Avant de commencer, débranchez l'alimentation du portable pour rester sur batterie (vous comprendrez pourquoi) tout en gardant Internet activé.

Installation du module acpi_call

$ git clone http://github.com/mkottman/acpi_call.git
$ cd acpi_call
$ make

Vérification du bon fonctionnement d'acpi_call

grep rate /proc/acpi/battery/BAT0/state

Ce qui doit vous donnez quelque chose comme ceci :

present rate:            19913 mW

Maintenant faites :

sudo insmod acpi_call.ko

puis

sudo echo '\_SB.PCI0.PEG1.GFX0._OFF' > /proc/acpi/call

Vérification de la désactivation de la carte nVidia :

grep rate /proc/acpi/battery/BAT0/state

Si tout fonctionne correctement, vous devriez obtenir un résultat similaire :

present rate:            12558 mW

Normalement, vous devriez constater une diminution de la consommation électrique d'environ 4000 mW.

Ensuite on copie acpi_call dans la liste des modules du kernel (noyau).

sudo cp acpi_call.ko /lib/modules/`uname -r`/kernel/drivers/acpi/

puis

sudo depmod

La manipulation qui suit va permettre de désactiver la GeForce automatiquement au démarrage.

Allez dans :

→ Système → préférences → Application au démarrage

puis faites "ajouter". Comme nom, donnez lui "Anti-Nvidia". Pour la commande, faite "Parcourir.." et sélectionnez le fichier qui s'appelle "test_off.sh". Il se trouve dans le dossier acpi_call qui est dans votre home (dossier personnel).

Ensuite faites "Ajouter" puis "fermer". Voila, la GeForce sera désactivée automatiquement à chaque démarrage.

Ne jamais effacer le dossier acpi_call qui se situe dans votre home (dossier personnel)

Sur mon portable, l'autonomie en lecture vidéo est passée de 2h30 à 3h10.

—–

Contributeurs : eternal404, Le vecteur, cbrunos

  • utilisateurs/archangegabriel/nvidia_optimus.1321573348.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)