Compilando o GNU / Linux com otimização -O3

18

Diz-se que a compilação de ferramentas GNU e o kernel do Linux com a opção de otimização -O3 gcc produzirão bugs estranhos e divertidos. É verdade? Alguém já tentou ou é apenas uma farsa?

    
por uray 04.09.2010 / 23:53

6 respostas

7

Ele é usado no Gentoo e eu não notei nada incomum.

    
por 05.09.2010 / 06:13
17

-O3 tem várias desvantagens:

  1. Primeiro, geralmente, ele produz um código mais lento que -O2 ou -Os . Às vezes, ele produz um código mais longo devido ao desenrolar do loop, o que pode ser mais lento devido ao pior desempenho de cache do código.
  2. Como foi dito, às vezes produz código errado. Pode ser devido a erro na otimização ou erro no código (como ignorar o aliasing estrito). Como o código do kernel às vezes é e às vezes tem que ser 'inteligente', eu diria que é possível que algum desenvolvedor do kernel tenha cometido algum erro. Eu experimentei vários problemas estranhos, como o travamento de utilitários do userspace, quando eu compilei o kernel com o gcc 4.5, que naquele momento era estável. Eu ainda uso o gcc 4.4 para o kernel e vários utilitários de espaço de usuário selecionados devido a vários bugs. O mesmo pode ser aplicado para -O3 .
  3. Eu não acho que isso ofereça muito benefício para o kernel do Linux. O kernel não faz cálculos pesados e, em alguns casos, é otimizado com a montagem. -O3 flag não alterará o custo de troca de contexto ou velocidade de E / S. Não acho que algo como < 0,1% de aumento no desempenho geral valha a pena.
por 05.09.2010 / 14:30
6

Observe que grandes blocos do toolchain (glibc em particular) flat out não compilam se você alterar os níveis de otimização. O sistema de compilação é configurado para ignorar suas preferências -O para essas seções na maioria das distribuições sãs.

Simplificando, certos recursos fundamentais da biblioteca e do sistema operacional dependem do código que está realmente fazendo o que está sendo dito, e não do que seria mais rápido em muitos casos. -fgcse-after-reload em particular (ativado por -O3) pode causar problemas estranhos.

    
por 05.09.2010 / 21:40
4

Nos últimos 10 anos, tenho executado vários sistemas Gentoo com mais de 1.000 pacotes usando -O3 -march=native globalmente e ainda não corri em nenhum desses problemas místicos de estabilidade que -O3 deveria ter. Os benchmarks de aplicativos intensivos de CPU (como aplicativos de matemática / ciências) mostram consistentemente -O3 para produzir um código mais rápido, afinal, seria inútil se não o fizesse. Para a maioria dos aplicativos de desktop, CFLAGS não importa muito, de qualquer forma, já que eles são vinculados a E / S, mas é muito importante para o material do servidor que está limitado à CPU.

    
por 28.09.2014 / 11:27
3

-O3 usa algumas otimizações agressivas que só são seguras se certas suposições sobre o uso do registro, como os quadros de pilha são interagidos, e a reentrada da função são verdadeiras, e essas suposições não são garantidas em algum código como o kernel, especialmente quando A montagem inline é usada (como em algumas partes de baixo nível do kernel e seus módulos de drivers).

    
por 05.09.2010 / 03:00
0

Enquanto você pode usar o -O3 e outros botões de otimização na maioria dos aplicativos (e isso pode resultar em melhorias de velocidade), eu hesitaria em usar esses ajustes no próprio kernel ou na ferramenta. corrente necessária para construí-lo (compilador, binutils, etc.).

Pense nisso: um ganho de desempenho de 5% dos subsistemas raid e ext3 vale a pena no travamento do sistema ou possível perda de dados e / ou corrupção?

Ajuste todos os botões desejados para aquela porta Quake que você está tocando ou os codecs de áudio / vídeo que você usa para copiar sua coleção de DVD para arquivos divx. Você provavelmente verá uma melhora. Apenas não mexa no kernel, a menos que você tenha tempo a perder e os dados que você pode perder.

    
por 05.09.2010 / 02:25