lunes, 25 de enero de 2021

Activar y configurar la aceleración por hardware VAAPI en Firefox para Linux Ubuntu 20.04 LTS en Multi-GPU

Figura 1: Firefox VAAPI es una realidad para drivers Open-Source.

Al referirnos a la aceleración por hardware se entiende que el GPU procesará contenido multimedia (como es el caso de videos) para liberar al CPU de esa carga de trabajo, mantener un mejor rendimiento, presentar menores temperaturas y reducir el consumo de energía (vital para ordenadores portátiles). Naturalmente, el usuario de un navegador web (llámese: Firefox, Chrome, Edge, etc.) no se preocupa por estos detalles y dan por echo que la aceleración por hardware funciona correctamente, esto casi siempre se cumple en Windows, pero en el sistema operativo del pingüino la situación se complica y más aún si el PC/portátil posee múltiples GPUs.

Esta publicación mostrará el estado actual de la aceleración por hardware en el navegador web Mozilla Firefox, el proceso para su activación, configuración, pruebas de rendimiento, uso de códecs H.264 y VP9 en sistemas con multi-GPU usando GNU/Linux.

NOTA: Esta publicación es válida para portátiles con gráficos híbridos equipados con un iGPU Intel o APU y dGPU AMD o Nvidia.
NOTA: Esta publicación es válida para portátiles con gráficos híbridos que utilizan drivers Open-Source.
ADVERTENCIA: Esta publicación NO es válida para portátiles con gráficos híbridos que utilizan drivers privativos como "nvidia".
ADVERTENCIA: Este contenido (procedimientos y benchmarks) es válido para Firefox 84. En un futuro podrían variar.
Antes de empezar son necesarios algunos requisitos:

Requisitos de lectura:
  1. "Configurar gráficos híbridos en Linux Ubuntu 18.04/20.04 LTS con PRIME".
Requisitos de software (instalar de acuerdo al PC/portátil):

  1. i965-va-driver
  2. mesa-va-drivers
  3. intel-media-va-driver (*)
  4. intel-media-va-driver-non-free (*)
  5. vainfo
  6. intel-gpu-tools
  7. radeontop

(*) Dependencias mutuamente excluyentes.

Comandos para instalar las dependencias:

  1. i965-va-driver ("sudo apt install i965-va-driver") 
  2. mesa-va-drivers ("sudo apt install mesa-va-drivers")  
  3. intel-media-va-driver ("sudo apt install intel-media-va-driver") 
  4. intel-media-va-driver-non-free ("sudo apt install intel-media-va-driver-non-free")  
  5. vainfo ("sudo apt install vainfo") 
  6. intel-gpu-tools ("sudo apt install intel-gpu-tools")  
  7. radeontop ("sudo apt install radeontop")

Equipo de prueba:
  • HP Pavilion G4-2082la
  • Dual Boot: Windows 10 + Kubuntu 20.04 LTS
  • Intel HD 3000 + AMD Radeon HD 7670M
 
Con todo aclarado, empecemos.
A lo largo de los años, los CPUs y GPUs mejoran en eficiencia, poseen mejores instrucciones por ciclo, incluso un mayor número de núcleos, lo que permite realizar operaciones más complejas con menor gasto computacional al codificar y decodificar un video a altas resoluciones. Pero, ¿Qué ocurre con los CPUs/GPUs que son muy antiguos (por ejemplo, del año 2011)?, la respuesta es que para estos tiempos requieren un mayor esfuerzo para decodificar un simple video de YouTube.
En el caso del sistema operativo del pingüino, hace poco se obtuvo el soporte para la aceleración por hardware en uno de los principales navegadores web (de forma oficial) lo que vendría a ser la salvación para PCs/portátiles antiguos, pero ¿En verdad ayudará significativamente?
Elegí probar la aceleración por hardware en Firefox utilizando mi viejo portátil HP Pavilion G4-2082la que posee un i5-2450M (2C/4T, muy obsoleto para esta época) acompañado de un dGPU Radeon HD 7600M (gama extremadamente baja para estos tiempos) porque en equipos actuales que poseen más de 4C/8T (4 núcleos 8 hilos) no ayuda tanto. Además, esta publicación también es válida para GPUs Nvidia siempre y cuando se utilice el Driver VAAPI "nouveau".

