LTO: nó là gì và cách sử dụng nó trên Gentoo

LTO là gì?

LTO là từ viết tắt của Tối ưu hóa thời gian liên kết. Đây là một hoạt động trong đó trình biên dịch trì hoãn việc tối ưu hóa tại thời điểm liên kết các tệp nguồn, cho phép bạn xem tất cả các tệp tạo nên một tệp thực thi duy nhất dưới dạng một tệp duy nhất và theo cách này, áp dụng tối ưu hóa theo cách hiệu quả hơn.

Để biết thêm thông tin: wiki của GCC.

Để xem những lợi ích và hạn chế của LTO: Điểm chuẩn của Phoronix

Những điều cần lưu ý

  • Nó không ổn định, nó có thể gây ra sự cố trong một số gói.
  • Một số gói sẽ không biên dịch được (thêm về cách khắc phục điều này sau).
  • Bạn nên sử dụng trình liên kết Gói Vàng.
  • Hoa Kỳ luôn luôn phiên bản mới nhất của GCC.

Gói Vàng, ngoài việc hỗ trợ các tính năng nâng cao khiến việc sử dụng trở nên hấp dẫn hơn LTO, nó nhanh hơn gnu ld, đặc biệt là khi nói đến các chương trình lớn, nơi nó có thể trở thành Nhanh gấp 5 lần. Để sử dụng nó, hãy chạy:

binutils-config --linker ld.gold


Sử dụng LTO: phương pháp được khuyến nghị

Thay vì kích hoạt LTO trên toàn cầu (có thể gây ra sự cố) tốt hơn nên kích hoạt nó trong các gói mà chúng tôi muốn. Bằng cách này, chỉ những gói bạn muốn được hưởng lợi từ LTO chúng được biên dịch với sự tối ưu hóa này hoặc tránh thời gian biên dịch chậm hơn trong các chương trình không được hưởng lợi từ nó. Điều này có thể đạt được theo cách sau:

Trong thư mục / etc / portage / env, chúng tôi tạo tệp LTO.conf và chúng tôi thêm các dòng sau:

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.

Vì vậy, để sử dụng LTO trong một gói, chúng tôi chỉ cần đặt tên của nó (tên đầy đủ, www-client / firefox, thay vì firefox) trong tệp gói.env, cùng với LTO.conf bên phải của bạn. Dưới đây là một ví dụ:

app-emulation/wine LTO.conf
www-client/firefox LTO.conf
sys-devel/gcc LTO.conf
kde-base/kdelibs LTO.conf

Bây giờ chúng ta chỉ cần biên dịch các gói mà chúng ta muốn chúng sử dụng LTO.


Sử dụng LTO trên toàn cầu (không được khuyến nghị)

Thay vì áp dụng LTO gói từng gói, chúng tôi cũng có thể áp dụng nó trên toàn cầu (đó là những gì tôi sử dụng). Để áp dụng nó, các bước cần làm như sau:

Chúng tôi chỉnh sửa tệp /etc/portage/make.conf và thêm phần sau (chúng là các dòng giống nhau của tệp 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.

Đổi lại, chúng tôi tạo tệp /etc/portage/env/no-LTO.conf và thêm các dòng sau:

CFLAGS="${CFLAGS} -fno-lto -fno-use-linker-plugin"
CXXFLAGS="${CXXFLAGS} -fno-lto -fno-use-linker-plugin"
LDFLAGS="${LDFLAGS} -fno-lto -fno-use-linker-plugin"

Và trong tệp gói.env chúng tôi sẽ đặt các gói mà quá trình biên dịch không thành công với LTO. Anh ấy đây của tôi gói.env (lưu ý rằng tôi sử dụng nolto.conf thay vì non-LTO.conf).

Chúng tôi cũng phải thêm LTO biến USE của make.conf, điều này là cần thiết vì các nhà phát triển của Gentoo họ đang (từ từ) thêm các bản vá tùy chọn để sử dụng tính năng tối ưu hóa này trong một số gói.

Khi điều này được thực hiện, hãy tiến hành biên dịch lại tất cả các gói hệ thống:

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

Bằng cách sử dụng –keep-going, chúng tôi đang nói Portage để bỏ qua lỗi, trong khi &> chuyển hướng đầu ra của tất cả các lỗi đến một tệp được gọi là lỗi, sử dụng tệp này để xem gói nào không biên dịch được và thêm chúng vào danh sách gói.env.

Dấu &> sẽ tước bỏ tất cả đầu ra của chúng ta, nếu chúng ta muốn xem đầu ra của quá trình, chúng ta phải sử dụng (dưới dạng root) lệnh này:

tail -f /var/log/emerge.log

Và đó là tất cả, tôi hy vọng tôi không để lại bất kỳ nghi ngờ, nếu điều đó tôi sẽ vui lên và viết một bài báo về Openmp và / hoặc than chì.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   msx dijo

    Gentoo, meh ...
    Hãy đi đến điều quan trọng: Graphite!

    1.    x11tete11x dijo

      Graphite xD ngu ngốc và ssensual, thứ siêu thường đó đã phá vỡ hệ thống xD của bạn, tôi nhớ rằng lần cuối cùng tôi sử dụng nó, nó đủ để thực hiện lặp lại 50 lần khi thực hiện "thông báo-gửi KDE <3" để lặp lại số 50, môi trường sẽ nổ tung mất thôi hahahahaha, vâng, tôi sẽ quay lại xD

    2.    người đi đường dijo

      Tôi đã nói rằng tôi vẫn được khuyến khích và làm một trong những Graphite. Nhưng dù sao, Graphite (và bất kỳ tối ưu hóa nào khác) hoạt động tốt nhất với LTO. Ngoài ra, không giống như LTO, Graphite và OpenMP có một vấn đề. Không phải tất cả các chương trình đều được hưởng lợi từ nó, và trong những chương trình không được hưởng lợi từ nó, hiệu suất sẽ giảm, vì vậy trong trường hợp này tốt hơn là chỉ sử dụng nó cho một vài gói.