Što je LTO?
LTO je kratica za Povezivanje vremena optimizacija. To je operacija u kojoj kompajler odgađa optimizacije u trenutku povezivanja izvornih datoteka, omogućujući vam da vidite sve datoteke koje čine jednu izvršnu datoteku kao jednu datoteku i na taj način primijenite optimizacije na učinkovitiji način.
Da biste vidjeli prednosti i nedostatke LTO: Mjerila Phoronix
Stvari koje treba imati na umu
- Nestabilan je, može uzrokovati probleme u nekim paketima.
- Neki se paketi neće uspjeti sastaviti (više o tome kako to popraviti kasnije).
- Preporuča se korištenje povezivača Zlato.
- Koristiti uvijek najnovija verzija GCC.
Zlato, uz podršku naprednim značajkama koje ga čine privlačnijim za upotrebu LTO, brže je od gnu ld, posebno kada su u pitanju veliki programi, gdje to mogu postati 5 puta brže. Da biste ga koristili, pokrenite:
binutils-config --linker ld.gold
Korištenje LTO-a: preporučena metoda
Umjesto da se aktivira LTO globalno (što može stvarati probleme) bolje ga je aktivirati u paketima koje želimo. Na ovaj način samo paketi od kojih želite imati koristi LTO oni su sastavljeni s ovom optimizacijom ili koji izbjegavaju sporija vremena kompilacije u programima koji od toga nemaju koristi. To se može postići na sljedeći način:
U direktoriju / etc / portage / env kreiramo datoteku LTO.konf i dodajemo sljedeće retke:
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.
Dakle, za upotrebu LTO u paketu samo moramo dodati njegovo ime (puno ime, www-client / firefox, umjesto firefox) u datoteku paket.envzajedno sa LTO.konf s vaše desne strane. Ispod je primjer:
app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf
Sada samo moramo sastaviti pakete koje želimo da koriste LTO.
Korištenje LTO-a globalno (ne preporučuje se)
Umjesto prijave LTO paket po paket, možemo ga primijeniti i globalno (što ja koristim). Da biste ga primijenili, slijede koraci:
Uređujemo datoteku /etc/portage/make.conf i dodajemo sljedeće (isti su redovi datoteke LTO.konf):
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.
Zauzvrat kreiramo datoteku /etc/portage/env/no-LTO.conf i dodamo sljedeće retke:
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 u spisu paket.env stavit ćemo pakete čija kompilacija ne uspije LTO. On ovdje moja paket.env (napomena koju koristim nolto.konf umjesto da ne-LTO.conf).
Moramo također dodati LTO to USE varijabla od make.conf, ovo je neophodno jer programeri Gentoo oni (polako) dodaju opcijske zakrpe za upotrebu ove optimizacije u nekim paketima.
Nakon što je to učinjeno, krenimo s ponovnim prevođenjem svih sistemskih paketa:
emerge -e @world @system --keep-going &> errores
Koristeći –neep-going, kažemo prevoženje zanemariti pogreške, dok &> preusmjerite izlaz svih grešaka u datoteku koja se naziva greške, upotrijebite ovu datoteku da biste vidjeli koji se paketi ne uspiju sastaviti i dodajte ih na popis paket.env.
tail -f /var/log/emerge.log
I to je sve, nadam se da nisam ostavio nikakve sumnje, ako ću o tome razveseliti i napisati članak Openmp i / ili Grafit.
Gentoo, ja ...
Krenimo na važno: Grafit!
Glupi i senzualni Graphite xD, ta nenormalna stvar koja puca u vašem xD sustavu, sjećam se da je zadnji put kad sam ga koristio, bilo dovoljno za to ponoviti 50 puta radeći "notify-send KDE <3" tako da u iteraciji broj 50 , okoliš će puknuti dovraga hahahahaha, da, išao sam na ponovni prd xD
Već sam rekao da sam i dalje ohrabren i napravio jedan od Graphita. Ali u svakom slučaju, Graphite (i bilo koja druga optimizacija) najbolje funkcionira s LTO-om. Također, za razliku od LTO, Graphite i OpenMP imaju problema. Nemaju svi programi koristi od toga, a onima koji nemaju koristi, performanse se smanjuju, pa je u ovom slučaju bolje koristiti ga samo za nekoliko paketa.