I. ¿Por qué es importante la aceleración por hardware?

En general (considerando navegadores web, reproductores de video, etc.), la aceleración por hardware permite utilizar el GPU (Unidad de procesamiento gráfico) para renderizar contenido de interés y liberar al CPU de esta carga pesada de trabajo porque el primero posee un hardware más especializado.

Las ventajas y desventajas de la aceleración por hardware son:

Ventajas:
  1. Menor uso de CPU.
  2. Menor consumo de energía.
  3. Menor temperatura de CPU.
  4. Mayor rendimiento al renderizar.
  5. Codificar y decodificar simultáneamente en distintos GPUs para ganar rendimiento.

Desventajas:
  1. GPUs antiguos pierden soporte por adopción de nuevos códecs.
  2. Los navegadores web pueden limitar la resolución de videos si son reproducidos con códecs antiguos.
  3. Una mala implementación genera corrupción, pantalla verde, entre otros problemas en el contenido reproducido.
  4. En GNU/Linux el soporte (actual) mediante drivers VAAPI y navegadores web es muy limitado.


II. ¿Qué es VAAPI y cuáles son los códecs que puedo utilizar?

VAAPI (Video Acceleration API) es una especificación que proporciona el acceso al hardware de gráficos (GPU) y la aceleración de video para su procesamiento. La aceleración de video incluye códecs de video, mezclas de sub-imágenes y renderizado.

En GNU/Linux, es prácticamente un estándar para codificar y decodificar, incluso es una opción seleccionable en OBS Studio (para cierto hardware).

En cuanto a los códecs, estos nos permiten visualizar/generar contenido multimedia con un menor o mayor costo de GPU dependiendo del hardware soportado.

Para saber qué códecs se pueden usar, deberemos preparar el escenario:

[1]. Abrir un terminal.

[2]. Instalar el driver VAAPI de interés según la Tabla 1: 

Tabla 1: Dependencias que instalan los drivers VAAPI para GPUs Intel, AMD y Nvidia.


Driver VAAPI

Intel

i965-va-driver

intel-media-va-driver

intel-media-va-driver-non-free

AMD/Nvidia

mesa-va-drivers


  1. sudo apt install i965-va-driver intel-media-va-driver mesa-va-drivers

NOTA: En mi caso, poseo un iGPU Intel y un dGPU AMD Radeon, el comando anterior se encuentra adaptado a este conjunto de GPUs.

[3]. Instalar vainfo:

  1. sudo apt install vainfo

[4]. Ver los dispositivos DRI que renderizan contenido. En un terminal:

  1. ls /dev/dri/

 En mi caso, la salida es:

Figura 2: Se muestran 2 dispositivos renderizadores.

  1. by-path  card0  card1  renderD128  renderD129

La línea anterior nos dice que el PC/portátil posee 2 GPUs: "renderD128" y "renderD129".. 


Entonces, los dispositivos DRI son (tomar nota de este dato):

  1. /dev/dri/renderD128
  2. /dev/dri/renderD129

 [5]. Ver nombres de drivers para identificar los dispositivos DRI. En un terminal:

  1. sudo cat /sys/kernel/debug/dri/128/name
  2. sudo cat /sys/kernel/debug/dri/129/name

 En mi caso, las salidas respectivas son:

Figura 3: "i965" es el nombre del driver de Intel que representa al iGPU, "radeon" es el nombre del driver de Radeon que representa al dGPU.

  1. i915 dev=0000:00:02.0 unique=0000:00:02.0
  2. radeon dev=0000:01:00.0 master=pci:0000:01:00.0 unique=0000:01:00.0

De las líneas anteriores inferimos que "renderD128" es el iGPU Intel (por usar el driver "i965") y "renderD129" es el dGPU Radeon (por usar el driver "radeon"). Tomar nota de este dato.


