LTO: τι είναι και πώς να το χρησιμοποιήσετε στο Gentoo

Τι είναι το LTO;

LTO είναι το αρκτικόλεξο για Βελτιστοποίηση χρόνου σύνδεσης. Πρόκειται για μια λειτουργία στην οποία ο μεταγλωττιστής καθυστερεί τις βελτιστοποιήσεις τη στιγμή της σύνδεσης των αρχείων προέλευσης, επιτρέποντάς σας να δείτε όλα τα αρχεία που συνθέτουν ένα μόνο εκτελέσιμο ως ενιαίο αρχείο και με αυτόν τον τρόπο εφαρμόστε βελτιστοποιήσεις με πιο αποτελεσματικό τρόπο.

Για περισσότερες πληροφορίες: το wiki του GCC.

Για να δείτε τα οφέλη και τα μειονεκτήματα του LTO: Σημεία αναφοράς για Phoronix

Πράγματα που πρέπει να θυμάστε

  • Είναι ασταθές, μπορεί να προκαλέσει προβλήματα σε ορισμένα πακέτα.
  • Ορισμένα πακέτα δεν θα μεταγλωττιστούν (περισσότερα για το πώς να το διορθώσετε αργότερα).
  • Συνιστάται η χρήση του συνδέσμου Χρυσό.
  • ΗΠΑ πάντοτε η τελευταία έκδοση του GCC.

Χρυσό, εκτός από την υποστήριξη προηγμένων λειτουργιών που το καθιστούν πιο ελκυστικό στη χρήση 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) στο αρχείο pack.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"

Και στο αρχείο pack.env θα βάλουμε τα πακέτα των οποίων η συλλογή αποτυγχάνει LTO. Αυτός εδώ μου pack.env (σημειώστε ότι χρησιμοποιώ nolto.conf αντί για όχι-LTO.conf).

Πρέπει επίσης να προσθέσουμε LTO στη μεταβλητή USE του κατασκευάζω.conf, αυτό είναι απαραίτητο επειδή οι προγραμματιστές του Gentoo Προσθέτουν (αργά) προαιρετικά μπαλώματα για τη χρήση αυτής της βελτιστοποίησης σε ορισμένα πακέτα.

Μόλις γίνει αυτό, ας προχωρήσουμε στην ανασύνθεση όλων των πακέτων συστήματος:

emerge -e @world @system --keep-going &> errores

Χρησιμοποιώντας το –ke-going, λέμε Μεταφορά να αγνοήσει τα λάθη, ενώ &> ανακατευθύνετε την έξοδο όλων των σφαλμάτων σε ένα αρχείο που ονομάζεται σφάλματα, χρησιμοποιήστε αυτό το αρχείο για να δείτε ποια πακέτα δεν μπορούν να μεταγλωττίσουν και να τα προσθέσετε στη λίστα των pack.env.

Το &> θα μας στερήσει κάθε έξοδο, αν θέλουμε να δούμε την έξοδο της διαδικασίας, πρέπει να χρησιμοποιήσουμε (ως root) αυτήν την εντολή:

tail -f /var/log/emerge.log

Και αυτό είναι όλο, ελπίζω ότι δεν έχω αφήσει αμφιβολίες, αν αυτό θα χαροποιήσω και θα γράψω ένα άρθρο Openmp και / ή γραφίτης.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   MSX dijo

    Gentoo, ε ...
    Ας πάμε στο σημαντικό πράγμα: Graphite!

    1.    x11tete11x dijo

      Το ηλίθιο και αισθησιακό γραφίτη xD, αυτό το μη φυσιολογικό πράγμα που διαρρηγνύει το σύστημα xD σας, θυμάμαι ότι την τελευταία φορά που το χρησιμοποίησα, ήταν αρκετό να κάνω ένα για αυτό επαναλαμβάνει 50 φορές κάνοντας "ειδοποίηση-αποστολή KDE <3" έτσι ώστε σε επανάληψη νούμερο 50, το περιβάλλον θα σπάσει στην κόλαση χαχαχαχαχα, ναι, πήγαινα στο XD farts

    2.    οδικός dijo

      Είπα ήδη ότι με ενθάρρυνε ακόμα και έφτιαξα ένα από το Graphite. Ωστόσο, το Graphite (και οποιαδήποτε άλλη βελτιστοποίηση) λειτουργεί καλύτερα με το LTO. Επίσης, σε αντίθεση με το LTO, το Graphite και το OpenMP έχουν πρόβλημα. Δεν επωφελούνται όλα τα προγράμματα και σε αυτά που δεν επωφελούνται από αυτήν, η απόδοση μειώνεται, οπότε σε αυτήν την περίπτωση είναι καλύτερο να το χρησιμοποιήσετε μόνο για λίγα πακέτα.