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 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.
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.
Gentoo, meh ...
Anem a l'important: Graphite!
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
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.