As otimizações do Gentoo LDFLAGS são realmente necessárias?

3

Estou usando o Gentoo Linux .

Aqui está o meu conjunto de ferramentas:

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"

Aqui estão minhas 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...

O mundo inteiro é construído com LTO , exceto por alguns pacotes:

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

Em alguns blogs, notei autores definindo LDFLAGS em seu arquivo make.conf também, eu não fiz isso.

O sistema operacional define esses LDFLAGS de acordo com o perfil selecionado:

$ emerge --info | grep LDFLAGS

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

Desenvolvedores e mantenedores do Gentoo não recomendamos alterá-los

Eu gostaria de definir essas linhas no meu arquivo make.conf , depois reconstruir o toolchain e o mundo:

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

Haverá alguma diferença no desempenho / estabilidade?

Essas diferenças valem o tempo necessário para recompilar o mundo inteiro?

Eu gostaria de ouvir sugestões, explicações, melhores práticas de usuários / mantenedores / programadores / administradores experientes do Gentoo ...

Muito obrigado antecipadamente!

    
por user2868193 10.10.2013 / 19:57

2 respostas

1

Você não precisa alterar seus CFLAGS para adicionar -Wl, -lfto ; a menos que existam alguns pacotes que estão erroneamente usando CFLAGS para vincular, isso não ajudará (e esses pacotes devem ser reportados ao bugzilla).

No entanto, você precisa adicionar -flto ao LDFLAGS para obter todos os benefícios do LTO. LDFLAGS="- Wl, -O1 -Wl, - conforme necessário -Wl, -flto"

Na verdade, você não obterá desempenho LTO até ter a adição em seu LDFLAGS, então sim, você precisará recompilar qualquer coisa que não tenha habilitado / desabilitado explicitamente o próprio LTO.

    
por 04.12.2013 / 02:43
1

Ao fazer construções LTO, é importante passar os mesmos sinalizadores de otimização para o compilador e o vinculador LTO. Isso não significa apenas -On, mas na verdade todos os outros sinalizadores de otimização.

Quando você constrói o binário final e o link usando o próprio compilador em uma única passagem, tudo funciona. Se você fizer isso em duas passagens (libtool, estou olhando para você!), Então todo o inferno se solta.

Então, sim, é exatamente correto impor que tudo relacionado à otimização em CFLAGS e CXXFLAGS também esteja presente em LDFLAGS. E eles devem corresponder para que os resultados sejam corretos, o fato de que a documentação do gcc parece implicar o contrário é um bug relatado contra o gcc.

Se você precisa aplicá-lo sem fazer nada especial ao LDFLAGS, ou duplicá-lo no LDFLAGS depende do sistema de compilação usado pelo pacote, e se a vinculação tardia pela libtool e sua história acontecerá.

    
por 10.06.2016 / 14:25