Recentemente, o driver gráfico open-source Mesa integrou o Merge Request (MR) para o backend llvmpipe ORCJIT, adicionando suporte para a arquitetura riscv64.
O que é LLVMpipe?
LLVMpipe é um renderizador de software no driver Mesa que não utiliza hardware GPU. Em vez disso, utiliza o compilador JIT do LLVM para converter dinamicamente o código gráfico a ser renderizado em dados rasterizados para exibição. Oferece um desempenho melhor em comparação com o softpipe.
Os drivers fechados há muito tempo foram um grande obstáculo para o ecossistema desktop da arquitetura riscv64, tornando a maioria das GPUs integradas nas placas de desenvolvimento riscv64 parcialmente ou completamente inutilizáveis. Como resultado, as distribuições desktop tiveram que usar renderização por software como substituto.
Por um longo período, o backend JIT usado pelo LLVMpipe do Mesa era o desatualizado MCJIT, que não tinha suporte para arquiteturas, em vez do mais recente ORCJIT, que suporta uma gama mais ampla de arquiteturas. Como o MCJIT foi oficialmente substituído pelo ORCJIT e não aceita mais atualizações para novas arquiteturas, o Mesa teve que usar o softpipe de desempenho inferior para renderização por software em arquiteturas como riscv64. Isso tornou os ambientes desktop quase inutilizáveis, devastando o ecossistema desktop.
Como resultado, a comunidade open-source estava ansiosa por um renderizador de software mais rápido na arquitetura riscv64.
A Primeira Tentativa com ORCJIT
Em julho de 2022, um desenvolvedor chamado Alex Fan (@alexfanqi) enviou o MR 17801, introduzindo um novo backend ORCJIT para o Mesa, junto com suporte para riscv64. Isso possibilitou o uso da renderização por software LLVMpipe em riscv64.
O MR não foi integrado imediatamente porque os desenvolvedores apontaram várias questões: faltava um interruptor para mudar o backend no tempo de compilação, o código precisava de otimização e não tinha cache de shaders, entre outras coisas.
Isso marcou o início de uma jornada de dois anos para integrar o backend LLVMpipe ORCJIT.
Em julho de 2022, o RISC-V SIG na comunidade openEuler descobriu este PR e o integrou, publicando um artigo sobre suas melhorias de desempenho.
No entanto, assim como o ecossistema desktop open-source em riscv64 estava vendo a luz, o rápido desenvolvimento da ramificação do Mesa fez com que o Merge Request original ficasse para trás devido à falta de manutenção, levando a diferenças e conflitos crescentes com a ramificação principal. Gradualmente, foi esquecida.
O Revezamento da Comunidade: A Faísca Indomável do Software Open Source
Em novembro de 2023, uma desenvolvedora chamada Yukari Chiba (@YukariChiba) encontrou o mesmo problema enquanto mantinha sua distribuição. Frustrada com as distribuições mainstream que mudavam para o softpipe ao enfrentar esse problema, ela decidiu abordá-lo.
O patch, há muito enterrado na lista de MRs, voltou a brilhar na tela.
No dia 1º de novembro, @YukariChiba postou uma captura de tela em um grupo mostrando o LLVMpipe rodando glxinfo com ORCJIT ativado no Phytium. No dia seguinte, postou outra captura de tela mostrando o LLVMpipe rodando glmark no PineTab-V.
Em 8 de novembro, @YukariChiba reenviou o MR 26018 para a ramificação principal do Mesa com o mesmo ID, visando fornecer um patch de referência para a versão principal do Mesa enquanto buscava sua integração.
Em breve, distribuições como deepin, ArchLinux RISC-V e AOSC OS adotaram esta versão do patch MR, tornando a experiência desktop principal do RISC-V utilizável novamente.
Em abril de 2024, Icenowy Zheng (@icenowy) adicionou cache de shaders e suporte para a arquitetura loongarch ao MR ORCJIT, o que significa que, uma vez que o backend ORCJIT seja integrado, todas as principais arquiteturas desktop terão suporte de alto desempenho para LLVMpipe.
À medida que mais desenvolvedores notaram, a integração na ramificação principal tornou-se cada vez mais provável.
O Empurrão Final e a Integração do MR
Em 19 de junho, um desenvolvedor comentou:
“Há algo pendente que está impedindo a integração disso na ramificação principal do Mesa?”
Isso quebrou o silêncio na seção de comentários do MR. No mês seguinte, colaboradores da comunidade fizeram dezenas de sugestões para melhorias. Dave Airlie (@airlied) enviou várias mudanças preparatórias e otimizações na estrutura do código para ajudar o ORCJIT a ser integrado. O remetente do MR, @YukariChiba, modificou a submissão do MR dezenas de vezes com base no feedback e enviou a versão final em 28 de junho.
Finalmente, em 16 de julho, o Merge Request 26018 passou na verificação final do CI e foi integrado na ramificação principal do Mesa, marcando o fim de um maratona open-source de dois anos envolvendo inúmeros desenvolvedores ao redor do mundo.
Acompanhamento Contínuo e Manutenção pelo deepin: Por Trás das Câmeras
O desenvolvedor com o ID @YukariChiba, que enviou o MR para o Mesa, é também um engenheiro de P&D da comunidade open-source deepin, desenvolvedor do SIG deepin-ports e um dos mantenedores do port deepin RISC-V.
Em dezembro de 2023, o deepin embalou e verificou internamente este patch atualizado e realizou testes de verificação e desempenho em placas de desenvolvimento como VisionFive2, LicheePi4A e SG2042 EVB.
No dia seguinte, o deepin integrou este patch MR ao repositório principal do Mesa, ativando o suporte ORCJIT por padrão para a arquitetura riscv64 e habilitando-o em todas as imagens de dispositivos riscv64 subsequentes.
Do patch inicial em novembro de 2023 à integração final em 16 de julho de 2024, a versão do Mesa do deepin foi atualizada de 23.1.2 para 24.1.0. Durante esse processo, o SIG deepin-ports adaptou ativamente as novas versões do Mesa e atualizou os patches, garantindo sua eficácia ao longo das iterações de versão e apoiando os testes e manutenção da funcionalidade. Esse apoio da comunidade contribuiu objetivamente para a integração upstream do Mesa.
Durante esse período, o deepin também introduziu antecipadamente patches não integrados para suporte ao loongarch e cache de shaders com base no ORCJIT, proporcionando renderização por software de maior desempenho para as duas principais arquiteturas riscv64 e loong64, aprimorando o ecossistema desktop do deepin.
No futuro, o deepin continuará a acompanhar atualizações upstream e otimizações subsequentes de software open-source como o Mesa, buscando melhorar a experiência desktop open-source nas arquiteturas amd64, arm64, riscv64 e loong64.
ISO RISC-V do deepin (LicheePi 4A, VisionFive, etc.): https://www.deepin.org/en/download/