Hybrid graphics (Español)

Esta traducción de
Hybrid graphics
fue revisada el
2024-03-08
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
NVIDIA Optimus (Español)
PRIME (Español)
Xorg (Español)
External GPU (Español)
El concepto de gráficos híbridos incluye dos tarjetas gráficas en un mismo ordenador. Los fabricantes de portátiles han desarrollado tecnologías que incluyen dos tarjetas gráficas con capacidades y consumos diferentes en un mismo ordenador. Los gráficos híbridos se han desarrollado para ofrecer un alto rendimiento y ahorrar energía manteniendo inactivo el procesador gráfico dedicado/discreto a menos que se necesite más rendimiento de renderizado 3D que el procesador gráfico integrado.
Existe una gran variedad de tecnologías y cada fabricante ha desarrollado su propia solución a este problema. Esta tecnología está bien soportada en Windows, pero todavía está muy poco desarrollada en las distribuciones Linux. Este artículo intentará explicar un poco cada enfoque y describir algunas soluciones comunitarias a la falta de soporte de los sistemas GNU/Linux por parte de los fabricantes.
Nota
A menos que tu equipo sea antiguo (anterior a 2010), es probable que utilice un modelo de cambio dinámico. Las soluciones gráficas híbridas anteriores implicaban un reinicio del equipo o bien, un reinicio completo de la plataforma gráfica que necesitaba de un cierre de sesi para surtir efecto.
Cambio dinámico
La mayoría de las nuevas tecnologías de gráficos híbridos incluyen dos tarjetas gráficas: la dedicada y la integrada están conectadas a un framebuffer y no hay multiplexor por hardware. La tarjeta integrada está siempre encendida y la tarjeta dedicada se enciende y apaga cuando es necesario ahorrar energía o mejorar el rendimiento. En la mayoría de los casos, no hay forma de utilizar
sólo
la tarjeta dedicada y toda el cambio y renderización se controla por software.
Al iniciar, el kernel de Linux comienza a utilizar un modo de vídeo y a configurar los controladores gráficos de bajo nivel que utilizarán las aplicaciones. La mayoría de las distribuciones Linux utilizan X.org para crear un entorno gráfico. Por último, se lanzan algunos otros programas, primero un gestor de inicio de sesión y luego un gestor de ventanas, y así sucesivamente. Este sistema jerárquico ha sido diseñado para ser utilizado en la mayoría de los casos con una sola tarjeta gráfica.
Nota
Lea
NVIDIA Optimus
y
Bumblebee
para detalles sobre NVIDIA usando gráficos híbridos con el driver propietario de NVIDIA. Lea
PRIME
para básicamente todo lo demás (como GPUs AMD o NVIDIA con el driver
nouveau
).
GPU discreta totalmente apagada
Puede que quieras desactivar el procesador gráfico de alto rendimiento para ahorrar batería.
Usando BIOS/UEFI
Algunos fabricantes de portátiles ofrecen un conmutador en la BIOS o UEFI para desactivar por completo la tarjeta dedicada.
Usando reglas udev
Asegúrese de que se ha eliminado cualquier configuración del gestor de pantalla para NVIDIA.
Ponga en la lista negra los controladores nouveau creando
/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
A continuación, cree
/etc/udev/rules.d/00-remove-nvidia.rules
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA USB Type-C UCSI devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA Audio devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA VGA/3D controller devices
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
Reinicia y ejecuta
lspci
para ver si tu GPU NVIDIA sigue apareciendo en la lista.
Usando bbswitch
Con una GPU NVIDIA, esto se puede hacer de forma más segura utilizando
bbswitch
, que consiste en un paquete del kernel que emite automáticamente las llamadas ACPI correctas para desactivar la GPU discreta cuando no se necesita, o automáticamente en el arranque.
Nota
bbswitch no funciona con el método de gestión de energía de puertos PCI-E desde kernel 4.8. Vea
Bumblebee#Broken power management with kernel 4.8
para más detalles.
Usando acpi_call
En caso contrario, y para GPUs no soportadas por bbswitch, se puede hacer lo mismo manualmente instalando el paquete
acpi_call
.
Sugerencia
Para kernels que no estén en los
Repositorios Oficiales
, el paquete
acpi_call-dkms
es una alternativa. Vea también
DKMS
.
Una vez instalado cargue el módulo del kernel:
# modprobe acpi_call
Con el módulo del kernel cargado, ejecuta el script en
/usr/share/acpi_call/examples/turn_off_gpu.sh
El script recorrerá todos los buses de datos conocidos e intentará apagarlos. Obtendrá una salida similar a la siguiente:
# /usr/share/acpi_call/examples/turn_off_gpu.sh
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
Trying \_SB_.PCI0.OVGA.ATPX: failed
Trying \_SB_.PCI0.OVGA.XTPX: failed
Trying \_SB.PCI0.P0P3.PEGP._OFF: failed
Trying \_SB.PCI0.P0P2.PEGP._OFF: failed
Trying \_SB.PCI0.P0P1.PEGP._OFF: failed
Trying \_SB.PCI0.MXR0.MXM0._OFF: failed
Trying \_SB.PCI0.PEG1.GFX0._OFF: failed
Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG0.PEGP._OFF: works!
Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed
Trying \_SB.PCI0.PEGR.GFX0._OFF: failed
Trying \_SB.PCI0.PEG.VID._OFF: failed
Trying \_SB.PCI0.PEG0.VID._OFF: failed
Trying \_SB.PCI0.P0P2.DGPU._OFF: failed
Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed
Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed
Trying \_SB.PCI0.RP00.VGA._PS3: failed
Trying \_SB.PCI0.RP00.VGA.P3MO: failed
Trying \_SB.PCI0.GFX0.DSM._T_0: failed
Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed
Trying \_SB.PCI0.P0P2.NVID._OFF: failed
Trying \_SB.PCI0.P0P2.VGA.PX02: failed
Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed
Trying \_SB_.PCI0.VGA.PX02: failed
¿Ves el "works"? Esto significa que el script ha encontrado un bus en el que se encuentra tu GPU y ahora ha apagado el chip. Para confirmarlo, el tiempo de batería restante debería haber aumentado.
Sugerencia
Si tiene problemas para hibernar o suspender el sistema después de desactivar la GPU, intente activarla de nuevo enviando la llamada acpi_call correspondiente. Véase también
Archivos de servicios para suspender/reanudar
.
Apagado automático de la GPU
Actualmente, el chip se volverá a encender con el siguiente reinicio. Para evitarlo utilize la
carga automática de módulos
:
/etc/modules-load.d/acpi_call.conf
#Load 'acpi_call.ko' at boot.
acpi_call
Durante el inicio
Para desactivar la GPU en el arranque es posible utilizar
systemd-tmpfiles
.
/etc/tmpfiles.d/acpi_call.conf
w /proc/acpi/call - - - -
\\_SB.PCI0.PEG0.PEGP._OFF
La configuración anterior será cargada al iniciar por systemd. Lo que hace es escribir la señal OFF específica en el fichero
/proc/acpi/call
. Obviamente, sustituya
_SB.PCI0.PEG0.PEGP._OFF
por la que funcione en tu sistema (ten en cuenta que debes "escapar" la barra invertida).
Tras la inicialización del servidor X
En algunos sistemas, apagar la GPU discreta antes de inicializar el servidor X puede colgar el sistema. En estos casos, puede ser mejor desactivar la GPU después de la inicialización del servidor X, lo que es posible con algunos gestores de pantalla. En
LightDM
, por ejemplo, el parámetro de configuración de seat
display-setup-script
puede utilizarse para ejecutar un script como root que deshabilite la GPU.
System76
Algunos portátiles de System76 (como el
Oryx Pro
) tienen su propia y exclusiva opción de gráficos híbridos. Para hacer uso de ella,
instale
system76-power
AUR
,
habilite
system76-power.service
, y ejecute
system76-power graphics hybrid
.
Apagado completo de la GPU discreta
Primero asegúrese de que estás usando el modo de gráficos integrados ejecutando
system76-power graphics integrated
y reiniciando. Una vez en modo integrado, para apagar la tarjeta gráfica discreta ejecute
system76-power graphics power off
. Este comando no es persistente y deberá ejecutarse después de cada arranque.