Оптимизация Gentoo LDFLAGS действительно необходима?

Я использую Gentoo Linux.

вот мой набор инструментов:

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"

вот мои CFLAGS:

$ 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...

весь мир построен с LTO, за исключением нескольких пакетов:

$ 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"

на некоторых блогах, я заметил, что авторы параметр LDFLAGS в их сделать.conf файл также, я не делал что.

операционная система устанавливает эти LDFLAGS в соответствии с выбранным профилем:

$ emerge --info | grep LDFLAGS

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

разработчики и сопровождающие Gentoo не рекомендую их менять

Я хотел бы установить эти строки в моем make.conf файл, затем перестроить цепочку инструментов и мир:

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

будет ли разница в производительности/стабильности?

несколько эти различия стоят времени, необходимого для перекомпиляции всего мира?

Я хотел бы услышать предложения, объяснения, рекомендации от опытных пользователей/сопровождающих/программистов/администраторов Gentoo...

большое спасибо заранее!

2
задан user2868193
21.05.2023 16:30 Количество просмотров материала 2435
Распечатать страницу

2 ответа

вам не нужно менять CFLAGS там, чтобы добавить - Wl, - lfto; если только некоторые пакеты ошибочно не используют CFLAGS для компоновки, это не поможет (о таких пакетах следует сообщать bugzilla).

вам, однако, нужно добавить-flto в LDFLAGS, чтобы получить полную выгоду от LTO. LDFLAGS="-от WL,-О1 -от WL,--по мере необходимости -от WL,-FL для"

вы фактически не получите представление LTO до тех пор пока вы не будете иметь добавление в ваших LDFLAGS, так да, вас нужно будет перекомпилировать все, что явно не включало / отключало LTO.

1
отвечен robbat2 2023-05-23 00:18

при построении LTO важно передавать одинаковые флаги оптимизации как компилятору, так и компоновщику LTO. Это означает не просто-на, но на самом деле все другие флаги оптимизации.

когда вы строите окончательный двоичный файл и ссылку, используя сам компилятор за один проход, все это работает. Если вы сделаете это за два прохода (libtool, я смотрю на вас! а потом начинается настоящий ад.

Да, да, это совершенно верно для обеспечения того, чтобы все оптимизация, связанная с CFLAGS и CXXFLAGS также присутствует в LDFLAGS. А они должны матч для того, чтобы результаты были правильными, тот факт, что документация gcc, по-видимому, подразумевает иное, является сообщенной ошибкой против gcc.

нужно ли применять его, не делая ничего особенного для LDFLAGS, или дублируя их в LDFLAGS, зависит от системы сборки, используемой пакетом, и произойдет ли поздняя компоновка libtool и ему подобных.

1
отвечен anonymous 2023-05-23 02:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх