Conjunto de patches publicado, acelerando a compilação do kernel Linux em 50-80%

Ingo Molnar, um renomado desenvolvedor do núcleo Linux e autor do planejador de tarefas CFS (Completely Fair Scheduler), propôs para discussão na lista de correio dos desenvolvedores do núcleo Linux uma série de patches que afetam mais da metade de todos os arquivos nos códigos fonte do núcleo e que garantem um aumento na velocidade da recompilação completa do núcleo em 50-80%, dependendo das configurações. A otimização implementada é notável por estar acompanhada da adição do maior conjunto de mudanças na história do desenvolvimento do núcleo — foi proposto incluir de uma só vez 2297 patches, alterando mais de 25 mil arquivos (10 mil arquivos de cabeçalho nos diretórios "include/" e "arch/*/include/" e 15 mil arquivos com códigos fonte).

O ganho de desempenho é alcançado através da mudança no método de processamento de arquivos de cabeçalho. Observa-se que, após trinta anos de desenvolvimento do núcleo, a situação dos arquivos de cabeçalho assumiu um estado preocupante devido à presença de um grande número de dependências cruzadas entre os arquivos. O trabalho na reestruturação dos arquivos de cabeçalho levou mais de um ano e exigiu uma revisão significativa da hierarquia e das dependências. Durante a reestruturação, foi realizada a separação das definições de tipos e APIs para diferentes subsistemas do núcleo.

Entre as mudanças implementadas: a separação dos arquivos de cabeçalho de alto nível entre si, a exclusão da vinculação de arquivos de cabeçalho de funções inline, a criação de arquivos de cabeçalho para tipos e APIs, a garantia de uma compilação independente dos arquivos de cabeçalho (cerca de 80 arquivos tinham dependências indiretas que interferiam na compilação, definidas por outros arquivos de cabeçalho), a adição automática de dependências aos arquivos " .h" e ".c", a otimização gradual dos arquivos de cabeçalho, o uso do modo "CONFIG_KALLSYMS_FAST=y", e a consolidação seletiva de arquivos C em blocos de compilação para reduzir o número de arquivos objeto.

Como resultado, o trabalho realizado permitiu reduzir em 1-2 ordens de magnitude o tamanho dos arquivos de cabeçalho processados na fase de pós-processamento. Por exemplo, antes da otimização, o uso do arquivo de cabeçalho "linux/gfp.h" levava à adição de 13543 linhas de código e à conexão de 303 arquivos de cabeçalho dependentes, enquanto após a otimização o tamanho foi reduzido para 181 linhas e 26 arquivos dependentes. Outro exemplo: ao pré-processar o arquivo "kernel/pid.c" sem o patch, 94 mil linhas de código são conectadas, sendo que a maior parte delas não é utilizada em pid.c. A separação dos arquivos de cabeçalho permitiu reduzir o volume de código processado em três vezes, diminuindo o número de linhas processadas para 36 mil.

Durante a recompilação total do núcleo com o comando "make -j96 vmlinux" no sistema de teste, a aplicação de patches mostrou uma redução no tempo de compilação da ramificação v5.16-rc7 de 231,34 para 129,97 segundos (de 15,5 para 27,7 compilações por hora), além de aumentar a eficiência do uso dos núcleos da CPU durante a compilação. Na compilação incremental, o efeito da otimização é ainda mais evidente — o tempo de recompilação do núcleo após a alteração dos arquivos de cabeçalho diminuiu drasticamente (de 112% a 173%, dependendo do arquivo de cabeçalho alterado). As otimizações estão disponíveis apenas para as arquiteturas ARM64, MIPS, Sparc e x86 (32 e 64 bits).

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster