PanCSF, um novo driver Linux para GPUs do Mali da Collabora

PanCSF

PanCSF: um novo driver DRM para GPUs baseadas em Mali CSF

Alguns dias atrás Colabora apresentou o lançamento controlador DRM PanCSF (Direct Rendering Manager), que funciona no nível do kernel do Linux.

O controlador PanCSF DRM é projetado para uso com a GPU Mali (G710+) de décima geração, que utiliza a tecnologia CSF (Command Stream Frontend), que traz algumas funções de driver junto ao firmware para reduzir a carga na CPU e oferece um novo modelo de organização do trabalho na GPU.

Quis o destino que um novo driver DRM para GPUs Mali recentes fosse revelado no início deste mês. Isso é um pouco estranho no mundo do subsistema DRM, onde o suporte para novo hardware é normalmente adicionado aos drivers de GPU que suportam gerações mais antigas de hardware.

Sobre o driver PanCSF DRM

Inicialmente tentou implementar suporte para GPUs do Mali baseadas em CSF no driver Panfrost, mas os desenvolvedores chegaram à conclusão de que isso levaria a uma grande complicação do driver existente e seria mais ideal para o CSF ​​criar um novo driver criado com uma arquitetura diferente.

O novo driver PanCSF proposto para teste implementa uma uAPI completamente nova, uma nova lógica de agendamento de tarefas e uma nova lógica de controle MMU/GPU-VA. O código Panfrost existente é usado como base para o novo controlador.

E é que na nova geração de GPU Mali, Agendador do Job Manager substituído por uma interface CSF (Command Stream Frontend), que usa um modelo baseado em fluxo de comando com agendamento de fila de fluxo de comando no lado do firmware em vez de um modelo baseado em fluxo de trabalho.

Não daremos uma descrição detalhada de como o CSF ​​funciona, mas vale a pena notar que a interface CSF possui um conjunto de instruções dedicado e vários registradores para passar dados ou manter o estado interno. Existem instruções para enviar tarefas (tarefas de computação, mosaico e chunk) e outras para fazer coisas mais triviais, como ler/gravar memória, aguardar a conclusão da tarefa, aguardar cercas, saltar/ramificar…

É mencionado que para organizar o trabalho do programador, um microcontrolador Cortex-M7 é integrado separado na GPU e uma unidade de execução de comando especial é fornecida para executar as instruções CSF. Esses recursos exigem uma organização fundamentalmente diferente da transferência de trabalho para a GPU do espaço do usuário.

O controlador O PanCSF pega emprestado modelos típicos de inicialização do controlador, gerenciamento de frequência e gerenciamento de energia, que provavelmente mudarão à medida que alguns dos recursos de gerenciamento de energia nas novas GPUs do Mali forem movidos para o firmware.

Se o CSF ​​fosse simplesmente afastar-se de uma abordagem de envio de trabalho baseada em descritor, poderíamos nos safar com um número mínimo de alterações no kernel e esmagar o suporte do CSF ​​para o driver do kernel existente.

Vale lembrar que, para quem não está familiarizado com APIs gráficas, vale lembrar que o Vulkan tenta devolver o controle ao usuário tornando explícito grande parte do gerenciamento do pipeline gráfico, enquanto o OpenGL tentou esconder coisas para seus usuários para tornar suas vidas mais fácil.

Por fim, é mencionado que futuros desenvolvedores observe que este RFC, embora pelo menos parcialmente funcional (até agora testado apenas na carga de trabalho GLES2 básica), está longe de estar pronto e mencione que Há coisas que precisam ser abordadas: como tentar usar drm_sched em vez de implementar um agendador baseado em compartilhamento de tempo, ter um mecanismo de despejo de objeto de buffer adequado para lidar normalmente com situações em que o sistema está sob pressão de memória.

Além disso, é mencionado que atualmente falta suporte para gerenciamento de energia, dimensionamento de frequência do dispositivo e provavelmente outros recursos úteis, como contadores de desempenho, mas devem ser relativamente fáceis de implementar em comparação com a programação e a lógica de gerenciamento de memória.

Por último, mas não menos importante, mudanças devem ser lançadas em breve para usar o novo driver na tabela.

Se você interessado em saber mais sobre o assunto, você pode verificar os detalhes no link a seguir.