6 agosto, 2020

Pongara

Simple. Fácil.

Guía: Cómo sacar el máximo provecho a una vieja gráfica de AMD forzando el driver AMDGPU

AMD Radeon

AMDGPU ha sido toda una revolución para GNU/Linux, porque no solo ha supuesto un giro de 180 grados en la política de AMD frente al mediocre soporte que ofrecía hasta no hace mucho, sino que también ha abierto la puerta a que GNU/Linux pueda, con drivers libres, tener una potencia gráfica equiparable a la de Windows a la hora de ejecutar videojuegos.

Sí, AMDGPU ha iniciado una revolución que ha permitido a la marca de Sunnyvale competir de verdad con su archirrival dentro del segmento, NVIDIA, pero en un terreno que hasta hace pocos años le estaba totalmente negado, el del sistema operativo GNU/Linux, donde NVIDIA ha dominado a placer durante más de década y media. Además de un soporte ofrecido mediante drivers libres (aunque apoyados en al menos un firmware privativo), AMD tiene la ventaja de respetar los estándares establecidos para el stack gráfico de GNU/Linux, abriendo así la puerta a usar Wayland con buenos resultados.

Aunque se suele recomendar una gráfica reciente para hacer un buen uso de AMDGPU, esto no quiere decir que su desarrollo para familias más antiguas se haya detenido, lo que da vida a la esperanza de tenerlo algún día funcionando por defecto en esos modelos de gráficas que también soportan Radeon. De hecho, en Phoronix han recogido que el soporte de AMDGPU para la familia de gráficas Southern Islands sigue mejorando, si bien todo apunta a que en un futuro cercano Radeon seguirá siendo el driver predeterminado.

Según la wiki de Gentoo, AMDGPU “es capaz de manejar las nuevas tarjetas gráficas AMD / ATI Radeon basadas en GCN1.0 +, es decir, los chipsets Southern Islands, Sea Islands, Volcanic Islands y Arctic Islands”. Sin embargo, algunas de esas familias de chipsets también soportan el viejo driver Radeon, que además puede encontrarse habilitado por defecto frente a AMDGPU. Para averiguarlo se puede ejecutar el siguiente comando, que debería de mostrar algo parecido a lo que aparece en la imagen (que está editada porque no dispongo de ningún hardware con las características mencionadas):

lsmod | grep "kms|drm"

Gráfica de ATI/AMD que soporta los drivers AMDGPU y Radeon

En caso de aparecer las palabras ‘radeon’ y ‘amdgpu’ significa que la gráfica AMD utilizada (dedicada o la integrada de una APU) soporta ambos drivers, pero solo uno está activo. Para averiguarlo hay que ejecutar lo siguiente:

lspci -k | grep -EA3 'VGA|3D|Display'

Que puede arrojar las siguientes dos frases:

Kernel driver in use: radeon
Kernel modules: radeon, amdgpu

Como se ve, el driver en uso (driver in use) es Radeon, mientras que entre los módulos del kernel están Radeon (el driver en uso) y AMDGPU. Si el usuario ve la frase “Kernel driver in use: amdgpu” no tiene que hacer nada porque ya está usando el driver de última generación, pero aquellos que hayan descubierto que usan Radeon por defecto y que a la vez tienen soporte de AMDGPU pueden seguir los pasos del siguiente apartado para forzar la activación del driver más reciente.

Avisamos que esto podría llevar al mal funcionamiento de la gráfica con posibles consecuencias catastróficas, así que desde MuyLinux no nos hacemos responsables de ningún percance o daño que pueda ocasionar la realización de este tutorial.

Cómo forzar la activación de AMDGPU en gráficas AMD en las que el driver Radeon está habilitado por defecto

Y aquí llegamos a la parte complicada del asunto. Forzar la activación de AMDGPU requiere de modificar un fichero del cargador de arranque GRUB, además de posiblemente poner el driver Radeon en lista negra para garantizar que no se inicie.

El primer paso para forzar la activación de AMDGPU consiste en abrir el fichero “/etc/default/grub”, que debe ser abierto con permisos de administrador con el editor de texto que el usuario quiera, incluso algunos GTK como Gedit (‘gedit’ en la línea de comandos) y Geany (‘geany’ en la línea de comandos). En nuestro caso, tiraremos de Nano:

sudo nano /etc/default/grub

Después hay que localizar la siguiente línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

La línea mencionada tiene que ser copiada y pegada justo debajo para luego poner una almohadilla delante de la original. La almohadilla convierte la línea en un comentario que sirve como respaldo por si las cosas no salen bien. De esta manera el usuario solo tiene que comentar (poner una almohadilla delante) la línea modificada, descomentar (quitar la almohadilla) la línea original y volver a actualizar GRUB.

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Luego, en la línea sin comentar, hay que introducir lo siguiente para habilitar AMDGPU e inhabilitar Radeon. Ponemos las dos líneas, la original comentada y la modificada sin comentar, para así reducir la confusión:

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash radeon.cik_support=0 amdgpu.cik_support=1 radeon.si_support=0 amdgpu.si_support=1"

Tras introducir los cambios, solo hay que cerrar el fichero guardando los cambios y actualizar GRUB:

sudo update-grub

En algunas distribuciones la actualización de GRUB puede que se haga con este comando:

sudo update-grub2

Radeon ya tendría que estar inhabilitado para dar paso a AMDGPU, pero siempre se puede reforzar la configuración poniendo el driver más veterano en lista negra. Para ello abrimos el siguiente fichero con permisos de administrador:

sudo nano /etc/modprobe.d/blacklist-radeon.conf

Y se introduce en él el siguiente texto. Sobra decir que antes de salir del editor de texto hay que guardar los cambios (o guardar los cambios en el mismo proceso de cierre):

blacklist radeon

Si se ha conseguido realizar todos los pasos con éxito, solo queda reiniciar el ordenador para empezar a usar el driver AMDGPU en detrimento de Radeon.

Vulkan y videojuegos, la gran ventaja de usar AMDGPU frente a Radeon

La gran ventaja de usar AMDGPU reside en poder exprimir RADV (driver de Vulkan para AMD incluido en Mesa y el probado para los juegos) y AMDVLK (driver de Vulkan oficial y Open Source de AMD, aunque la mayoría de las distribuciones no lo incluyen en sus repositorios), abriendo así la puerta a ejecutar juegos de Windows mediante DXVK y otros traductores.

Sin embargo, también hay que tener en cuenta la potencia de la propia GPU, y viendo que estamos hablando de modelos antiguos, posiblemente la experiencia quede limitada a juegos DirectX 9 y DirectX 11 poco exigentes, que funcionen muy bien sobre Proton en gráficas más recientes y muy posiblemente requiriendo sacrificar calidad gráfica en favor de la fluidez.

Si se quiere volver a usar el driver Radeon, además de revertir los cambios en GRUB, hay que quitar Radeon de la lista negra, cosa que se hace eliminando el fichero creado para tal efecto:

sudo rm /etc/modprobe.d/blacklist-radeon.conf