Durante la instalación de Jellyfin en Proxmox LXC he aprovechado para habilitar la aceleración hardware de la tarjeta Intel HD Graphics 630.

Introducción

Esta tarjeta gráfica está integrada en el procesador Intel i5-7500T de mi servidor Proxmox, un Dell OptiPlex 7050 Micro.

Este procesador, perteneciente a la 7a generación de Intel Core i5 y la familia Kaby Lake, tiene las siguientes características:

  • 4 nucleos
  • velocidad máxima de 3,30GHz
  • velocidad base de 2,70GHz
  • 6 MB caché
  • TDP 35W

La tarjeta gráfica tiene las siguientes características:

  • Procesador gráfico Kaby Lake GT2
  • Arquitectura de Generación 9.5
  • Soporta DirectX 12.1
  • Soporta OpenGL 4.6
  • Compatible con Intel Quick Sync Video (es la parte que nos interesa)

Descubrir la GPU en Proxmox

La identificación de una tarjeta gráfica en Proxmox se realiza igual que en cualquier Linux. Se puede utilizar el comando lspci para localizarla:

root@pve:~# lspci -k | grep -EA3 'VGA|3D|Display'
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
        Subsystem: Dell HD Graphics 630
        Kernel driver in use: i915
        Kernel modules: i915

Drivers de Intel

A continuación, hay que asegurarse que la GPU está disponible como un dispositivo de render DRI en Proxmox (p.ej. /dev/dri/renderD128). Si no es así, hay que instalar los drivers de Intel necesarios para permitir la aceleración de vídeo mediante hardware usando VA-API.

Intel divide estos drivers según la generación de la tarjeta gráfica y si son o no gratuitos tal como se muestra en la siguiente tabla:

Licencia \ Generación Gen 8+ Older
Free intel-media-va-driver i965-va-driver
Non-Free intel-media-va-driver-non-free i965-va-driver-shaders

Los drivers non-free son necesarios para codificar (transcoding) mientras que los gratuitos únicamente decodifican.

Actualizar repositorios

Para poder instalar los drivers no gratuitos, hay que cambiar los orígenes APT de Proxmox, modificando el fichero /etc/apt/sources.list:

deb http://ftp.es.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://ftp.es.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org bookworm-security main contrib non-free non-free-firmware

Hay que añadir non-free y non-free-firmware dado que Debian dividió los repositorios no gratuitos hace un tiempo.

A continuación se actualiza el sistema:

apt update

Instalar vainfo

La herramienta vainfo permite comprobar si el soporta de VA-API es funcional y con qué codecs.

apt install vainfo -y

Instalar intel-gpu-tools

La herramienta intel_gpu_top del paquete intel-gpu-tools permite confirmar que se está usando aceleración gráfica:

![Hardware Acceleration][5]

Si la sección Engine/Video tiene un uso superior al 0%, cuando se reproduce un vídeo, significa que se está usando la aceleración gráfica.

Instalar drivers no gratuitos

La instalación de los drivers no gratuitos es bastante sencilla después de haber cambiado los repositorios:

apt install -y intel-media-va-driver-non-free
# Es recomendable reiniciar el servidor Proxmox después de la instalación
reboot -h now

Comprobar instalación

VA-API

Al ejecutar vainfo, si todo es correcto, se debería mostrar versión de VA-API y del driver de Intel utilizados, así como los diferentes profiles soportados:

root@pve:~# vainfo 
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.17 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 23.1.1 ()
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
[...]
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD

Card / Render

Se lista el contenido del directorio /dev/dri:

root@pve:~#  ls -lh /dev/dri
total 0
drwxr-xr-x 2 root root         80 Sep 26 20:53 by-path
crw-rw---- 1 root video  226,   1 Sep 26 20:53 card1
crw-rw---- 1 root render 226, 128 Sep 26 20:53 renderD128

En mi caso, hay dos dispositivos:

  • /dev/dri/card1 (ID 226,1) que representa la tarjeta gráfica
  • /dev/dri/renderD128 (ID 226,128) que es usado para la renderización de gráficos

Referencias

Historial de cambios

  • 2024-09-28: Documento inicial