RFR: 8234525: enable link-time section-gc for linux s390x to remove unused code
Doerr, Martin
martin.doerr at sap.com
Tue Nov 26 10:43:51 UTC 2019
Hi Matthias and Erik,
I also think this is an interesting option.
I like the idea to generate smaller libraries. In addition to that, I could also imagine building with -Os (size optimized) by default and only select -O3 for performance critical files (e.g. C2's register allocation, some gc code, ...).
If we want to go into such a direction for all linux platforms and want to use this s390 only change as some kind of pipe cleaner, I think this change is fine and can get pushed.
Otherwise, I think building s390 differently and not intending to do the same for other linux platforms would be not so good.
We should only make sure the exported symbols are set up properly to avoid that this optimization throws out too much.
My 50 Cents.
Best regards,
Martin
> -----Original Message-----
> From: build-dev <build-dev-bounces at openjdk.java.net> On Behalf Of
> Baesken, Matthias
> Sent: Freitag, 22. November 2019 16:01
> To: Erik Joelsson <erik.joelsson at oracle.com>; 'build-dev at openjdk.java.net'
> <build-dev at openjdk.java.net>; core-libs-dev at openjdk.java.net
> Subject: RE: RFR: 8234525: enable link-time section-gc for linux
> s390x to remove unused code
>
> Hi Erik,
> yes it makes the build more chatty -
> our linux s390 product build log of jdk/jdk goes from ~ 60.000 lines to ~
> 123.000 lines with the patch.
>
> However the change is linux s390 only so I guess it will not disturb other
> people ( in case we bring it to more platforms later on, we could remove the
> printing or make it configurable ).
>
> Additionally the "chatty" output is used currently for eliminating unused
> functions + data cross-platform
> (see for example https://bugs.openjdk.java.net/browse/JDK-8234629 ).
>
> Best regards, Matthias
>
>
>
> >
> > Hello Matthias,
> >
> > This looks like an interesting change. If you want to enable this for
> > s390x, I'm ok with it. If it works out well, perhaps we can find a way
> > to expand this to other architectures.
> >
> > Do you really want to set --print-gc-sections by default? I would assume
> > that makes the build quite chatty.
> >
> > /Erik
> >
> > On 2019-11-21 00:54, Baesken, Matthias wrote:
> > > Hello,
> > >
> > > gcc and ld can be instructed to work together to "garbage collect" unused
> > input sections.
> > > This feature eliminates unused code from native libraries. As a
> prerequisite
> > to take full advantage of the feature,
> > > the source files need to be compiled with "-ffunction-sections -fdata-
> > sections".
> > >
> > > Details on what happens can be found in the ld documentation:
> > https://linux.die.net/man/1/ld .
> > > See the description of --gc-sections and --print-gc-sections therein.
> > > For more detailed insights there is a talk available from ELC2010:
> > https://elinux.org/images/2/2d/ELC2010-gc-sections_Denys_Vlasenko.pdf
> > >
> > > My change enables the unused code elimination on linux s390x .
> > > (on the other Linux platforms, there are still issues to be solved with the
> > serviceability agent, but we do not have the serviceability agent on linux
> > s390x).
> > >
> > > The change has 2 benefits :
> > > - native libs with unused code get smaller (some get alot smaller)
> > > some example lib sizes from linuxs390x (product build) :
> > > default settings / link-time gc-sections
> > > libmlib_image.so 556K 536K
> > > libjavajpeg.so 300K 292K
> > > libsplashscreen.so 412K 268K
> > > libfontmanager.so 1.4M 864K
> > > libjvm.so 19M 17M
> > >
> > > - the flag --print-gc-sections outputs the removed sections when calling
> > the linker;
> > > this helps a lot to find coding "waiting for" cross-platform removal.
> > >
> > >
> > > Here is an example output of --print-gc-sections for the libnet-build (linux
> > s390x) :
> > >
> > > /bin/ld: Removing unused section '.bss.my_gconf_init_func' in file
> > '/builddir/support/native/java.base/libnet/DefaultProxySelector.o' <---
> > seems to be dead
> > > /bin/ld: Removing unused section '.text.NET_ReadV' in file
> > '/builddir/support/native/java.base/libnet/linux_close.o' <---
> seems
> > to be dead, I requested cross-platform removal with
> > https://bugs.openjdk.java.net/browse/JDK-8234501
> > > /bin/ld: Removing unused section '.text.getInet6Address_scopeifname'
> in
> > file '/builddir/support/native/java.base/libnet/net_util.o' <--- seems to
> be
> > dead
> > > /bin/ld: Removing unused section '.text.getInet6Address_scopeid_set' in
> > file '/builddir/support/native/java.base/libnet/net_util.o' <--- seems to
> be
> > dead
> > > /bin/ld: Removing unused section '.text.getInetAddress_hostName' in
> file
> > '/builddir/support/native/java.base/libnet/net_util.o' <--- seems to be
> > dead
> > > /bin/ld: Removing unused section '.text.setDefaultScopeID' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <--- seems
> to
> > be dead indeed
> > > /bin/ld: Removing unused section '.text.getDefaultScopeID' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <--- seems
> to
> > be dead indeed
> > > /bin/ld: Removing unused section '.text.kernelIsV24' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <---
> > seems to be dead indeed
> > > /bin/ld: Removing unused section '.bss.ni_defaultIndexID.8722' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <--- only
> used
> > in getDefaultScopeID , which is dead
> > > /bin/ld: Removing unused section '.bss.ni_class.8721' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <--- only
> > used in getDefaultScopeID , which is dead
> > > /bin/ld: Removing unused section '.bss.vinit24' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <---
> > only used in kernelIsV24 which is dead
> > > /bin/ld: Removing unused section '.bss.kernelV24' in file
> > '/builddir/support/native/java.base/libnet/net_util_md.o' <---
> only
> > used in kernelIsV24 which is dead
> > >
> > > bug/webrev :
> > > https://bugs.openjdk.java.net/browse/JDK-8234525
> > >
> > > http://cr.openjdk.java.net/~mbaesken/webrevs/8234525.1/
> > >
> > > Thanks, Matthias
> > >
> > >
More information about the build-dev
mailing list