Um patch foi enviado recentemente para o kernel Linux que visa introduzir opções de configuração específicas para otimizar a compilação do kernel em diferentes níveis de microarquitetura x86_64. A ideia é aprimorar o desempenho em sistemas modernos da Intel e AMD. No entanto, essa proposta já encontrou críticas significativas dos desenvolvedores upstream do kernel e pode não ser aceita no kernel principal.
Proposta do patch
O patch adiciona novos níveis de recurso x86_64 v2, v3 e v4 como opções no Kconfig. Essas opções permitem que, ao compilar o kernel com os compiladores GCC e LLVM Clang mais recentes, sejam configuradas instruções como “-march=x86-64-v4”, otimizando a compilação para sistemas modernos.
A microarquitetura x86_64-v2 corresponde a processadores Intel Nehalem e AMD Bulldozer ou mais recentes, que suportam instruções SSE4.1/SSE4.2. A versão x86_64-v3 abrange processadores Intel Haswell e AMD Excavator, incluindo AVX/AVX2, BMI2 e outras instruções modernas. Já o x86_64-v4 adiciona suporte para AVX-512, uma tecnologia presente em CPUs mais recentes.
Desafios e críticas
Apesar de as instruções x86_64 v2/v3/v4 serem eficazes para otimizar a compilação de código de aplicativos, o impacto no kernel Linux parece ser muito menor. O código do kernel já inclui otimizações manuais em Assembly, e os compiladores já fazem boa parte do trabalho de otimização.
O engenheiro da Intel, Dave Hansen, levantou várias questões sobre a real utilidade dessas opções para os usuários finais, apontando que muitos usuários poderiam ficar confusos com essas configurações. Ele também destacou que o uso do parâmetro “-march” pode gerar binários que não funcionam em CPUs mais antigas, o que seria prejudicial.
Por outro lado, o engenheiro da AMD, Borislav Petkov, criticou o patch, afirmando que propostas semelhantes já surgiram antes, mas não trouxeram benefícios significativos ao código do kernel. Ele também destacou que as otimizações específicas de microarquitetura não apresentam impacto relevante na geração de código do kernel, já que o compilador realiza as principais otimizações necessárias.
Futuro incerto
Até o momento, parece que o patch não conta com suporte suficiente dos desenvolvedores upstream para ser incorporado ao kernel principal. A comunidade sugere que as variáveis de ambiente KCFLAGS/KCPPFLAGS já permitem a configuração de opções como “-march=x86-64-v4”, oferecendo o mesmo impacto sem a necessidade de complexidade adicional no Kconfig.