How-To :: OTIMIZANDO UM POUCO MAIS AS COMPILAÇÕES NO GENTOO


Autor: Luiz Ivanchuk Santos, @luiztux

INTRODUÇÃO

Pessoal, aqui vai uma dica rápida mas que pode ser bem proveitosa para todos nós que usamos o Gentoo: otimizar nossas compilações. Esta é uma palavrinha que todos gostam… 🙂

Vejo muito por aí que o pensamento geral de quem chega ao Gentoo (e de quem está há algum tempo também) é que as otimizações ocorrem apenas no nível das CFLAGS/CXXFLAGS e no MAKEOPTS. Porém o Portage e o Make nos oferece um pouquinho mais quando se trata de compilar os pacotes. Uma coisa que talvez passe batido é que nem todos os pacotes fazem paralelismo no Make, sendo assim estaríamos “desperdiçando” nossos jobs e não estaríamos saturando o processador corretamente. Venho testando isto incessantemente, inclusive instalando o sistema novamente e pude perceber que o tempo gasto é bem menor, tanto para instalar quanto para compilar os pacotes com o sistema já instalado.

Então isto pode ser setado também quando você estiver instalando o Gentoo.

P.S: Estou assumindo que você saiba o número de Cores da tua CPU.

CONFIGURAÇÃO

É barbada! Tudo o que você tem que fazer é editar teu make.conf e adicionar o seguinte:

MAKEOPTS="-j${nº_jobs+1} -l${nº_jobs+1}"
EMERGE_DEFAULT_OPTS="--jobs={nº_jobs+1} --load-average={nº_jobs+1}"
FEATURES="parallel-fetch parallel-install sandbox"

Substitua o ${nº_jobs+1} pelo número de cores da tua CPU + 1. (Será que isto é o melhor? Terei outra dica pra vocês sobre isto).

Explicando: no MAKEOPTS todos já estão cansados de saber do -j+1, porém é interessante adicionar também a opção load-average, ou -l para controlar a quantidade de paralelismo. No EMERGE_DEFAULT_OPTS novamente definimos as mesmas opções, assim, sempre que você for compilar algum pacote, estas opções serão passadas como padrão para o emerge. E por fim, coloque as FEATURES conforme acima, isto fará com que o emerge baixe os pacotes (parallel-fetch) ao mesmo tempo em que compila e instale diversos pacotes ao mesmo tempo (parallel-install). É importante que você inclua o sandbox para proteger o sistema de possíveis loucuras, mesmo quando não estiver usando as configurações acima. 🙂

QUANDO A COMPILAÇÃO FALHAR

É válido informar que alguns pacotes não conseguem trabalhar com vários jobs. Isto é fato. Se você se deparar com um problema assim, não se desespere. Na linha de comando faça:

emerge -j1 <pacote-problemático>

Assim vai sobrescrever as configurações no make.conf. Lembre-se das prioridades… 😉 Você pode ir testando o -j até qual número de jobs o pacote aceita ser compilado.

OUTPUT DAS COMPILAÇÕES

Quando usar estas opções, não teremos mais aquelas letrinhas de compilação subindo pela tela, apenas um sumário do que está sendo compilado, por exemplo:

>>> Building (1 of 10) sys-devel/gettext-0.17 for /
>>> Building (2 of 10) sys-libs/zlib-1.2.3-r1 for /
>>> Building (3 of 10) virtual/libintl-0 for /
>>> Building (4 of 10) dev-util/unifdef-1.20 for /
>>> Installing virtual/libintl-0 to /
>>> Installing dev-util/unifdef-1.20 to /
>>> Building (5 of 10) sys-kernel/linux-headers-2.6.23-r3 for /
>>> Installing sys-libs/zlib-1.2.3-r1 to /
>>> Jobs: 3 of 10 complete, 2 running               Load avg: 3.44, 1.46, 0.69

Muito bacana não é? 🙂 🙂

Mas se você quiser mais output nas compilações, faça isto:

tail -f /var/tmp/portage/*/${PKG}*/temp/build.log

Você pode substituir o ${PKG} pelo nome do pacote que está sendo compilado, se quiser. E não se esqueça das ferramentas como qlop e genlop, que você pode ver o tempo estimado das compilações.

That’s all folks!

How-To :: OTIMIZANDO UM POUCO MAIS AS COMPILAÇÕES NO GENTOO

