NVIDIA Optimus (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de NVIDIA Optimus. Date de la dernière traduction: 2022-10-04. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

NVIDIA Optimus est une technologie qui permet d'intégrer un GPU intégré Intel et un GPU dédié NVIDIA dans un ordinateur portable et d'y accéder.

Méthodes disponibles

Il y a plusieurs méthodes disponibles :

  • #Utiliser uniquement la carte Intel - économise de l'énergie, car le GPU NVIDIA sera complètement éteint.
  • #Utiliser uniquement la carte NVIDIA - donne plus de performance que la carte Intel, mais draine plus de batterie (ce qui n'est pas bienvenu pour les appareils mobiles). Cette option utilise le même processus sous-jacent que les options optimus-manager et nvidia-xrun, elle devrait être utilisée pour le dépannage et la vérification du fonctionnement général, avant d'opter pour l'une des approches plus automatisées.
  • Utiliser les deux (utiliser le GPU NVIDIA quand c'est nécessaire et le garder éteint pour économiser de l'énergie) :
    • #Utiliser le déchargement de rendu PRIME - méthode officielle prise en charge par NVIDIA.
    • #Utiliser optimus-manager - choisir la carte graphique avec une seule commande (déconnexion et connexion requises pour prendre effet). Il permet d'obtenir les performances maximales du GPU NVIDIA et de le désactiver s'il n'est pas utilisé. Depuis la version 1.4, la combinaison AMD+NVIDIA est également prise en charge.
    • #Utiliser nvidia-xrun - exécute une session X séparée sur différents TTY avec des cartes NVIDIA. Il atteint les performances maximales du GPU NVIDIA et le désactive s'il n'est pas utilisé.
    • #Utiliser Bumblebee - fournit des fonctionnalités similaires à celles de Windows en permettant de faire tourner certaines applications avec des cartes NVIDIA tout en utilisant des cartes Intel pour tout le reste. A des problèmes de performance significatifs.
    • #Utiliser nouveau - offre de moins bonnes performances (par rapport au pilote propriétaire NVIDIA) et peut causer des problèmes avec la mise en veille et la mise en veille prolongée. Ne fonctionne pas avec les derniers GPU NVIDIA.
    • #Utiliser EnvyControl - Similaire à optimus-manager mais ne nécessite pas de configuration extensive ou d'avoir un daemon tournant en arrière-plan ainsi que d'avoir à installer une version patchée de GDM si vous êtes un utilisateur de GNOME.
    • #Utiliser NVidia-eXec - Similaire à Bumblebee, mais sans l'impact sur les performances. Il fonctionne à la fois sur Xorg et Wayland. Ce paquet est expérimental, et est actuellement testé uniquement sous GNOME/GDM.
    • #Utiliser nvidia-switch - Similaire à nvidia-xrun, mais sans avoir besoin de changer de TTY, les changements seront faites par les ouvertures et fermetures de session dans votre gestionnaire d'affichage. Ce paquet est en cours de test sur un système basé sur Debian, mais, comme nvidia-xrun, il doit fonctionner sur tous les systèmes Linux.
Note: Toutes ces options sont mutuellement exclusives, si vous testez une approche et décidez d'en utiliser une autre, vous devez vous assurer de rétablir tous les changements de configuration effectués en suivant une approche avant d'essayer une autre méthode, sinon des conflits de fichiers et des comportements indéfinis peuvent survenir.

Utiliser uniquement la carte Intel

Si vous ne souhaitez utiliser qu'un seul GPU sans changer de carte, vérifiez les options du BIOS de votre système. Il devrait y avoir une option pour désactiver l'une des cartes. Certains ordinateurs portables ne permettent de désactiver que la carte dédiées, ou vice-versa, mais cela vaut la peine de vérifier si vous ne prévoyez d'utiliser qu'une seule des cartes.

Si votre BIOS ne permet pas de désactiver la carte graphique Nvidia, vous pouvez la désactiver à partir du noyau Linux lui-même. Consultez Hybrid graphics#Fully power down discrete GPU.

Utiliser CUDA sans changer de fournisseur de rendu

Vous pouvez utiliser CUDA sans basculer le rendu vers la carte graphique Nvidia. Tout ce que vous devez faire est de vous assurer que la carte Nvidia est sous tension avant de lancer une application CUDA, consultez Hybrid graphics#Fully power down discrete GPU pour plus de détails.

Désormais, lorsque vous lancerez une application CUDA, celle-ci chargera automatiquement tous les modules du noyau nécessaires. Avant d'éteindre la carte Nvidia après avoir utilisé CUDA, les modules du noyau nvidia doivent d'abord être déchargés :

# rmmod nvidia_uvm
# rmmod nvidia

Utiliser uniquement la carte NVIDIA

Le pilote propriétaire NVIDIA peut être configuré pour être le principal fournisseur de rendu. Il présente également des problèmes notables de lissage d'écran, sauf si vous activez la synchronisation principale en activant le paramètre NVIDIA (Français)#DRM kernel mode setting, consultez [1] pour plus d'informations. Il permet d'utiliser le GPU dédié et présente (à partir de janvier 2017) un avantage marqué en termes de performances par rapport au pilote nouveau.

Tout d'abord, installez le pilote NVIDIA et xorg-xrandr. Ensuite, configurez /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf dont les options seront combinées avec le paquet fourni /usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf pour assurer la compatibilité avec cette configuration.

Note: Sur certaines configurations, cette configuration interrompt la détection automatique des valeurs de l'affichage par le pilote nvidia via le fichier EDID. Pour contourner ce problème, consultez #Résolution, balayage d'écran incorrect. Erreurs EDID dans Xorg.log.
/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
Section "OutputClass"
    Identifier "intel"
    MatchDriver "i915"
    Driver "modesetting"
EndSection

Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "PrimaryGPU" "yes"
    ModulePath "/usr/lib/nvidia/xorg"
    ModulePath "/usr/lib/xorg/modules"
EndSection

Ensuite, ajoutez les deux lignes suivantes au début de votre ~/.xinitrc :

~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

Maintenant, redémarrez pour charger les pilotes, et X devrait démarrer.

Si le dpi de votre affichage n'est pas correct, ajoutez la ligne suivante :

xrandr --dpi 96

Si vous obtenez un écran noir au démarrage de X, vérifiez qu'il n'y a pas d'esperluettes après les deux commandes xrandr dans ~/.xinitrc. S'il y a des esperluettes, il semble que le gestionnaire de fenêtres puisse s'exécuter avant que les commandes xrandr ne finissent de s'exécuter, ce qui conduit à un écran noir.

Gestionnaires d'affichage

Si vous utilisez un gestionnaire d'affichage, vous devrez créer ou modifier un script de configuration d'affichage pour votre gestionnaire d'affichage au lieu d'utiliser ~/.xinitrc.

LightDM

Pour le gestionnaire d'affichage LightDM :

/etc/lightdm/display_setup.sh
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

Rendez le script exécutable.

Configurez maintenant lightdm pour qu'il exécute le script en éditant la section [Seat:*] dans /etc/lightdm/lightdm.conf :

/etc/lightdm/lightdm.conf
[Seat:*]
display-setup-script=/etc/lightdm/display_setup.sh

Maintenant, redémarrez et votre gestionnaire d'affichage devrait démarrer.

SDDM

Pour le gestionnaire d'affichage SDDM (SDDM est le DM par défaut pour KDE) :

/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

GDM

Pour le gestionnaire d'affichage GDM, créez deux nouveaux fichiers .desktop :

/usr/share/gdm/greeter/autostart/optimus.desktop
/etc/xdg/autostart/optimus.desktop
[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer

Assurez-vous que GDM utilise X comme serveur par défaut.

Vérification de la 3D

Vous pouvez vérifier si la carte NVIDIA est utilisée en installant mesa-utils et en exécutant

$ glxinfo | grep NVIDIA

Informations complémentaires

Pour plus d'informations, consultez la page officielle de NVIDIA sur le sujet [2].

Basculer entre les cartes graphiques

Utiliser le déchargement de rendu PRIME

Il s'agit de la méthode officielle de NVIDIA pour prendre en charge le choix de cartes graphiques.

Consultez PRIME#PRIME render offload pour plus de détails.

Utiliser nouveau

Consultez PRIME pour choisir votre carte graphique et nouveau pour le pilote NVIDIA open-source.

Utiliser Bumblebee

Consultez Bumblebee.

Utiliser nvidia-xrun

Consultez nvidia-xrun.

Utiliser optimus-manager

Consultez la documentation en amont d'Optimus-manager. Elle couvre à la fois l'installation et la configuration avec Arch Linux.

Utiliser EnvyControl

Consultez la documentation en amont d'EnvyControl. Elle couvre à la fois l'installation et les instructions d'utilisation.

Utiliser NVidia-eXec

Consultez la documentation en amont de NVidia-eXec. Elle couvre à la fois les instructions d'installation et d'utilisation.

Utiliser nvidia-switch

Voir la documentation en amont de nvidia-switch. Elle couvre à la fois les instructions d'installation et d'utilisation.

Dépannage

Tearing/perte de VSync

Activez le DRM kernel mode setting, qui activera à son tour la synchronisation PRIME et corrigera le tearing.

Vous pouvez lire le fil de discussion officiel du forum [3] pour plus de détails.

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

Ajouter rcutree.rcu_idle_gp_delay=1 aux paramètres du noyau. Le sujet original se trouve dans [4] et [5].

Résolution, balayage d'écran incorrect. Erreurs EDID dans Xorg.log

Ceci est dû au fait que le pilote NVIDIA ne détecte pas l'EDID de l'écran. Vous devez spécifier manuellement le chemin d'accès à un fichier EDID ou fournir les mêmes informations d'une manière similaire.

Pour fournir le chemin d'accès au fichier EDID, éditez la section Device de la carte NVIDIA dans Xorg.conf, en ajoutant ces lignes et en modifiant certaines parties pour refléter votre propre système :

/etc/X11/xorg.conf
Section "Device" (Périphérique)
       	Option "ConnectedMonitor" "CRT-0" (moniteur connecté)
       	Option "CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
	Option "IgnoreEDID" "false" (ignorer l'identifiant)
	Option "UseEDID" "true" (vrai)
EndSection

Si Xorg ne démarre pas, essayez de remplacer toutes les références de CRT par DFB. card0 est l'identifiant de la carte Intel à laquelle l'écran est connecté via LVDS. Le binaire edid se trouve dans ce répertoire. Si l'arrangement matériel est différent, la valeur de CustomEDID peut varier mais ceci doit encore être confirmé. Le chemin commencera dans tous les cas par /sys/class/drm.

Vous pouvez également générer votre edid avec des outils comme read-edid et faire pointer le pilote vers ce fichier. Même les modélisations peuvent être utilisées, mais assurez-vous alors de modifier UseEDID et IgnoreEDID.

Mauvaise résolution sans erreur EDID

En utilisant nvidia-xconfig, des informations incorrectes peuvent être générées dans xorg.conf et en particulier des taux de rafraîchissement de moniteur erronés qui restreignent les résolutions possibles. Essayez de commenter les lignes HorizSync/VertRefresh. Si cela vous aide, vous pouvez probablement aussi supprimer tout ce qui n'est pas mentionné dans cet article.

Problème de verrouillage (lspci hangs)

Symptômes : lspci se bloque, la suspension du système échoue, l'arrêt se bloque, optirun se bloque.

Concerne : les ordinateurs portables récents avec GTX 965M ou similaire lorsque bbswitch (par exemple via Bumblebee) ou nouveau est utilisé.

Lorsque la ressource d'alimentation dGPU est activée, elle peut ne pas le faire et se bloquer dans le code ACPI (kernel bug 156341).

Lorsque vous utilisez nouveau, la désactivation de la gestion de l'alimentation au moment de l'exécution l'empêche de changer l'état de l'alimentation, évitant ainsi ce problème. Pour désactiver la gestion de l'alimentation au moment de l'exécution, ajoutez nouveau.runpm=0 aux paramètres du noyau.

Pour les solutions de contournement spécifiques aux modèles connus, consultez this issue. Dans d'autres cas, vous pouvez essayer de démarrer avec acpi_osi="!Windows 2015" ou acpi_osi= ! acpi_osi="Windows 2009" ajoutés à vos paramètres du noyau. (Pensez à signaler votre ordinateur portable dans ce rapport de bug).

Aucun écran trouvé sur un ordinateur portable/NVIDIA Optimus

Vérifiez si le résultat ressemble à :

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)

Les pilotes NVIDIA prennent en charge Optimus depuis la version 319.12 Beta [6] avec les noyaux 3.9 et plus.

Une autre solution consiste à installer le pilote Intel pour gérer les écrans, puis si vous voulez des logiciels 3D, vous devez les faire passer par Bumblebee pour leur dire d'utiliser la carte NVIDIA.

Gels aléatoires "(EE) NVIDIA(GPU-0) : WAIT"

En utilisant les pilotes propriétaires sur une configuration avec une carte AMD intégrée et avec la carte NVIDIA dédiée comme seule carte utilisée, les utilisateurs signalent des blocages pouvant durer jusqu'à 10 secondes, avec les erreurs suivantes dans les journaux Xorg :

[219.796] (EE) NVIDIA(GPU-0) : WAIT (2, 8, 0x8000, 0x0002e1c4, 0x0002e1cc)
[226.796] (EE) NVIDIA(GPU-0) : WAIT (1, 8, 0x8000, 0x0002e1c4, 0x0002e1cc)

Bien que la cause du problème ne soit pas encore identifiée, elle semble liée à un conflit dans la façon dont les cartes intégrées et dédiées interagissent avec Xorg.

La solution consiste à utiliser des graphiques interchangeables, voir PRIME#PRIME render offload pour plus de détails.