NVIDIA Optimus (Español)

From ArchWiki

Este artículo o sección necesita ser traducido.

Notas: Partial translation and untranslated wiki pages (Discusión en Talk:NVIDIA Optimus (Español)#)
Esta traducción de NVIDIA Optimus fue revisada el 2024-02-02. Si existen cambios puede actualizarla o avisar al equipo de traducción.

NVIDIA Optimus es una tecnología que permite que una GPU integrada y una GPU NVIDIA dedicada trabajen en conjunto en un portátil.

Métodos disponibles

Hay diferentes métodos disponibles:

  • #Usar solo la grafica integrada - Ahorra energía, porque la grafica NVIDIA estará completamente apagada.
  • #Usar solo la grafica NVIDIA - Ofrece mas rendimiento que la grafica integrada pero consume mas batería (que no es conveniente para dispositivos móviles). Esto utiliza el mismo metodo de optimus-manager y nvidia-xrun , deberia ser utilizado para para resolución de problemas y verificación de la funcionalidad general, antes de optar por uno de los enfoques más automatizados.
  • Utilizar ambas (usar la GPU NVIDIA cuando sea necesario y mantenerla apagada para ahorrar energía):
    • #Usando PRIME render offload - Método oficial soportado por NVIDIA (Recomendado)
    • #Usando optimus-manager - Cambia graficas con solo un comando (es necesario cerrar sesión e iniciar sesión para que surta efecto). Alcanza el máximo rendimiento de la GPU NVIDIA y la apaga si no está en uso. Desde la versión 1.4 también admite la combinación AMD+NVIDIA.
    • #Usando nvidia-xrun - Ejecuta sesiones X separadas en diferentes TTY con gráficos NVIDIA. Alcanza el máximo rendimiento de la GPU NVIDIA y la apaga si no está en uso.
    • #Usando Bumblebee - Proporciona una funcionalidad similar a Windows al permitir ejecutar aplicaciones seleccionadas con gráficos NVIDIA y utilizar gráficos Intel para todo lo demás. Presenta importantes problemas de rendimiento. No ha sido actualizado desde el 26 de Abril de 2023
    • #Usando switcheroo-control - Similar a Bumblebee, pero específicamente para usuarios de GNOME. Permite que las aplicaciones especifiquen si prefieren la GPU dedicada en su archivo de entrada de escritorio y permite ejecutar manualmente cualquier aplicación en la GPU NVIDIA desde el menú contextual.
    • #Usando nouveau - ofrece un rendimiento inferior (en comparación con el controlador propietario de NVIDIA) y puede causar problemas con la suspensión y la hibernación. No funciona con las últimas GPUs de NVIDIA.
    • #Usando EnvyControl - Similar a optimus-manager pero no requiere una extensa configuración o tener un daemon ejecutándose en segundo plano así como tener que instalar una versión parcheada de GDM si eres usuario de GNOME.
    • #Usando NVidia-eXec - Similar a Bumblebee, pero sin el impacto en el rendimiento. Funciona tanto en Xorg como en Wayland. Este paquete es experimental, y actualmente está siendo probado sólo bajo GNOME/GDM.
    • #Usando nvidia-switch - Similar a nvidia-xrun, pero sin necesidad de cambiar el TTY, los cambios se harán por login y logouts en tu gestor de pantalla. Este paquete está siendo probado en un sistema basado en Debian, pero, al igual que nvidia-xrun, debe funcionar en todos los sistemas Linux.
Nota: Todas estas opciones son mutuamente excluyentes, si pruebas un método y te decides por otro, debes asegurarte de revertir cualquier cambio de configuración realizado por el método que elegiste antes de intentar otro método, de lo contrario pueden surgir conflictos de archivos y comportamientos indefinidos.

Usar solo la grafica integrada

Si sólo te interesa usar una GPU determinada sin tener que cambiar, comprueba las opciones de la BIOS de tu sistema. Debería haber una opción para desactivar una de las tarjetas. Algunos portátiles sólo permiten desactivar la tarjeta discreta, o viceversa, pero merece la pena comprobarlo si sólo piensas usar una de las tarjetas.

Si tu BIOS no permite desactivar los gráficos NVIDIA, puedes desactivarlos desde el propio kernel de Linux. Ve Hybrid graphics (Español)#Fully power down discrete GPU.

Utilizar CUDA sin cambiar el proveedor de renderizado

Puedes usar CUDA sin cambiar el renderizado a la gráfica NVIDIA. Todo lo que necesitas hacer es asegurarte de que la tarjeta NVIDIA está encendida antes de iniciar una aplicación CUDA, ve Hybrid graphics (Español)#Fully power down discrete GPU para más detalles.

Ahora, cuando inicies una aplicación CUDA, cargará automáticamente todos los módulos del kernel necesarios. Antes de apagar la tarjeta Nvidia después de usar CUDA, hay que descargar primero los módulos del kernel nvidia:

# rmmod nvidia_uvm
# rmmod nvidia

Usar solo la grafica NVIDIA

El driver propietario de NVIDIA puede configurarse para que sea el principal proveedor de renderizado. También tiene notables problemas de screen-tearing a menos que habilites prime sync activando NVIDIA (Español)#DRM kernel mode setting, ve [1] para más información. Permite el uso de la GPU discreta y tiene (a partir de Enero 2017) una marcada ventaja en el rendimiento sobre el controlador Nouveau.

Primero, instale el driver NVIDIA (Español) y xorg-xrandr. A continuación, configura /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf cuyas opciones se combinarán con el paquete proporcionado /usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf para proporcionar compatibilidad con esta configuración.

Nota: En algunas configuraciones esta configuración rompe la detección automática de los valores de la pantalla por el controlador nvidia a través del archivo EDID. Como solución consulte #Resolución, escaneo de pantalla errónea. Errores EDID en 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

A continuación, añade las siguientes dos líneas al principio de ~/.xinitrc:

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

Ahora reinicia para cargar los drivers, y X debería iniciar.

Si los dpi de su pantalla no son correctos añade la siguiente línea dentro de ~/.xinitrc:

xrandr --dpi 96

Si obtiene una pantalla negra al iniciar X, asegurate de que no haya ampersands (símbolo &) después de los dos comandos xrandr dentro de ~/.xinitrc. Si hay ampersands, parece que el gestor de ventanas puede ejecutarse antes de que los comandos xrandr terminen de ejecutarse, provocando una pantalla negra.

Gestores de pantalla

Si estás utilizando un Gestor de pantalla entonces necesitarás crear o editar un script de configuración de pantalla para tu gestor de pantalla en lugar de utilizar ~/.xinitrc.

LightDM

Para el gestor de pantalla LightDM (Español):

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

Hace el script ejecutable.

Ahora configura lightdm para ejecutar el script editando la sección [Seat:*] en /etc/lightdm/lightdm.conf:

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

Ahora reinicia y tu gestor de pantalla debería iniciarse.

SDDM

Para el gestor de pantalla SDDM (Español) (SDDM es el gestor de pantalla por defecto para KDE (Español)):

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

GDM

Para el gestor de pantalla GDM (Español) cree dos nuevos archivos .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

Asegúrese de que GDM utilize X como backend predeterminado.

Comprobar 3D

Puedes comprobar si se están utilizando los gráficos NVIDIA instalando mesa-utils y ejecutando

$ glxinfo | grep NVIDIA

Más Información

Para obtener más información, consulta la página oficial de NVIDIA sobre el tema [2].

Utilizar gráficos intercambiables

Este artículo o sección necesita ser traducido.

Notas: Many wiki pages are just available in English (Discusión en Talk:NVIDIA Optimus (Español)#)

Usando PRIME render offload

Este es el método recomendado y oficial de NVIDIA para soportar gráficos intercambiables.

Vea PRIME (Español)#PRIME render offload para más detalles.

Usando nouveau

Vea PRIME (Español) para graficos intercambiables y Nouveau (Español) para el driver de codigo abierto de NVIDIA.

Usando Bumblebee

Vea Bumblebee (Español).

Usando switcheroo-control

Vea PRIME (Español)#Integración con GNOME.

Usando nvidia-xrun

Vea nvidia-xrun (Español).

Usando optimus-manager

Vea la documentación de upstream de Optimus-manager. Cubre tanto la instalación como la configuración en sistemas Arch Linux.

Usando EnvyControl

Vea la documentación de upstream de EnvyControl. Cubre tanto la instalación como las instrucciones de uso.

Usando NVidia-eXec

Vea la documentación de upstream de NVidia-eXec. Cubre tanto la instalación como las instrucciones de uso.

Usando nvidia-switch

Vea la documentación de upstream de nvidia-switch. Cubre tanto la instalación como las instrucciones de uso.

Solución de problemas

Tearing o VSync roto

Activa DRM kernel mode setting, que a su vez activará la sincronización PRIME y solucionará el tearing.

Puedes leer el hilo oficial "PRIME and PRIME Synchronization" para más detalles.

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

Añade rcutree.rcu_idle_gp_delay=1 a los parámetros del kernel. El articulo original se puede encontrar en [3] y [4].

Resolución, escaneo de pantalla errónea. Errores EDID en Xorg.log

Esto se debe a que el controlador NVIDIA no detecta el EDID de la pantalla. Es necesario especificar manualmente la ruta a un archivo EDID o proporcionar la misma información de forma similar.

Para proporcionar la ruta al archivo EDID edita la Sección de "Devices" para la tarjeta NVIDIA en Xorg.conf, añadiendo estas líneas y cambiando partes para reflejar tu propio sistema:

/etc/X11/xorg.conf
Section "Device"
       	Option		"ConnectedMonitor" "CRT-0"
       	Option		"CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
	Option		"IgnoreEDID" "false"
	Option		"UseEDID" "true"
EndSection

Si Xorg no inicia prueba a cambiar todas las referencias de CRT a DFB. card0 es el identificador de la tarjeta Intel a la que está conectada la pantalla vía LVDS. El binario EDID está en este directorio. Si la disposición del hardware es diferente, el valor de CustomEDID puede variar, pero todavía hay que confirmarlo. La ruta comenzará en cualquier caso con /sys/class/drm.

Alternatively you can generate your EDID with tools like read-edid and point the driver to this file. Even modelines can be used, but then be sure to change UseEDID and IgnoreEDID.

Alternativamente puedes generar tu EDID con herramientas como read-edid y apuntar el driver a este fichero. Incluso se pueden utilizar "modelines", pero entonces asegúrese de cambiar UseEDID e IgnoreEDID.

Resolución incorrecta sin errores EDID

Usando nvidia-xconfig, puede generarse información incorrecta en xorg.conf y en particular frecuencias de refresco de monitor erróneas que restringen las resoluciones posibles. Intenta comentar las líneas HorizSync/VertRefresh. Si esto ayuda, probablemente también puedas eliminar todo lo demás que no se menciona en este artículo.

Problema de bloqueo (lspci se atasca)

Síntomas: lspci se atasca, falla la suspensión del sistema, se atasca el apagado, se atasca optirun.

Se aplica a: portátiles nuevos con GTX 965M o similar cuando se utiliza bbswitch (por ejemplo, a través de Bumblebee) o Nouveau.

Cuando se enciende el recurso de alimentación de la dGPU, puede fallar y atascarse en el código ACPI (bug de kernel 156341).

Cuando se utiliza nouveau, desactivar la gestión de energía en runtime impide que cambie el estado de energía, evitando así este problema. Para desactivar la gestión de energía en runtime, añada nouveau.runpm=0 a los parámetros del kernel.

Para conocer las soluciones específicas de cada modelo, consulte esta incidencia. En otros casos, puede intentar arrancar con acpi_osi="!Windows 2015" o acpi_osi=! acpi_osi="Windows 2009" añadidos a sus Kernel_parameters (Español). (Considere la posibilidad de informar de su portátil en esa incidencia).

No se han encontrado pantallas en un portátil/NVIDIA Optimus

Compruebe si la salida es algo similar a

$ 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)

Los controladores NVIDIA ahora ofrecen soporte Optimus desde 319.12 Beta [5] con incluyendo kernels superiores a la versión 3.9.

Otra solución es instalar el controlador Intel (Español) para manejar las pantallas, luego si quieres software 3D debes pasarlos por Bumblebee (Español) para decirles que usen la tarjeta NVIDIA.

Congelaciones aleatorias "(EE) NVIDIA(GPU-0): WAIT"

Al utilizar los controladores propietarios en una configuración con una tarjeta AMD integrada y con la tarjeta NVIDIA dedicada configurada como la única en uso, los usuarios informan de bloqueos de hasta 10 segundos, con los siguientes errores en los registros de 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)

Aunque esto no es causa de raíz todavía, parece estar relacionado con un conflicto en cómo las tarjetas integradas y dedicadas interactúan con Xorg.

La solución es usar gráficos intercambiables, ver PRIME (Español)#PRIME render offload para más detalles.

"No Devices detected" con optimus-manager

Hay casos en los que lspci mostrará el Dominio PCI como primera columna de salida, haciendo que los archivos generados por optimus-manager se rompan al intentar mapear BusID en múltiples modelos de portátiles.

Si te enfrentas a una pantalla negra que nunca termina de cargar tu GUI, GUI cargando parcialmente con artefactos de consola o Xorg fallando con (EE) - No Devices detected, la solución y los informes de errores están disponibles en el upstream de github.