es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rendimiento de Etnaviv vs Vivante.

Estoy buscando orientación sobre cómo hacer que mi aplicación Qt EGLFS tenga un rendimiento tan bueno bajo el controlador etnaviv como lo hace bajo el controlador Vivante propietario en un IMX6.

Con una simple aplicación de prueba qt que dibuja solo un widget QLabel, el rendimiento bajo el controlador Etnaviv es significativamente peor que bajo el controlador Vivnate. Los tiempos de renderizado son aproximadamente 5-6 veces más altos (~ 9mS hasta alrededor de 45-55mS) y la carga de la CPU es 3 veces más alta (3% hasta ~ 9%). El mouse (renderizado por software) también es lento, con una latencia de mouse a cursor de alrededor de 100mS a 300mS.

Hay una serie de grandes diferencias de software entre los dos conjuntos de sistemas, pero antes de invertir mucho tiempo en eliminar esas diferencias, me gustaría investigar qué podría estar causando esta desaceleración. Esencialmente estoy comparando:

1) Un sistema basado en Vivante en Yocto Krogarth (Qt 5.4 y Kernel 4.1.15) con el controlador propietario de NXP. Este sistema está utilizando un backend EGLFS iMX6.
2) Un sistema basado en Etnaviv en Yocto Dunfell (con Qt 5.14.2 y Kernel 5.10.73-RT). Este sistema está utilizando un backend EGLFS KMS (GBMs), incorporando MESA / libdrm, etc.

La salida renderizada es idéntica entre ellos, pero el rendimiento de Etnaviv es deficiente. ‘perf’ muestra que más del 43% del tiempo de la aplicación se dedica a llamadas drm_ioctl para Etnaviv.

Ya he leído y probado la mayoría de las variables de entorno aplicables en el sitio web de Qt EGLFS, pero ninguna hizo ninguna diferencia significativa. Las configuraciones de Mesa y Qt parecen razonables (y son la configuración estándar para Yocto Dunfell con Etnaviv).

¿Alguna sugerencia sobre cosas que podría probar / verificar para ver qué está causando mis problemas de rendimiento? (Configuración del kernel, configuración de Mesa, configuración de Qt, variables de entorno, DTS, etc.).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Basado en la información proporcionada, el problema de rendimiento lento parece estar relacionado con el controlador Etnaviv. Una posible solución para mejorar el rendimiento de la aplicación Qt EGLFS bajo el controlador Etnaviv en un IMX6 es ajustar la configuración del kernel y la configuración de Mesa.

    Algunas sugerencias para probar/verificar son:

    1. Configuración del kernel: Verifique si la configuración del kernel está optimizada para la placa IMX6 y si todos los controladores necesarios están habilitados. Por ejemplo, habilitar el soporte DMA y IOMMU en la configuración del kernel puede mejorar el rendimiento gráfico. Además, desactivar opciones de kernel innecesarias puede reducir la sobrecarga y mejorar el rendimiento.
    2. Configuración de Mesa: Verifique si la configuración de Mesa está optimizada para el controlador Etnaviv y si se utiliza la versión correcta de OpenGL. Configurar la resolución correcta del framebuffer, habilitar la aceleración de hardware y desactivar el renderizado de software puede mejorar el rendimiento. Además, utilizar la última versión de Mesa y habilitar las extensiones necesarias puede mejorar la compatibilidad y el rendimiento.

    3. Configuración de Qt: Verifique si la configuración de Qt está optimizada para el backend EGLFS y si se utiliza la versión correcta de OpenGL. Configurar la resolución correcta de la pantalla, habilitar la aceleración de hardware y desactivar características innecesarias puede mejorar el rendimiento. Además, utilizar la última versión de Qt y habilitar los módulos necesarios puede mejorar la compatibilidad y el rendimiento.

    4. Variables de entorno: Pruebe configurar diferentes variables de entorno relacionadas con EGL y OpenGL, como EGL_LOG_LEVEL, EGL_PLATFORM, EGL_DRIVER, EGL_CONFIG, EGL_SAMPLES, GALLIUM_DRIVER, LIBGL_ALWAYS_SOFTWARE, etc. Estas variables pueden afectar el comportamiento y el rendimiento del stack gráfico.

    5. DTS: Verifique si la configuración del árbol de dispositivos es compatible con el controlador Etnaviv y si se utiliza el nodo de unidad de procesamiento gráfico correcto. La configuración de los ajustes del bus y del reloj, las asignaciones de memoria y las interconexiones pueden afectar el rendimiento. Además, habilitar las funciones de aceleración de hardware necesarias y desactivar periféricos innecesarios puede mejorar el rendimiento.

    6. Perfilado: Utilice herramientas de perfilado como perf, gprof, strace, etc. para identificar los cuellos de botella del stack gráfico y la aplicación. Analizar el uso de la CPU, el uso de la memoria, las operaciones de E/S y las llamadas al sistema puede ayudar a localizar los problemas de rendimiento.

    7. Documentación: Verifique si hay documentación o publicaciones de foros relacionadas con el controlador Etnaviv, la placa IMX6 y el backend EGLFS. Leer las notas de lanzamiento, los registros de cambios y los manuales de usuario puede dar información sobre los problemas conocidos, las soluciones alternativas y las mejores prácticas.

    Al experimentar con estas sugerencias y comparar los resultados con el sistema basado en Vivante, debería ser posible reducir y eventualmente resolver el problema de rendimiento lento bajo el controlador Etnaviv en un IMX6.

Comments are closed.