Proposta: MAC0499 - Trabalho de Conclusão de Curso

Versão PDF

Orientador: Paulo Meirelles (IME-USP)
Coorientador: Rodrigo Siqueira (AMD)

Estudante: Magali Lemes

Implementando testes de unidade no kernel Linux: uma observação participante no driver de display da AMD

Introdução

Durante o desenvolvimento de software, testes são uma das formas de garantir a estabilidade do produto e evitar regressões1. No desenvolvimento do kernel Linux, isso não é diferente, uma vez que existem diferentes ferramentas internas e externas ao projeto que possibilitam sua testagem.

Das opções disponíveis para realizar testes relacionados ao kernel Linux, o objeto de interesse deste trabalho é o KUnit2, framework para testes de unidade. Testes de unidade testam individualmente os menores componentes possíveis do código, como funções e classes. Eles são importantes, pois permitem que erros sejam encontrados de forma mais perceptível, viabilizam refatorações e fornecem, de certa forma, uma documentação acerca do comportamento esperado de uma certa unidade de código.

Neste trabalho, para entendermos como implementar testes de unidade no kernel Linux, teremos como alvo o drive de GPU da AMD. Mais especificamente, como parte integrante desse driver, existe o Display Mode Library (DML), a biblioteca matemática responsável por calcular parâmetros de clock, watermark e bandwidth para a arquitetura Display Core Next (DCN)3.

Há duas opções para executar os testes escritos com o KUnit. Na primeira, utiliza-se um script em Python disponível no código-fonte do kernel Linux, que configura, executa e apresenta o resultado dos testes. A outra opção permite compilar os testes tanto de forma embutida ao kernel quanto como módulo, obtendo os resultados no log do kernel Linux com o comando dmesg. A nossa prioridade será executar os testes como módulo em um hardware real, utilizando a placa de vídeo AMD Radeon 5700 XT4, que utiliza o DCN e, consequentemente, faz uso das funções do DML.

Objetivos

O objetivo principal do trabalho é explorar e entender como implementar testes automatizados no contexto do desenvolvimento do Linux, a partir da inclusão de testes de unidade no driver de GPU da AMD. Além disso, investigaremos como gerar relatórios de cobertura de teste e garantir a integração desses testes com o IGT GPU Tools5, uma ferramenta de testes de integração do subsistema DRM (Direct Rendering Manager).

Metodologia

A fim de atingir o principal objetivo do trabalho, é necessário, primeiramente, compreender o fluxo de colaboração do kernel Linux – especificamente no subsistema de display da AMD –, realizando contribuições de código. Após a adaptação com o processo de desenvolvimento do kernel, serão produzidos testes de unidade focados em cobrir partes do DML, utilizando o framework KUnit.

Do ponto de vista metodológico, conduziremos uma observação participante, uma abordagem utilizada em pesquisas qualitativas e etnográficas. No contexto deste trabalho, estaremos próximos e interagindo com um grupo de indivíduos (no caso, desenvolvedores e mantenedores do kernel Linux, interessados ou contribuidores do desenvolvimento do driver de GPU da AMD). Com isso, aprenderemos suas práticas e colaboraremos com esse grupo por um certo período de tempo, coletando dados e sistematizando as lições aprendidas ao longo do nosso processo de contribuição.

Cronograma

Os estudos relacionados ao driver de GPU da AMD e atividades introdutórias de contribuição para o kernel Linux, para a realização deste trabalho de conclusão de curso, começaram a ser executados em janeiro de 2022. O cronograma proposto com as macro-atividades previstas está apresentado na Tabela 1.

Tabela 1: Cronograma previsto
Atividades / Meses J/F M/A M/J J/A S/O N/D
Habituação com o fluxo de desenvolvimento do Linux #
Realização de contribuições iniciais para o subsistema de display da AMD #
Estudo do KUnit para o desenvolvimento de testes unitários # #
Desenvolvimento de testes para o driver # # # #
Escrita da monografia # #

1. Modificações que causam comportamentos inesperados em um código que funcionava anteriormente.
2. https://kunit.dev/
3. https://www.kernel.org/doc/html/latest/gpu/amdgpu/display/dcn-overview.html
4. A AMD fez uma doação de placas de vídeo AMD Radeon 5700 XT para nossos estudos. Elas estão instaladas em máquinas do Laboratório de Sistemas, no CCSL-IME-USP.
5. https://gitlab.freedesktop.org/drm/igt-gpu-tools