Sistemas operacionais

Compilação de código fonte torna programas realmente mais rápidos?

Durante a live de comemoração dos sete anos do blog Diolinux, debatemos a questão do ganho de desempenho do Gentoo através da compilação de programas. Será que isso é real mesmo?

Gentoo Linux é conhecido pelo seu desempenho baseado na estratégia de compilação de código fonte diretamente na máquia que será utilizada. A lógica é o seguinte:

Como os programas dos repositórios das distribuições são compilados em máquinas que possuem processadores diferentes da sua (algo que é incerto de se saber), isso pode acarretar em certa perda de desempenho. Portanto compilando os programas na mesma máquina que irá utilizá-lo acaba acarretando no melhor aproveitamento do desempenho.

Mas esse conceito em certo aspecto é teórico, em outro não; as próprias ferramentas de desenvolvimento do Android são disponibilizadas em forma de código fonte para poder extrair o melhor proveito do hardware após compila-la.

Somente o fato de compilar programas diretamente na máquina não é garantia melhor aproveitamento de desempenho do hardware, especialmente se o usuário não souber como fazer isso. Pode ser, na verdade, que a situação piore ao invés de melhorar. Existem mais fatores a serem considerado antes de concluirmos e julgarmos que a compilação do código fonte é o fator chave desse conceito.

Eu já havia até mesmo feito um vídeo no meu canal debatendo o assunto quando me disseram que o FreeBSD utilizando o UFS ou ZFS possuía melhor desempenho do que do Linux e expliquei em detalhes. Confiram o vídeo:

Da mesma forma que um filesystem não é a única característica que influencia no ganho de desempenho de um sistema operacional,  compilar código fonte diretamente na máquina também não. Alguns fatores que influenciam para isso são:

  • Configuração especifica para o hardware (exemplo disso é o kernel que deve ser configurado para a família correta do seu processador e não a versão genérica. Utilizar microcódigos do processador também ajuda;
  • Makefile personalizado (as comunidades Gentoo e Funtoo fazem isso muito bem);
  • Patches de correções desenvolvidos pelas próprias comunidades Gentoo e Funtoo (esse é um ponto importantíssimo que as comunidades Gentoo/Funtoo fazem adicionando seus patches para melhorar o desempenho);
  • Fazer uso de compiladores e bibliotecas corretas;
  • Filesystem
  • init system (inclusive a comunidade Gentoo criou o Openrc exatamente com esse propósito. O systemd vem apresentando melhor desempenho até mesmo que o Openrc).

Querem prova que até mesmo pacotes binários podem proporcionar bom desempenho? A própria distribuição Clear Linux é prova de fogo disso, que vem aprimorando o desempenho do Linux mesmo tendo pacotes binários, inclusive trabalhando para tornar o Steam em um programa 64 bits nativo.

 Alguns dos seus resultados podem ser conferidos no próprio Phoronix:

Teste de Benchmark Linux
Teste de Benchmark Linux
Teste de Benchmark Linux

Outros dois grandes exemplos disso são as distribuições Alpine Linux por adotar o musl ao invés da Glibc e o LLVM no lugar do GCC.

A distribuição Debian que vem ganhando melhoria de desempenho de uma versão para a outra, um dos fatores para esse sucesso também foi por estar adotando o LLVM no lugar do GCC e há planos de migrar da Glibc para a musl.

Muitas vezes distribuições source based não serão a melhor solução para o ganho de desempenho; na verdade ela pode até mesmo se tornar uma dor de cabeça ao invés de uma solução e você se frustrar. O que deve ser analisado para adoção de uma distribuição source based é a sua necessidade (quando adotar ou não) assim como o Google fez no caso do ChromeOS e a Apple vem fazendo com o iOS.

Um debate legal. É isso aí, um abraço e falou 🙂

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!