16 comentários sobre “How-To :: OTIMIZANDO UM POUCO MAIS AS COMPILAÇÕES NO GENTOO

  1. Marcos Oliveira disse:

    Rapaz, eu tinha muita vontade de usar o Gentoo, mas não sei se conseguiria configurá-lo desde o início.
    Instalei uma vez, mas mantê-lo no dia a dia me pareceu complicado =[

    Curtir

    1. luiztux disse:

      Olá Marcos. No início pode parecer confuso, mas com o tempo você vai aprendendo como funciona o ambiente. Se quiser testar, estamos por aí pra ajudar. =]

      Curtir

    2. Marcos, Oi! Você mexeu, acho com Funtoo, é parecido. Eu acho mais trabalhoso instalar Gentoo e deixar funcionando do jeito que quer, do que manter. manter é com Portage, e se não quer atualizar tudo, atualiza só o pacote que quer… até as dependências dá para instalar sem para ver se funciona.

      ainda, eu sempre digo, Portage “fala” com o usuário…por exemplo, uma máscara, um bloqueador etc… ele te diz o que fazer, aparece nas mensagens…

      e dá até para tirar coisas ocasionalmente, exemplo o Luiz citou sandbox… se num determinado pacote, a sandbox te atrapalhou, pode até tentar sem ela….Vc tira a sandbox, não do sistema, mas só nesse pacote que tá testando instalar, exemplo:

      # FEATURES=”-sandbox” emerge -av pacote

      com Portage vc pode tudo, controla tudo. porisso ele é legal, muito diferente….

      Curtir

  2. Testei suas configurações no make.conf do Gentoo e também no do Sabayon. E deixei, como padrão…. até o emerge –sync é mais rápido agora. Parabéns!

    Acabo de testar para compilar a última versão do Opera Developer.
    Compilou em apenas 2 minutos no Sabayon, em pt_BR.

    Hoje, 26, o teste é compilando o Chromium em pt-BR. Já deu uma boa hora, e ainda não terminou.

    Também achei mais isto, para regular mais um pouco os Jobs e o uso dos núcleos:
    https://wiki.gentoo.org/wiki/EMERGE_DEFAULT_OPTS#Parallel_builds

    Curtir

      1. uso sim. às vezes uso também ZSwap, mas esta não estava ativada.
        Mas suas modificações de compilação funcionam bem. testei para compilar equalizadoresm no Sabayon.
        veja aqui:

        Curtir

  3. Eu estou para aprontar uma instalação do Gentoo aqui, tive uns problemas com meus HDs e tive que reinstalar tudo, no momento estou configurando o meu Slack x86_64, depois vou para o x86 e com as partições extras devo instalar o Gentoo e o Void Linux.

    A minha única preocupação é como o Gentoo trata o systemd, se apenas adicionando -systemd nas USES já resolve ou se tenho que fazer alguma bruxaria extra, no Funtoo é fácil.

    Off-topic, encontrei um sistema mais complicado de lidar que o Gentoo/Funtoo e é o CRUX… uma grande variedade de pacotes que não compilam, mesmo utilizando as opções para pular algumas checagens, como tive que reinstalar meus sistemas pulo esse.

    Sobre o artigo, ótimo como sempre! obrigado por compartilhar.

    Curtir

    1. luiztux disse:

      Olá meu caro.
      Sim, apenas colocando -systemd no make.conf já basta. O sistema saberá que você não quer esta porquera globalmente.

      Ainda não testei o CRUX, mas parece ser bem legal pra desbravar. =]
      Boa sorte aí nas compilações… 😉

      Curtido por 1 pessoa

      1. É meu Gentoo já está instalado, o fiz por meio do SystemRescueCD.

        Esse meu velho Athlon64 ainda “dá no couro” rsrs compilo e instalo paralelamente varios pacotes e vai de boa.

        Dessa vez e diferentemente do Funtoo minhas USES são minimas: “bindist nls python perl -nome- systemd- udev -qt5” e selecionei o profile 3.

        No Funtoo usa-se o EPRO para a escolha dos mixes.

        Estou para pegar um FX6300 ou um i5, mas estou com uma pena de encostar essa clássica máquina! 🙂

        * não sei se vc reparou, Mas os posts do blog cujo autor não sou Eu, deixo a aprovação dos comentários à critério do autor, Ok?

        Um abraço.

        Curtir

      2. luiztux disse:

        Minhas USE no make.conf também são mínimas.. prefiro organizá-las por pacote. 😉

        Meu note principal morreu depois de 8 anos compilando..rsrsr.. também estou para pegar um melhorzinho.

        ** Estive tentando aprovar um úlitmo comentário (sobre o uso do nproc) mas não está indo. Quem sabe ele excluiu(?)…

        Curtir

    1. luiztux disse:

      Sim, já fiz. Sinceramente não vi muita diferença entre um e outro. Na minha opinião funciona melhor definindo o valor diretamente, ao invés de chamar um comando para que ele possa determinar o valor a ser passado. Pense que é semelhante às CFLAGS e CXXFLAGS, muitos fazem CXXFLAGS=${CFLAGS}, enquanto que outros preferem definir diretamente: CXXFLAGS=”-march=native -O2 -pipe -fvisibility-inlines-hidden..etc…” alegando um (sensível) ganho na compilação. Verdade ou não, ambos funcionam muito bem. Há outras formas, como definir isto (e outras variáveis) diretamente no /root/.bashrc, exportando estas variáveis, ou por pacote modificando as variáveis de ambiente. Todas funcionam muito bem e todas tem seus prós e contras. 😉

      EDIT: fico pensando se eu não me expressei bem nestas variáveis e você tenha imaginado que o “n_jobs” fosse uma variável. Na verdade, o “n_jobs” é apenas o número de processadores da tua máquina… acho que não me fiz entender ali. Õ.o Se for assim, peço desculpas pela confusão. Mas nossas ideias são as mesmas..hahahha

      Curtir

      1. Luiz Otávio disse:

        Você se fez entender bem,só foi uma duvida minha se a variável que eu tenho em mãos iria funcionar e você sanou a duvida,estou começando agora no mundo do gentoo e estou vendo o que é funcional e o que não é.Quero agradecer o retorno rápido da resposta,e perguntar sobre sites que possam me ajudar a otimizar o make.conf.

        Curtir

Deixe um comentário