Qu'est-ce que le LTO?
LTO Il est l'acronyme de Optimisation du temps de liaison. C'est une opération dans laquelle le compilateur retarde les optimisations au moment de la liaison des fichiers source, vous permettant de voir tous les fichiers qui composent un seul exécutable en un seul fichier, et de cette manière d'appliquer les optimisations de manière plus efficace.
Pour voir les avantages et les inconvénients de LTO: Références de Phoronix
Choses à garder à l'esprit
- Il est instable, cela peut poser des problèmes dans certains packages.
- Certains packages échoueront à se compiler (plus d'informations sur la résolution de ce problème plus tard).
- Il est recommandé d'utiliser l'éditeur de liens Or.
- Utiliser toujours la dernière version de GCC.
Or, en plus de prendre en charge des fonctionnalités avancées qui le rendent plus attrayant à utiliser LTO, c'est plus rapide que code d'accès GNU, en particulier lorsqu'il s'agit de grands programmes, où il peut devenir 5 fois plus rapide. Pour l'utiliser, exécutez:
binutils-config --linker ld.gold
Utilisation de LTO: méthode recommandée
Au lieu d'activer LTO globalement (ce qui peut poser des problèmes) il vaut mieux l'activer dans les packages que nous voulons. De cette façon, seuls les packages dont vous souhaitez bénéficier LTO ils sont compilés avec cette optimisation, ou ce qui évite les temps de compilation plus lents dans les programmes qui n'en bénéficient pas. Ceci peut être réalisé de la manière suivante:
Dans le répertoire / etc / portage / env, nous créons le fichier LTO.conf et nous ajoutons les lignes suivantes:
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.
Alors, pour utiliser LTO dans un package, il suffit de mettre son nom (le nom complet, www-client / firefox, au lieu de firefox) dans le fichier paquet.env, Avec LTO.conf à votre droite. Voici un exemple:
app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf
Il ne nous reste plus qu'à compiler les packages que nous voulons qu'ils utilisent LTO.
Utilisation de LTO dans le monde (non recommandé)
Au lieu d'appliquer LTO package par package, nous pouvons également l'appliquer globalement (ce que j'utilise). Pour l'appliquer, les étapes à suivre sont:
Nous éditons le fichier /etc/portage/make.conf et ajoutons ce qui suit (ce sont les mêmes lignes du fichier 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.
À notre tour, nous créons le fichier /etc/portage/env/no-LTO.conf et ajoutons les lignes suivantes:
CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"
Et dans le fichier paquet.env nous mettrons les paquets dont la compilation échoue avec LTO. Il ici mon paquet.env (notez que j'utilise nolto.conf au lieu de non-LTO.conf).
Il faut aussi ajouter LTO utiliser la variable de make.conf, cela est nécessaire car les développeurs de Gentoo ils ajoutent (lentement) des correctifs facultatifs pour l'utilisation de cette optimisation dans certains paquets.
Une fois cela fait, procédons à la recompilation de tous les packages système:
emerge -e @world @system --keep-going &> errores
En utilisant –keep-going, nous disons Portage ignorer les erreurs, tandis que &> redirige la sortie de tous les bogues vers un fichier appelé erreurs, utilisez ce fichier pour voir quels paquets échouent à compiler et ajoutez-les à la liste des paquet.env.
tail -f /var/log/emerge.log
Et c'est tout, j'espère ne pas avoir laissé de doutes, si cela je vais remonter le moral et écrire un article sur Openmp et / ou Graphite.
Gentoo, meh ...
Passons à l'important: le graphite!
Le graphite xD stupide et sensuel, cette chose sous-normale qui fait exploser votre système xD, je me souviens que la dernière fois que je l'ai utilisé, il suffisait de faire un pour cela itère 50 fois en faisant "notifier-envoyer KDE <3" pour que dans l'itération numéro 50, l'environnement va exploser en enfer hahahahaha, oui, j'allais aux re-pets xD
J'ai déjà dit que j'étais toujours encouragé et en ai fait un de Graphite. Mais de toute façon, Graphite (et toute autre optimisation) fonctionne mieux avec LTO. De plus, contrairement à LTO, Graphite et OpenMP ont un problème. Tous les programmes n'en bénéficient pas, et dans ceux qui n'en bénéficient pas, les performances diminuent, il est donc préférable dans ce cas de ne l'utiliser que pour quelques packages.