Hace pocos días Collabora presentó el lanzamiento del controlador PanCSF DRM (Direct Rendering Manager), que funciona a nivel del kernel de Linux.
El controlador PanCSF DRM está diseñado para usarse con la GPU Mali (G710+) de décima generación, que utiliza la tecnología CSF (Command Stream Frontend), que trae algunas funciones del controlador al lado del firmware para reducir la carga en la CPU y ofrece un nuevo modelo para organizar el trabajo en la GPU.
Como el destino lo tendría, a principios de este mes se presentó un nuevo controlador DRM para las GPU Mali recientes . Esto es un poco extraño en el mundo del subsistema DRM, donde la compatibilidad con el nuevo hardware generalmente se agrega a los controladores de GPU que admiten generaciones de hardware anteriores.
Sobre el controlador PanCSF DRM
Inicialmente, se intentó implementar la compatibilidad con GPU Mali basadas en CSF en el controlador Panfrost, pero los desarrolladores llegaron a la conclusión de que esto conduciría a una gran complicación del controlador existente y sería más óptimo para CSF crear un nuevo controlador creado con una arquitectura diferente.
El nuevo controlador PanCSF propuesto para la prueba implementa una uAPI completamente nueva, una nueva lógica de programación de trabajo y una nueva lógica de control de MMU/GPU-VA. El código Panfrost existente se utiliza como base para el nuevo controlador.
Y es que en la nueva generación de GPU Mali, el programador de Job Manager se reemplazó con una interfaz CSF (Command Stream Frontend), que utiliza un modelo basado en flujo de comandos con programación de cola de flujo de comandos en el lado del firmware en lugar de un modelo basado en cadena de trabajo.
No daremos una descripción detallada de cómo funciona CSF, pero vale la pena señalar que la interfaz de CSF tiene un conjunto de instrucciones dedicado y un montón de registros para pasar datos o mantener estados internos. Hay instrucciones para enviar trabajos (trabajos de cómputo, mosaico y fragmentación) y otras para hacer cosas más triviales, como leer/escribir memoria, esperar a que se complete el trabajo, esperar a las vallas, saltar/ramificarse…
Se menciona que para organizar el trabajo del programador, se integra un microcontrolador Cortex-M7 separado en la GPU y se proporciona una unidad de ejecución de comandos especial para ejecutar las instrucciones CSF. Tales características requieren una organización fundamentalmente diferente de la transferencia de trabajo a la GPU desde el espacio del usuario.
El controlador PanCSF toma prestadas las plantillas típicas de inicialización del controlador, administración de frecuencia y administración de energía, que probablemente se modifiquen a medida que algunas de las funciones de administración de energía en las nuevas GPU Mali se trasladan al firmware.
Si CSF se tratara simplemente de alejarse de un enfoque de envío de trabajos basado en descriptores, podríamos salirnos con una cantidad mínima de cambios en el kernel y aplastar el soporte de CSF para el controlador de kernel existente.
Cabe mencionar que para aquellos que no están familiarizados con las API de gráficos, vale la pena recordar que Vulkan trata de devolver el control al usuario al hacer que gran parte de la administración de la canalización de gráficos sea explícita, mientras que OpenGL intentaba ocultar cosas a sus usuarios para facilitarles la vida.
Finalmente, se menciona que a futuro los desarrolladores tienen en cuenta que este RFC, si bien es al menos parcialmente funcional (hasta ahora solo se probó en la carga de trabajo básica de GLES2), está lejos de estar listo y mencionan que hay cosas que deben de abordar: como tratar de usar drm_sched en lugar de implementar un programador basado en tiempo compartido, tener un mecanismo de desalojo de objetos de búfer adecuado para manejar con gracia situaciones en las que el sistema tiene presión de memoria.
Ademas, se menciona que de momento se carece de soporte para administración de energía, escalado de frecuencia de dispositivos y probablemente otras características útiles como contadores de rendimiento, pero deberían ser relativamente fáciles de implementar en comparación con la programación y la lógica de administración de memoria.
Por último y no menos importante, está previsto que pronto se publiquen los cambios para usar el nuevo controlador en Mesa.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.