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 et mini-PC. Elle a pour but de trouver le juste équilibre entre autonomie de la batterie et performances graphiques.

Est-ce que votre ordinateur est équipé d'Optimus ? Question importante, car si ce n'est pas le cas il n'est a priori pas utile de lire cette page.

Tout d'abord, il faut savoir que cela ne concerne que les ordinateurs portables et mini-PC.
Si votre portable est équipé d'un processeur Intel Core iX, que ce soit des générations Arrandale (Core i7 6xx, Core i5 xxx, Core i3 xxx), Sandy Bridge (Core iX 2xxx) ou Ivy Bridge (Core iX 3xxx), ainsi que d'une carte graphique nVidia des générations 200, 300, 400, 500 ou 600, alors vous êtes très certainement concerné. Attention, les Core i7 QM ne sont généralement pas concernés.

De plus, les portables pré-Optimus (Asus ULx0Vt notamment) sont également concernés.

De manière générale, pour savoir facilement si vous êtes concerné, ouvrez un terminal et entrez cette commande:

lspci -vnn | grep '\''[030[02]\]'

S'il y a deux résultats, un portant la mention Intel, l'autre la mention nVidia, alors vous êtes concernés. S'il n'y a qu'un seul résultat, ce n'est a priori pas le cas. Cependant, certains modèles disposent d'une option dans le BIOS permettant de désactiver l'une des deux puces graphiques ne laissant plus que l'autre apparaître. À vous de voir si cette situation vous convient, sachant qu'alors tout se déroule comme sur un système non-hybride.

Dans tous les autres cas, ou en cas de doute, postez le résultat dans ce topic, une réponse vous sera apportée peu de temps après.

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éo, 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.

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.

Quelle carte est actuellement active sur mon PC ?

Une solution est d'utiliser l'outil glxinfo :

  glxinfo | grep "OpenGL renderer"
  

Quel pilote/driver est actuellement active sur mon PC ?

Une solution est d'utiliser l'outil lshw et filtrer les resultats qui nous interesse :

  lshw -c video | grep -v ressources: | grep -v horloge: | grep -v bits: | grep -v bus: | grep -v riel: 
  

Analyse

Dans la pratique, si cela est fonctionnel sous Windows, le support de cette technologie sous Linux par défaut est plutôt catastrophique. Des solutions commencent néanmoins à émerger, elles sont présentées dans le troisième paragraphe de cette partie. Néanmoins, s'il s'agit de se renseigner pour l'achat d'un ordinateur portable, alors cette technologie est à éviter si l'on prévoit de se servir principalement de Linux.

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. Un autre projet moins lointain est PRIME, qui devrait apporter entre autre le support de cette technologie dans X.org.

Ensuite, il ne reste plus que les deux problèmes suivants, qui sont eux présents pour tous en revanche, mais pour lesquels les solutions présentées ci-après existent :

  • la carte graphique nVidia (GPU) n'est pas utilisable par défaut, 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, elle reste alimentée en permanence (et consommant plus que ce que devrait consommer cet état passif), diminuant l'autonomie tout en restant inutilisable.

Solutions existantes : PRIME Render Offload

La version 450 du pilote fournit directement un outil appelé PRIME Render Offload qui permet de gerer Optimus. À partir d'une configuration neuve (aucun fichier xorg modifié, etc…) installer les derniers pilotes nvidia (>=450) via le gestionnaire de pilotes propriétaires ou sous Ubuntu 20.04 depuis le dépôt suivant:

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install nvidia-driver-450
$ shutdown -r now

Vous pourrez ensuite forcer l'utilisation du GPU Nvidia en précédant la commande à exécuter de

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia COMMANDE_A_EXECUTER

La variable d'environnement "_ _NV_PRIME_RENDER_OFFLOAD=1" est destinée à à Vulkan ou EGL.
La variable d'environnement "_ _GLX_VENDOR_LIBRARY_NAME=nvidia" est destinée à GLX.

Pour tester si cela fonctionne, essayer la commande ci-dessous qui devrait vous renvoyer la marque et le modèle de votre carte graphique :

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)"
  OpenGL vendor string: NVIDIA Corporation
  OpenGL renderer string: GeForce GTX 1660 Ti/PCIe/SSE2
  OpenGL version string: 4.6.0 NVIDIA 450.66

Sans les commandes Prime Render, on obtiendrait le processeur graphique intégré comme réponse

$ glxinfo | egrep "(OpenGL vendor|OpenGL renderer|OpenGL version)"
$ OpenGL vendor string: X.Org
$ OpenGL renderer string: AMD RENOIR (DRM 3.38.0, 5.8.8-050808-generic, LLVM 10.0.0)
$ OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.0.8

Apparemment pour le moment l'utilisation du processeur Nvidia ne peut pas être automatisé (contrairement à windows). Pour utiliser votre carte nvidia, il faut lancer la commande plus haut, avec le nom de l'application de votre choix, par exemple :

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia supertuxkart

Il est possible d'installer un applet propre à mate, il s'agit de mate-optimus.

Si cela ne fonctionne pas, vous pourrez trouver plus d'informations ici :

Points Divers

Voici quelques points qu'il convient de signaler :

  • Certains ordinateurs proposent dans leur BIOS de désactiver le mode hybride et de n'utiliser que la carte graphique nVidia et/ou Intel. Le cas échéant, l'utilisation d'un des projets présenté ci-dessus n'est pas nécessaire. Dans le cas où seule la carte Intel est active, tout est automatique, dans le cas où seule la carte nVidia est active, il suffit de procéder à l'installation du pilote nvidia comme on le ferait pour tout autre machine.

Contributeurs : archangegabriel

  • nvidia_optimus.txt
  • Dernière modification: Le 20/03/2023, 13:21
  • par 81.247.240.195
  • Actuellement bloqué par: 110.249.201.49,10.42.2.254