LTO: o que é e como usá-lo no Gentoo

O que é LTO?

LTO é a sigla de Otimização do tempo de link. É uma operação em que o compilador atrasa as otimizações no momento de vincular os arquivos fonte, permitindo ver todos os arquivos que constituem um único executável como um único arquivo, e desta forma aplicar as otimizações de forma mais eficaz.

Para mas informações: o wiki de GCC.

Para ver as vantagens e desvantagens de LTO: Referências de Phoronix

Coisas para ter em mente

  • É instável, pode causar problemas em alguns pacotes.
  • Alguns pacotes não conseguirão compilar (mais informações sobre como consertar isso mais tarde).
  • Recomenda-se usar o vinculador Dourado.
  • Usar sempre a última versão de GCC.

Dourado, além de oferecer suporte a recursos avançados que o tornam mais atraente de usar LTO, é mais rápido que gnu ld, especialmente quando se trata de programas grandes, onde pode se tornar 5 vezes mais rápido. Para usá-lo, execute:

binutils-config --linker ld.gold


Usando LTO: método recomendado

Em vez de ativar LTO globalmente (o que pode causar problemas) é melhor ativá-lo nos pacotes que desejamos. Dessa forma, apenas os pacotes dos quais você deseja se beneficiar LTO são compilados com esta otimização, ou o que evita tempos de compilação mais lentos nos programas que não se beneficiam dela. Isso pode ser alcançado da seguinte maneira:

No diretório / etc / portage / env, criamos o arquivo LTO.conf e adicionamos as seguintes linhas:

CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos  de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.

Então, para usar LTO em um pacote, só temos que colocar seu nome (o nome completo, www-client / firefox, em vez de firefox) no arquivo pacote.env, Juntamente com LTO.conf à sua direita. Abaixo está um exemplo:

app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf

Agora só temos que compilar os pacotes que queremos que eles usem LTO.


Usando LTO globalmente (não recomendado)

Em vez de aplicar LTO pacote por pacote, também podemos aplicá-lo globalmente (que é o que eu uso). Para aplicá-lo, as etapas a seguir são:

Editamos o arquivo /etc/portage/make.conf e adicionamos o seguinte (são as mesmas linhas do arquivo LTO.conf):

CFLAGS="${CFLAGS} -flto=5" #pon en -flto los hilos  de tu CPU + 1
CXXFLAGS="${CXXFLAGS} -flto=5" #igual que arriba
LDFLAGS="${LDFLAGS} -fuse-linker-plugin" #solo si usas Gold, es mejor.

Por sua vez, criamos o arquivo /etc/portage/env/no-LTO.conf e adicionamos as seguintes linhas:

CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"

E no arquivo pacote.env vamos colocar os pacotes cuja compilação falha com LTO. Ele aqui meu pacote.env (note que eu uso nolto.conf em vez de não-LTO.conf).

Devemos também adicionar LTO usar variável de make.conf, isso é necessário porque os desenvolvedores de Gentoo eles estão (lentamente) adicionando patches opcionais para o uso desta otimização em alguns pacotes.

Feito isso, vamos recompilar todos os pacotes do sistema:

emerge -e @world @system --keep-going &> errores

Ao usar - continue, estamos dizendo Carreto ignorar erros, enquanto &> redirecionar a saída de todos os bugs para um arquivo chamado erros, use este arquivo para ver quais pacotes falham ao compilar e adicioná-los à lista de pacote.env.

O &> nos privará de toda saída, se quisermos ver a saída do processo, devemos usar (como root) este comando:

tail -f /var/log/emerge.log

E isso é tudo, espero não ter deixado dúvidas, se é para me animar e escrever um artigo sobre Openmp e / ou Graphite.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   msx dito

    Gentoo, meh ...
    Vamos ao importante: Grafite!

    1.    x11tete11x dito

      O Grafite xD estúpido e sensual, aquela coisa subnormal que estourou o seu sistema xD, lembro que da última vez que usei, bastou fazer um para que itera 50 vezes fazendo "notificar-enviar KDE <3" para que na iteração número 50, o meio ambiente vai explodir muito hahahahaha, sim, eu estava indo para os peidos xD

    2.    caminhoneiro dito

      Já disse que ainda me animei e fiz um de Grafite. Mas de qualquer maneira, Graphite (e qualquer outra otimização) funciona melhor com LTO. Além disso, ao contrário do LTO, o Graphite e o OpenMP têm um problema. Nem todos os programas se beneficiam disso e, naqueles que não se beneficiam, o desempenho diminui, portanto, neste caso, é melhor usá-lo apenas para alguns pacotes.