LTO: qu'est-ce que c'est et comment l'utiliser sur Gentoo

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 plus d'informations: le wiki de GCC.

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.

Le &> nous privera de toute sortie, si nous voulons voir la sortie du processus, nous devons utiliser (en tant que root) cette commande:

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.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   msx dit

    Gentoo, meh ...
    Passons à l'important: le graphite!

    1.    x11tête11x dit

      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

    2.    routier dit

      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.