FERRAMENTAS LINUX: O -O3 Compiler Optimization Level ainda é considerado muito inseguro para o kernel Linux

sábado, 5 de junho de 2021

O -O3 Compiler Optimization Level ainda é considerado muito inseguro para o kernel Linux

 

Confira !!

Devido a versões não muito antigas do GNU Compiler Collection (GCC), possivelmente gerando código ruim com o nível de otimização do compilador "-O3" e às vezes não havendo benefícios de desempenho, Linus Torvalds continua contra o uso deste sinalizador de otimização ao compilar o kernel Linux.

Enviado nesta semana como parte das correções de rede para o kernel Linux 5.13, foram as correções do WireGuard que, entre elas, abandonaram a compilação do módulo WireGuard com o sinalizador C "-O3".

O desenvolvedor líder do WireGuard, Jason Donenfeld, vinha criando o WireGuard com o nível de otimização "-O3" desde o início do projeto e estudou o código gerado no passado. Embora ele não tenha testemunhado casos de código inválido sendo gerado a partir do uso de "-O3", devido à orientação de Linus Torvalds, ele abandonou a opção daqui para frente.

A orientação "-O3 em geral não é seguro" de Torvalds deriva deste recente thread do kernel, onde alguns desenvolvedores discutiram o uso de -O3, mas também passaram "-fnotree-loop-vetorize" para contornar algumas versões do GCC, possivelmente gerando código ruim em o nível de otimização mais alto.

Naquele e-mail recente, Torvalds resumiu sua perspectiva atual de -O3:

Tem sido historicamente terrivelmente cheio de erros. Ficou melhor, mas este caso mostra claramente que "ficou melhor" realmente não é uma barra tão alta.

Poucos projetos usam -O3, o que obviamente é parte do motivo pelo qual ele tem bugs. Mas a outra parte do motivo pelo qual é problemático é que a vetorização é simplesmente muito complicada e, honestamente, a julgar pelo último relatório, o pessoal do gcc não se preocupa em ser cuidadoso. Eles literalmente estão ok com a geração intencional de uma verificação de intervalo fora de um, porque "é um comportamento indefinido".

Com esse tipo de mentalidade, pessoalmente não estou inclinado a dizer "claro, use -O3". Sabemos que tem bugs até para os casos bem definidos.

Portanto, o módulo do kernel do WireGuard avançando não será construído em -O3. LZ4 e Zstd permanecem os únicos outros usuários conhecidos do código do kernel sendo compilado com -O3.

Dada a cadência lenta de muitos fornecedores mudando para novas versões do compilador e ainda mais antes que os mantenedores do kernel se sintam confortáveis ​​em abandonar o suporte à versão do compilador antigo, provavelmente levará anos antes que o kernel do Linux considere seguro usar "-O3" por padrão - curto de verificação de versão ou apenas habilitá-lo para Clang ou outras condições consideradas seguras.






Fonte

Até a próxima !!

Nenhum comentário:

Postar um comentário