LTO: què és i com utilitzar-lo en Gentoo

Que és LTO?

LTO és l'acrònim de Link Time Optimization. És una operació en la qual el compilador retarda les optimitzacions a l'hora de l'enllaç dels arxius font, permetent veure tots els arxius que formen un sol executable com un sol fitxer, i d'aquesta manera aplicar optimitzacions d'una manera més efectiva.

Per a més informació: la wiki de GCC.

Per veure els beneficis i inconvenients de LTO: benchmarks de Phoronix

Coses a tenir en compte

  • És inestable, pot causar problemes en alguns paquets.
  • Alguns paquets fallaran en la seva compilació (es parlarà de com solucionar això més endavant).
  • És recomanable utilitzar l'enllaçador or.
  • EUA sempre l'última versió de GCC.

or, A més de suportar característiques avançades que el fan més atractiu a l'hora de fer servir LTO, És mes ràpid que GNU ld, Especialment quan es tracta de programes grans, on pot arribar a ser 5 vegades més ràpid. Per usar-lo, executar:

binutils-config --linker ld.gold


Usant LTO: mètode recomanat

En lloc d'activar LTO globalment (la qual cosa pot causar problemes) és millor activar-lo en els paquets que vulguem. D'aquesta manera, només els paquets que vols que es beneficiïn de LTO són compilats amb aquesta optimització, o qual evita els temps de compilació mes lents en els programes que no es beneficien del mateix. Això es pot aconseguir de la següent manera:

Al directori / etc / portage / env, vam crear l'arxiu LTO.conf i li afegim les següents línies:

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.

Així, per utilitzar LTO en un paquet, únicament hem de posar el seu nom (el nom complet, www-client / firefox, en lloc de firefox) a l'arxiu package.env, Juntament amb LTO.conf a la seva dreta. A baix un exemple:

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

Ara només hem de compilar els paquets que volem que facin servir LTO.


Usant LTO globalment (no recomanat)

En lloc d'aplicar LTO paquet per paquet, també podem aplicar-globalment (que és el que jo faig servir). Per aplicar-lo, els passos a seguir són:

Editem l'arxiu /etc/portage/make.conf i afegim el següent (són les mateixes línies de l'arxiu 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.

Al seu torn, vam crear l'arxiu /etc/portage/env/no-LTO.conf i afegim les següents línies:

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

I a l'arxiu package.env posarem els paquets la compilació falli amb LTO. Ell aquí el meu package.env (Cal notar que utilitzo nolto.conf en lloc de no-LTO.conf).

També hem d'afegir LTO a la variable USE de fer.conf, Això és necessari perquè els desenvolupadors de Gentoo estan (lentament) afegint pegats opcionals per a l'ús d'aquesta optimització en alguns paquets.

Fet això, procedim a recompilar tots els paquets de sistema:

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

A l'usar -keep-going, li estem dient a porteig que ignori els errors, mentre que &> redirigeix ​​la sortida de totes les fallades a un fitxer anomenat errors, usa aquesta imatge per veure quals paquets fallen en la seva compilació i afegeix els a la llista de package.env.

El &> ens privarà de tota sortida, si volem veure la sortida de l'procés, hem de fer servir (com a root) aquesta comanda:

tail -f /var/log/emerge.log

I això és tot, espero no haver deixat cap dubte, si això m'animaré i escriuré algun article sobre OpenMP i / o grafit.


3 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   MSX va dir

    Gentoo, meh ...
    Anem a l'important: Graphite!

    1.    x11tete11x va dir

      L'estúpid i ssensual Graphite xD, aquesta cosa subnormal que rebenta el teu sistema xD, recordo que l'última vegada que el vaig fer servir, n'hi havia prou amb fer un for que itere 50 vegades fent «notify-send KDE <3" perquè en la iteracio número 50 , rebentés l'entorn a l'carall jajajajaja, això si, caminava als re pets xD

    2.    roader va dir

      Jo ja vaig dir que potser em animava i cap a un Graphite. Però de tota manera, Graphite (i qualsevol altra optimització) funciona millor amb LTO. A més, a l'contrari que LTO, Graphite i OpenMP tenen un problema. No tots els programes es veuen beneficiats d'aquest, i en els que no es veuen beneficiats, el rendiment disminueix, Pel que en aquest cas és millor fer-lo servir només per a uns pocs paquets.