Ingo Molnar, um conhecido desenvolvedor de kernel Linux e autor do CFS Task Scheduler propôs para a discussão da lista de discussão de desenvolvimento do kernel Linux uma série de patches, afetando mais da metade de todos os arquivos na fonte do kernel e fornecendo um aumento geral na velocidade de reconstrução do kernel de 50 a 80%, dependendo da configuração.
A otimização implementada é notável por estar associado à adição do maior conjunto de alterações na história do desenvolvimento do kernel: eles se propuseram a incluir 2297 patches de uma só vez, alterando mais de 25 mil arquivos.
Ganho de desempenho é obtido alterando o método de manipulação do arquivo de cabeçalho. Deve-se notar que durante trinta anos de desenvolvimento do kernel, o estado dos arquivos de cabeçalho assumiu uma forma sombria devido à presença de um grande número de dependências cruzadas entre os arquivos.
A reestruturação dos arquivos de cabeçalho levou mais de um ano e exigiu um redesenho significativo da hierarquia e dependências. Durante a reestruturação, foi feito um trabalho para separar as definições de tipo e APIs para os diferentes subsistemas do kernel.
Tenho o prazer de anunciar a primeira versão pública do meu novo projeto "Fast Kernel Headers" no qual tenho trabalhado desde o final de 2020, que é uma reformulação abrangente da hierarquia de cabeçalho do kernel Linux e das dependências de cabeçalho, com duplo objetivo de:
- acelerar a compilação do kernel (tempos de compilação absolutos e incrementais)
- desacoplamento de tipo de subsistema e API de definições um do outro
Como a maioria dos desenvolvedores de kernel sabe, existem cerca de 10,000 cabeçalhos .h principais no kernel Linux, nas hierarquias include / e arch / * / include /. Nos últimos 30 anos, eles evoluíram para um conjunto complicado e doloroso de dependências cruzadas que carinhosamente chamamos de 'Inferno da Dependência'.
Entre as mudanças feitas estão: separação de arquivos de cabeçalho de alto nível uns dos outros, exclusão de funções inline que vinculam arquivos de cabeçalho, mapeamento de arquivos de cabeçalho para tipos e APIs, fornecimento de um conjunto separado de arquivos de cabeçalho (cerca de 80 arquivos tinham dependências indiretas que interferem na montagem, expostas através de outros arquivos de cabeçalho de arquivos), adição automática de dependências a Arquivos ".h" e ".c", otimização passo a passo de arquivos de cabeçalho, uso do modo "CONFIG_KALLSYMS_FAST = y", consolidação seletiva de arquivos C em blocos de montagem para reduzir o número de arquivos objeto.
Como resultado, o trabalho realizado permitiu reduzir o tamanho dos arquivos de cabeçalho processadosno estágio de pós-pré-processamento em 1-2 ordens de grandeza.
- Por exemplo, antes da otimização, o uso do arquivo de cabeçalho "linux/gfp.h" resultou na adição de 13543 linhas de código e na inclusão de 303 arquivos de cabeçalho dependentes, e após a otimização o tamanho foi reduzido para 181 linhas e 26 arquivos dependentes.
- Outro exemplo: o pré-processamento do arquivo "kernel / pid.c" sem patch conecta 94 mil linhas de código, a maioria das quais não são usadas no pid.c. A divisão dos arquivos de cabeçalho nos permitiu reduzir a quantidade de código processado três vezes, reduzindo o número de linhas processadas para 36.
Quando o kernel foi completamente reconstruído com o comando "make -j96 vmlinux" no sistema de teste, o patch mostrou uma redução no tempo de compilação do branch v5.16-rc7 de 231,34 para 129,97 segundos (de 15,5 para 27,7 compilações por hora) e também aumentou a eficiência do uso do núcleo da CPU durante a compilação.
Com uma compilação incremental, o efeito de otimização é ainda mais perceptível: o tempo para reconstruir o kernel após fazer alterações nos arquivos de cabeçalho foi reduzido significativamente (de 112% para 173%, dependendo do arquivo de cabeçalho alterado) .
Atualmente, as otimizações estão disponíveis apenas para arquiteturas ARM64, MIPS, Sparc e x86 (32 bits e 64 bits).
finamente se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir