Що таке LTO?
LTO є скороченням від Оптимізація часу зв'язку. Це операція, в якій компілятор затримує оптимізацію в момент зв’язування вихідних файлів, дозволяючи побачити всі файли, що складають один виконуваний файл, як єдиний файл, і таким чином застосувати оптимізацію більш ефективним способом.
Щоб побачити переваги та недоліки LTO: Тести Phoronix
Що потрібно пам’ятати
- Він нестабільний, може спричинити проблеми в деяких пакунках.
- Деякі пакунки не вдасться скомпілювати (докладніше про те, як це виправити пізніше).
- Рекомендується використовувати лінкер Gold.
- США завжди остання версія GCC.
Gold, крім підтримки розширених функцій, які роблять його більш привабливим у використанні LTO, це швидше, ніж gnu ld, особливо коли мова йде про великі програми, де це може стати В 5 разів швидше. Щоб використовувати його, запустіть:
binutils-config --linker ld.gold
Використання LTO: рекомендований метод
Замість активації LTO глобально (що може спричинити проблеми) краще активувати його в пакунках, які ми хочемо. Таким чином, лише пакети, від яких ви хочете отримати вигоду LTO вони компілюються з цією оптимізацією або, що дозволяє уникнути повільнішого часу компіляції в програмах, які не отримують від цього вигоди. Цього можна досягти наступним чином:
У каталозі / etc / portage / env ми створюємо файл 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.
Отже, використовувати LTO в пакеті нам залишається лише вказати його ім'я (повне ім'я, www-client / firefox, замість firefox) у файлі package.envразом із LTO.conf праворуч від вас. Нижче наведено приклад:
app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf
Тепер нам залишається скласти пакунки, які ми хочемо, щоб вони використовували LTO.
Використання LTO глобально (не рекомендується)
Замість того, щоб подати заявку LTO пакет за пакетом, ми можемо також застосовувати його в усьому світі (що я і використовую). Щоб застосувати його, виконайте такі дії:
Ми редагуємо файл /etc/portage/make.conf і додаємо наступне (це однакові рядки файлу 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.
У свою чергу, ми створюємо файл /etc/portage/env/no-LTO.conf і додаємо такі рядки:
CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"
І у файлі package.env ми помістимо пакунки, компіляція яких не вдається LTO. Він ось моя package.env (зверніть увагу, що я використовую nolto.conf замість не-LTO.conf).
Потрібно також додати LTO до USE змінна make.conf, це необхідно, тому що розробники Gentoo вони (повільно) додають додаткові виправлення для використання цієї оптимізації в деяких пакунках.
Після цього перейдемо до перекомпіляції всіх системних пакетів:
emerge -e @world @system --keep-going &> errores
Використовуючи –keep-going, ми говоримо Перенос ігнорувати помилки, поки &> перенаправити вихід усіх помилок у файл, який називається помилками, використовуйте цей файл, щоб побачити, які пакети не вдається скомпілювати, та додайте їх до списку package.env.
tail -f /var/log/emerge.log
І це все, сподіваюся, я не залишив жодних сумнівів, якщо про це я підбадьорюсь і напишу статтю Openmp г / о графітовий.