Tối ưu hóa LDFLAGS Gentoo thực sự cần thiết?


3

Tôi đang sử dụng Gentoo Linux .

Đây là chuỗi công cụ của tôi:

sys-kernel/linux-headers-3.9
sys-devel/binutils-2.23.1  USE="cxx nls zlib -multislot -multitarget -static-libs {-test} -vanilla"
sys-devel/gcc-4.7.3-r1:4.7  USE="cxx fortran gtk lto mudflap (multilib) nls nptl openmp (-altivec) -doc (-fixed-point) -gcj -go -graphite (-hardened) (-libssp) -multislot -nopie -nossp -objc -objc++ -objc-gc -regression-test -vanilla"
sys-libs/glibc-2.17:2.2  USE="(multilib) -debug -gd (-hardened) -nscd -profile (-selinux) -suid -systemtap -vanilla"

Đây là CFLAGS của tôi:

$ cat /etc/portage/make.conf

CFLAGS="-march=core-avx-i -mtune=core-avx-i -O2 -pipe -flto"
CXXFLAGS="${CFLAGS}"

CHOST="x86_64-pc-linux-gnu"
# etc...

Cả thế giới được xây dựng với LTO , ngoại trừ một vài gói:

$ cat /etc/portage/package.env

dev-lang/perl no-lto
dev-libs/elfutils no-lto
dev-lang/spidermonkey no-lto
dev-libs/glib no-lto
sys-devel/llvm no-lto
media-libs/mesa no-lto
media-libs/alsa-lib no-lto
sys-apps/preload no-lto
app-text/aspell no-lto
app-text/rarian no-lto
sys-power/upower no-lto
net-libs/farstream no-lto
dev-python/notify-python no-lto
x11-libs/wxGTK no-lto
media-video/avidemux no-lto
media-gfx/inkscape no-lto
x11-base/xorg-server no-lto
x11-drivers/xf86-video-intel no-lto
net-libs/webkit-gtk no-lto
mail-client/thunderbird no-lto

$ cat /etc/portage/env/no-lto

CFLAGS="${CFLAGS} -fno-lto"
CXXFLAGS="${CXXFLAGS} -fno-lto"
LDFLAGS="${LDFLAGS} -fno-lto"

Trên một số blog tôi nhận thấy các tác giả thiết lập LDFLAGS trong tệp make.conf của họ, tôi đã không làm điều đó.

Hệ điều hành đặt các LDFLAGS này theo cấu hình đã chọn:

$ emerge --info | grep LDFLAGS

LDFLAGS="-Wl,-O1 -Wl,--as-needed"

Các nhà phát triển và bảo trì Gentoo không khuyên bạn nên thay đổi chúng

Tôi muốn đặt các dòng này trong make.conftệp của mình , sau đó xây dựng lại chuỗi công cụ và thế giới:

CFLAGS="-march=core-avx-i -mtune=core-avx-i -O2 -pipe -flto -Wl,-flto"
LDFLAGS="-Wl,-flto -Wl,-O2"

Sẽ có bất kỳ sự khác biệt trong hiệu suất / ổn định?

Là những khác biệt có giá trị thời gian cần thiết để biên dịch lại toàn bộ thế giới?

Tôi muốn nghe đề xuất, giải thích, thực tiễn tốt hơn từ người dùng / người bảo trì / lập trình viên / quản trị viên có kinh nghiệm của Gentoo ...

Cảm ơn bạn rất nhiều trước!


Từ liên kết của bạn, họ không thực sự không khuyến khích bạn thay đổi chúng. Họ chỉ nói rằng nó không cần thiết. Ngoài ra, bạn đã không thay đổi chúng. Đầu ra của emerge --infolà những gì đã được đặt, do đó, việc đặt cùng một giá trị rõ ràng không thay đổi bất cứ điều gì. Câu hỏi này có thể có nhiều hơn về chủ đề trên unix.stackexchange.com vì vậy đừng nhầm lẫn khi nó được chuyển đến đó (tài khoản từ cả hai trang web được hợp nhất nếu bạn đăng ký với cùng một xác thực),
Tim

@Tim Bạn có --as-neededtự động được thay thế bởi -Wl,-flto -Wl,-O2?
dùng2868193

Xin lỗi tôi đã bỏ lỡ sự khác biệt đó. Bạn đang thay đổi một cái gì đó họ. Nhân tiện: Bạn cũng không nên kích hoạt LTO trong LDFLAGS chứ?
Tim

Nhân tiện, -marchlà một superset của -mtune. Có cả hai là vô nghĩa.
Daniel B

Câu trả lời:


1

Bạn không cần phải thay đổi CFLAGS của mình ở đó để thêm -Wl, -lfto ; trừ khi có một số gói bị sử dụng nhầm CFLAGS để liên kết, nó sẽ không hữu ích (và các gói đó sẽ được báo cáo cho bugzilla).

Tuy nhiên, bạn cần thêm -flto vào LDFLAGS để nhận được toàn bộ lợi ích của LTO. LDFLAGS = "- Wl, -O1 -Wl, - khi cần -Wl, -flto"

Bạn sẽ không thực sự có được hiệu suất LTO cho đến khi bạn có bổ sung LDFLAGS, vì vậy, bạn sẽ cần phải biên dịch lại bất cứ thứ gì không tự bật / tắt LTO một cách rõ ràng.


1

Khi thực hiện các bản dựng LTO, điều quan trọng là phải chuyển các cờ tối ưu hóa giống nhau cho cả trình biên dịch và trình liên kết LTO. Điều này không có nghĩa chỉ là -On, mà thực sự là tất cả các cờ tối ưu hóa khác.

Khi bạn xây dựng nhị phân và liên kết cuối cùng bằng chính trình biên dịch trong một lần chạy, tất cả đều hoạt động. Nếu bạn làm điều đó trong hai lần (libtool, tôi đang nhìn bạn!) Thì tất cả địa ngục vỡ ra.

Vì vậy, vâng, chính xácđúng khi thực thi rằng mọi thứ liên quan đến tối ưu hóa trong CFLAGS và CXXFLAGS cũng có trong LDFLAGS. Và họ phải phù hợp để các kết quả là chính xác, thực tế là tài liệu gcc dường như ngụ ý khác là một lỗi được báo cáo chống lại gcc.

Việc bạn có cần thực thi nó hay không bằng cách không làm gì đặc biệt với LDFLAGS, hoặc sao chép chúng trong LDFLAGS tùy thuộc vào hệ thống xây dựng được gói sử dụng và liệu liên kết muộn của libtool và ilk của nó có xảy ra hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.