NOTA: El paso 5 es muy importante, muchas veces damos por sentado que el primer dispositivo DRI (D128) es el iGPU, pero en algunos escenarios esta suposición puede ser errada.

[6]. Listar los drivers VAAPI instalados:

  1. ls /usr/lib/x86_64-linux-gnu/dri/*drv_video.so

La salida, en mi caso es:

Figura 4: Los archivos mostrados en la salida se encuentran asociados al driver VAAPI.


Donde, los archivos de interés son los terminados en "drv_video.so". En la Tabla 2 se muestra la equivalencia de estos archivos y los Drivers VAAPI:


Tabla 2: Equivalencia entre archivos VAAPI y Drivers VAAPI.


Archivos VAAPI

Driver VAAPI

Intel

i965_drv_video.so

i965

iHD_drv_video.so

iHD

Nvidia

nouveau_drv_video.so

nouveau

Radeon

r600_drv_video.so

r600

radeonsi_drv_video.so

radeonsi

[7]. Mostrar información de códecs VAAPI teniendo en cuenta los dispositivos DRI y los Drivers VAAPI. En un terminal, ejecutar:

  1. LIBVA_DRIVER_NAME=i965 vainfo --display drm --device /dev/dri/renderD128
  2. LIBVA_DRIVER_NAME=radeonsi vainfo --display drm --device /dev/dri/renderD129
NOTA: Existen PCs/portátiles que pueden usar 2 drivers VAAPI para el iGPU y una forma de especificarlo es mediante la variable "LIBVA_DRIVER_NAME". Dicha variable puede ser omitida.
NOTA: La opción "--device" y su argumento (/dev/dri/renderD12X) puede ser omitida si el PC/portátil posee 1 GPU.

 La salida se cada comando se muestra a continuación:

Figura 5: Se muestran los códecs compatibles con el iGPU Intel usando el driver VAAPI "i965".

Figura 6: Se muestran los códecs compatibles con el dGPU Radeon usando el driver VAAPI "radeonsi".

Si todo resultó correcto, veremos 2 columnas, donde la primera representa el códec compatible y la segunda la compatibilidad con la codificación o decodificación. En este caso, nos interesa la decodificación.

La forma de interpretar si el driver es capaz de codificar o decodificar es: Si la segunda columna dice "VAEntrypointVLD" significa que el GPU es capaz de decodificar el formato de la primera columna. Si dice "VAEntrypointEncSlice" significa que puede codificar.

De la salida anterior, para el iGPU y dGPU vemos que es posible la decodificación en H.264, pero no en VP8, VP9 y AV1 (por ser GPUs antiguos).


NOTA: Puede darse el caso que un Driver VAAPI no sea compatible con un GPU, como es el caso de "iHD" con Intel HD 3000 tal como se muestra en la siguiente figura.
Figura 7: Error al tratar de utilizar el Driver VAAPI "iHD" con el GPU Intel HD 3000.


III. ¿Cuál es el estado actual de los navegadores web en GNU/Linux?

Los 3 principales y más conocidos navegadores son Mozilla Firefox, Google Chrome y Microsoft Edge. Por el momento, Edge no cuenta con aceleración por hardware (y no hay noticias al respecto), Google Chrome tiene VAAPI, pero en algunas versiones nuevas se pierde y Chromium cuenta con un parche no oficial que lo habilita. Mozilla Firefox fue el primero en dar el gran paso: VAAPI se encuentra disponible para decodificar video tanto en Xorg como en Wayland.

La versión actual (al momento de esta publicación) de Firefox es la 84 (al igual que la primera en soportar VAAPI: 75) y no tienen VAAPI habilitado por defecto, el motivo es que aún falta mejorar y solucionar varios problemas.


IV. ¿Cómo habilitar la aceleración por hardware en Firefox?

Primero debemos determinar si estamos usando Xorg o Wayland. Las distribuciones Kubuntu, KDE Neon y similares, en la actualidad usan Xorg; para otras distribuciones, es tan fácil como abrir el "Monitor del sistema" y buscar el proceso "xorg" o "wayland", si encuentran "xorg" significa que están en Xorg, lo mismo aplica para "wayland". En esta publicación se considera el caso de Xorg, para Wayland usar la equivalencia que aparece en la Tabla 4.

Para habilitar la aceleración por hardware, deberemos haber instalado los drivers VAAPI tal como vimos anteriormente, entonces procedemos de la siguiente manera:

[1]. Abrir Firefox y en la barra de direcciones ejecutar:

  1. about:config

[2]. Habilitar el compositor "OpenGL" o "WebRender" cambiando su valor a "True":

Figura 8: Habilitando el primer "Flag" en Firefox. Este es el primer paso para reducir el uso del CPU.

  1. layers.acceleration.force-enabled
  2. gfx.webrender.all
NOTA: El compositor OpenGL es "layers.acceleration.force-enabled" y WebRender es "gfx.webrender.all".

 

[3]. Modificar los "Flags" mostrados en la Tabla 3:

Tabla 3: Flags a modificar para preparar la aceleración por hardware en Firefox.

Flags

Valor

Descripción considerando el valor

media.ffmpeg.vaapi.enabled

True

Permite el uso de VA-API con FFmpeg

media.ffvpx.enabled

False

Desactiva decodificadores internos para VP8/VP9

media.av1.enabled

False

Desactiva el códec AV1 en varios sitios

NOTA: La modificación de "media.av1.enabled" es opcional. Si el Driver VAAPI soporta decodificación AV1, entonces dejarlo como "True".

[4]. Cerrar Firefox, abrir un terminal y ejecutar el comando con los prefijos-variables adecuados de la Tabla 4 y considerando los datos de la Tabla 5, 6 y 7: 

Tabla 4: Variables de entorno para ejecutar Firefox en Xorg y Wayland con aceleración por Hardware.


Xorg

Wayland

Variable 1

MOZ_WAYLAND_DRM_DEVICE

MOZ_WAYLAND_DRM_DEVICE

Variable 2

LIBVA_DRIVER_NAME

LIBVA_DRIVER_NAME

Variable 3

MOZ_X11_EGL

MOZ_ENABLE_WAYLAND

Tabla 5: Explicación de las variables de entorno de la Tabla 4.

Variable

Tipo de argumento

Descripción

MOZ_WAYLAND_DRM_DEVICE

String

Selecciona el dispositivo DRI

LIBVA_DRIVER_NAME

String

Selecciona el driver VAAPI

MOZ_X11_EGL / MOZ_ENABLE_WAYLAND

integer

Habilita la aceleración por hardware (0,1)

Tabla 6: Argumentos de la variable "MOZ_WAYLAND_DRM_DEVICE" y "LIBVA_DRIVER_NAME" para un iGPU Intel HD 3000 y AMD Radeon 7600M (puede variar en otros PCs/portátiles, ver capitulo 2).

Variable

Argumentos

MOZ_WAYLAND_DRM_DEVICE

/dev/dri/renderD128

/dev/dri/renderD129

LIBVA_DRIVER_NAME

i965

r600

radeonsi

Tabla 7: Equivalencia entre archivos VAAPI y Drivers VAAPI (Puede variar en otros PCs/portátiles, ver capitulo 2).


Archivos VAAPI

Driver VAAPI

Intel

i965_drv_video.so

i965

iHD_drv_video.so

iHD

Nvidia

nouveau_drv_video.so

nouveau

Radeon

r600_drv_video.so

r600

radeonsi_drv_video.so

radeonsi

Entonces:

Para utilizar el iGPU Intel con el Driver VAAPI "i965" el comando es:

  1. MOZ_WAYLAND_DRM_DEVICE=/dev/dri/renderD128 LIBVA_DRIVER_NAME=i965 MOZ_X11_EGL=1 firefox


Para utilizar el dGPU Radeon con el Driver VAAPI "radeonsi" el comando es:

  1. MOZ_WAYLAND_DRM_DEVICE=/dev/dri/renderD129 LIBVA_DRIVER_NAME=radeonsi MOZ_X11_EGL=1 firefox


De manera similar se puede dirigir el GPU de interés con el Driver VAAPI deseado, por ejemplo "nouveau" para el GPU Nvidia.

NOTA: En algunos casos no es necesario especificar "MOZ_WAYLAND_DRM_DEVICE" y "LIBVA_DRIVER_NAME" para utilizar el iGPU Intel (dependerá del orden de asignación de los dispositivos DRI). El argumento de ambas variables se obtienen del capitulo 2.

 

V. ¿Cómo configurar los códecs en Firefox para una correcta aceleración por hardware?

Por defecto, Firefox y otros navegadores utilizan códecs H.264/AVC1, VP8, VP9, etc. El códec que funciona en la gran mayoría de dispositivos es H.264/AVC1 tal como se vio en la salida del comando "vainfo" en el capítulo 2.

El problema surge con códecs más actuales que el GPU utilizado, como es el caso de Intel HD 3000 y Radeon 7600M (GPUs del años 2011) utilizados en este ejemplo. Entonces, por más que configuremos y activemos la aceleración por hardware VAAPI no funcionará si utilizamos un códec no soportado por el GPU. Es por eso que instalaremos una extensión.

NOTA: Tener en cuenta que si el video que deseamos reproducir no tiene versión H.264/AVC1, entonces se reproducirá con un códec más actual (VP8, VP9, etc.) y la extensión no funcionará. La extensión no va a generar mágicamente un video H.264, sólo va a seleccionar una versión de dicho video con el códec deseado si es que existe en la plataforma.

[1]. Abrir el "Menú" e ingresar a la opción "Complementos".

[2]. Buscar e instalar "h264ify" (existen alternativas).

[3]. Clic en el nuevo icono y activar el check "Enable h264ify"

Figura 9: h264ify permite bloquear todos los códecs y forzar H.264 en sitios como YouTube.

[4]. Reiniciar el navegador con las variables configuradas del capitulo 4.

[5]. En un video de YouTube, realizar clic derecho y clic en la opción "Estadísticas". Deberían ver en apartado "Codecs" la palabra "avc1", eso quiere decir que se usa el códec H.264.

Figura 10: Códec H.264 habilitado en YouTube.

NOTA: Si el GPU utilizado soporta los códec VP8, VP9, AV1, etc. No es necesario instalar "h264ify".
NOTA: YouTube bloquea la resolución de videos a un máximo de 1080p 60 FPS al utilizar el códec H.264.

 

VI. ¿Cómo verificar si la aceleración por hardware funciona correctamente en Firefox?

Al reproducir cualquier video deberíamos notar un menor uso de CPU una vez configurado el códec (opcional) y con VAAPI activado. Pero también existen otras formas de comprobarlo:

[1]. Abrir Firefox con las variables de entorno correctas en un terminal.

[2]. Reproducir cualquier video de YouTube.

[3]. Abrir el terminal donde se ejecutó Firefox y verificar que la salida contenga las líneas de la siguiente imagen:

Figura 11: Firefox con el Driver VAAPI "i965" funcionando sin ningún error con el códec H.264.
Figura 12: Firefox con el Driver VAAPI "r600" funcionando sin ningún error con el códec H.264.
NOTA: De producirse algún error, es muy probable que el driver VAAPI no se esté dirigiendo hacia el dispositivo DRI correcto, en ese escenario la aceleración por hardware puede encontrase desactivada o puede estar realizando llamadas adicionales con un mayor consumo de CPU (siguiente figura). Para solucionar este problema, realizar de nuevo el capítulo 4 y verificar que no existan errores en la salida de "vainfo".

Figura 13: Firefox con el Driver VAAPI "i965" provocando errores con el driver "iHD" (no compatible con Intel HD 3000) y realizando llamadas adicionales con el códec H.264.

Alternativamente, si utilizan un GPU Intel o Radeon, es posible el uso de 2 herramientas: intel_gpu_top y radeontop.

[1]. En un terminal, instalar la dependencia de interés:

  1. sudo apt install intel-gpu-tools
  2. sudo apt install radeontop

[2.1]. Para el caso de un GPU Intel, ejecutar:

  1. sudo intel_gpu_top

Figura 14: Intel_gpu_top muestra que no se utiliza la decodificación de video.
Figura 15: Intel_gpu_top muestra que se utiliza la decodificación de video.

Intel_gpu_top mostrará estadísticas del GPU Intel. Nos interesa el apartado que dice "Video". El valor mostrado representa el porcentaje de uso de GPU dedicado únicamente a la decodificación por hardware.

[2.2]. Para el caso de un GPU Radeon, ejecutar:

  1. sudo radeontop

Figura 16: Radeontop casi no muestra actividad.
Figura 17: Radeontop muestra un mayor uso de VRAM al momento de decodificar video y el terminal no muestra errores de VAAPI.

Radeontop mostrará estadísticas del GPU Radeon, aquí no existe (al menos en el GPU Radeon 7600M) una estadística exclusiva para la decodificación por hardware, pero debería mostrarse actividad siempre y cuando se dirija el driver VAAPI (en este caso "r600") al dispositivo DRI Radeon al momento de reproducir un video con la condicional que el GPU Radeon sea el dGPU o GPU secundario.


NOTA: En sistema que poseen múltiples GPUs, es necesario agregar la opción --bus nbus (Donde "nbus", representa el número de bus asignado al GPU Radeon de interés). El comando final, como ejemplo, sería: sudo radeontop --bus 1.


VII. ¿La variable DRI_PRIME es de utilidad en esta ocasión?

Es cierto que DRI_PRIME (0 o 1 como argumento) como prefijo es capaz de forzar la aplicación deseada al iGPU o dGPU, pero en el caso de VAAPI en Firefox esto no es así.

En otras palabras, Firefox en su totalidad se puede ejecutar en el iGPU y el contenido que utilice VAAPI puede ser dirigido al iGPU o dGPU sin la necesidad de la intervención de DRI_PRIME.

También, se puede decir que DRI_PRIME no lo es todo y existen otras formas de llamar al GPU secundario.


VIII. ¿Es necesario siempre usar el terminal para abrir Firefox con VAAPI activado?

La respuesta es: NO. El terminal se usa para descartar problemas.

Una vez que estén satisfechos con el comando para activar VAAPI en Firefox, entonces es posible la creación/modificación del lanzador del navegador, tal como se ve en la Figura 18:

Figura 18: Lanzador de Firefox con VAAPI.

Para el caso de distribuciones con el escritorio KDE Plasma, es tan fácil como modificar la sección "Orden" con el comando que incluye todas las variables de entorno, en mi caso es:

  1. env MOZ_WAYLAND_DRM_DEVICE=/dev/dri/renderD128 LIBVA_DRIVER_NAME=i965 MOZ_X11_EGL=1 firefox %u
NOTA: Para que la "Orden" funcione, la línea debe empezar con la palabra "env".
NOTA: El comando final "%u" se utiliza para abrir enlaces externos dirigidos a Firefox, es opcional.

IX. Pruebas de rendimiento

Ahora, empecemos con las pruebas. La variable analizada es el porcentaje de uso de CPU. Se utilizaron 2 portátiles:

Equipo de prueba 1:
  • HP Pavilion G4-2082la [i5-2450M (2C/4T), 8 GB RAM @1600 MHz Dual Channel]
  • Dual Boot: Windows 10 + Kubuntu 20.04 LTS
  • Intel HD 3000 + AMD Radeon HD 7670M
Equipo de prueba 2:
  • DELL 7567 [i7-7700HQ (4C/8T), 16 GB RAM @2400 MHz Dual Channel]
  • Dual Boot: Windows 10 + Kubuntu 20.04 LTS
  • Intel HD 630 + Nvidia GTX 1050ti

Prueba 01:

Se reprodujo el siguiente video de YouTube a la resolución 1080p 60 FPS con el códec H.264 en ambos equipos de prueba. La toma de datos fue de 100 s a partir del minuto 3:58.

 

 

Los resultados se muestran en la Figura 19 y 20:

Figura 19: Uso de CPU en la reproducción de un video en Firefox con H.264. HP Pavilion g4-2082la.

Figura 20: Uso de CPU en la reproducción de un video en Firefox con H.264. DELL 7567.

Podemos concluir que:

  • El uso promedio de CPU (i5-2450M) al usar el dGPU Radeon 7600M es 23.31% con un mínimo de 15.60% y un máximo de 39.00%.
  • El uso promedio de CPU (i5-2450M) al usar el iGPU Intel HD 3000 es 28.81% con un mínimo de 16.40% y un máximo de 50.70%.
  • El uso promedio de CPU (i5-2450M) al usar VAAPI es prácticamente la mitad que al no usar la aceleración por hardware.
  • El uso promedio de CPU (i7-7700HQ) al usar el iGPU Intel HD 630 con el driver VAAPI "i965" es 17.49% con un mínimo de 11.90% y un máximo de 30.20%.
  • El uso promedio de CPU (i7-7700HQ) al uso el iGPU Intel HD 630 con el driver VAAPI "iHD" es  17.59% con un mínimo de 10.80% y un máximo de 28.70%.
  • El uso promedio de CPU (i7-7700HQ) al usar VAAPI es prácticamente igual (~3% menos) que al no usar VAAPI, pero el primero es más estable debido a que en el segundo escenario llega a un máximo de 43.50%.


Prueba 02:

Se reprodujo el siguiente video de YouTube a la resolución 1080p 60 FPS con el códec VP9 en el equipo de prueba 2. La toma de datos fue de 100 s a partir del minuto 8:41.

NOTA: No se realizó la prueba en el Equipo de prueba 1 porque no soporta el códec VP9.

 

 

El resultado se muestra en la Figura 21:

Figura 21: Uso de CPU en la reproducción de un video en Firefox con VP9. DELL 7567.

Podemos concluir que:

  • El uso promedio de CPU (i7-7700HQ) al usar el iGPU Intel HD 630 con el Driver VAAPI "i965" es 18.43% con un mínimo de 11.50% y un máximo de 29.20%.
  • El uso promedio de CPU (i7-7700HQ) al usar el iGPU Intel HD 630 con el Driver VAAPI "iHD" es 17.91% con un mínimo de 12.80% y un máximo de 26.80%.
  • El uso promedio de CPU (i7-7700HQ) al usar VAAPI es inferior (~6% menos) que al no usar VAAPI, pero el primero es más estable debido a que en el segundo escenario llega a un máximo de 48.80%.


X. Usar la aceleración por hardware en Firefox Linux ¿Vale la pena?

La respuesta es complicada, me explico:

Vale la pena siempre y cuando utilicemos un PC/Laptop con un CPU de bajas prestaciones (2C/4T) porque prácticamente reducimos en la mitad el porcentaje de uso de CPU (depende del PC/portátil) y esa liberación la podemos aprovechar para otras tareas.

Pero, mientras el número de núcleos de un procesador sea mayor (4C/8T en adelante), la mejora en rendimiento no es tan apreciable porque podemos liberar al CPU de ~3% a ~6% de carga dependiendo del códec empleado. Aunque desde el punto de vista de la estabilidad de uso de CPU, si es conveniente.

Entonces, ¿Cuál es el motivo por el cuál el porcentaje uso de CPU sigue siendo alto en Firefox por más que tengamos VAAPI activo?

La respuesta es, no se sabe, pero podemos especular. VAAPI funciona muy bien, de eso no hay duda. Si reproducimos el mismo contenido de YouTube pero en VLC (obviamente configurando el software para usar VAAPI) se obtiene un bajo uso de CPU (para estas pruebas es de ~5% a ~10%) en comparación con Firefox. De aquí se concluye que: O Firefox tiene problemas en su programación para renderizar contenido multimedia por más que se tenga la ayuda de VAAPI o el problema es el mismo Linux en si. Me explico, muchos navegadores web ya utilizan VAAPI, pero su implementación aún estaría ligada al CPU para transferir el contenido al GPU (para su decodificación final), entonces por más que utilicemos VAAPI, este no es 100% GPU dependiente como es el caso en Windows.

NOTA: Chromium con VAAPI también posee el mismo problema, por lo que se puede inferir que muchos navegadores en GNU/Linux tendrían un comportamiento similar.
NOTA: Las pruebas realizadas pueden variar en otros equipos, les invito a darle una oportunidad a VAAPI.

Y es todo en esta publicación, a utilizar la aceleración por hardware.
 
REFERENCIAS
4. "VAAPI"

Palabras finales
Hola a todos, aquí quantum-phy (Néstor).
Empezamos con la primera publicación del año 2021 (2020ti xD).

Inicialmente quería que esta publicación sea sencilla, pero a medida que avanzaba en la redacción encontraba varios escenarios que se debía cubrir.
Seguro se preguntarán ¿Por qué publicar este tema si hay muchos sitios en internet hablando de lo mismo? La respuesta es que todos hablan de Firefox con VAAPI pero enfocados al uso de un solo GPU, y como siempre, les quise traer el tema pero para varios GPUs (no solo 2, si no más), ese es el motivo por el cual la publicación es muy grande.

Empecemos por las críticas.
GNU/Linux es un gran sistema operativo, se entiende que posee una cantidad minúscula de cuota de mercado comparado con Windows, también se entiende que los desarrolladores de los principales navegadores web (Firefox, Chrome, Edge) no tengan mucho interés en implementar todas las características en el sistema operativo del pingüino, pero la carencia de la aceleración por hardware durante mucho tiempo fue un fallo tremendo. Les comento que a un conocido mío le fascinó Linux, pero lo abandonó debido a que los navegadores web usan mucho CPU al momento de reproducir un simple video en YouTube con la consecuencia de presentar altas temperaturas en el equipo. Para CPUs con gran cantidad de núcleos (8,16, etc.), este es un problema insignificante porque la pérdida de rendimiento es despreciable.

En la actualidad me parece muy extraño (en Linux) que Firefox, Chrome y Edge tengan un uso exagerado de CPU al realizar tareas que no dependan de la aceleración por hardware (y no solo los navegadores. En mi experiencia con varios portátiles, debo decir que Linux tiene un serio problema de consumo de CPU al realizar ciertas tareas no demandantes), por ejemplo al traducir una página web no debería ser posible que se use entre ~10-15% de CPU todo el tiempo (al usar una extensión en Firefox se evita este problema), al menos eso me pasa a mi (al momento de esta redacción). Esto evidencia que existen problemas y una oportunidad de mejora porque tampoco debería ser posible que el mismo video de YouTube consuma un uso similar de CPU al tener la aceleración por hardware activada o desactivada en algunos PCs.

Si se preguntan ¿Por qué el driver privativo de Nvidia no funciona con VAAPI?, pues es una pregunta para Nvidia, aunque en este escenario tenemos VDPAU que viene a ser otra forma de aceleración por hardware, de momento ningún navegador web lo soporta. Si poseen una gráfica Nvidia, deberán usar el driver Open-Source "nouveau" para usar VAAPI.

En fin, si desean usar la aceleración por hardware, es muy conveniente en CPUs modestos, y para equipos más poderosos la mejora está ahí, pero no es tan apreciable; aún así recomiendo dar una oportunidad a VAAPI en Firefox. Para CPUs modestos es una maravilla y mejor aún si poseen un dGPU para reducir aún más la carga de trabajo.

Para terminar, no tengo nada en contra de Firefox, más bien es mi navegador favorito y lo usé mucho antes que Chrome. Simplemente las críticas se realizan en base a los resultados, estoy para decir verdades y las cosas como son. También, hubiera querido realizar pruebas en más equipos, pero no tengo los medios para ello.

Si llegaron hasta aquí, gracias por leer, no fue sencillo escribir todo.

Espero que esta info sea de ayuda.
Un saludo

Estado

=======================================
Recomiendo este post donde se recopila mucho contenido útil y en español para jugar en Linux.
-¿Jugar en Linux?, están locos estos pingüinos

[Linux] ¿Fidelity FX Super Resolution (FSR) en cualquier juego?
- Pruebas en el canal de YouTube

[Linux] GalliumToggle publicado en GitHub.
=======================================

quantum-phy (NestorBase11)

Videos Destacados

Entradas recientes