[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    RE: serviceability agent : problems when using gcc LTO (link time optimization)
From:       "Baesken, Matthias" <matthias.baesken () sap ! com>
Date:       2020-01-15 16:11:03
Message-ID: AM6PR02MB4200A3D1523DB8800DCC194893370 () AM6PR02MB4200 ! eurprd02 ! prod ! outlook ! com
[Download RAW message or body]

[Attachment #2 (text/plain)]

Hello,    here is another  comparison for the larger  JDK  shared libs,  this time  \
with the sizes  of   build with linktime-gc (--gc-sections)   added . ( just for the \
larger libs ) (  I had not  enabled  linktime-gc  for libjvm   in our  test build , \
just for the JDK libs . )

Linuxx86_64 / gcc7

normal / with -flto / with linktime-gc (--gc-sections)
-----------------------------------------------------------
752K / 760K / 752K   ./lib/libawt.so            <------------------ this one gets a \
bit larger but only with flto 472K / 456K / 468K   ./lib/libawt_xawt.so       \
<------------------ small gain 1.5M / 824K / 900K   ./lib/libfontmanager.so     \
<------------------ HUGE gain , not as good with ltgc but still good 784K / 792K / \
784K  ./lib/libfreetype.so        <------------------ this one gets a bit larger  \
(but not with ltgc) 260K / 244K / 252K   ./lib/libjavajpeg.so         \
<----------------- small gain 196K / 188K / 196K   ./lib/libjava.so
280K / 256K / 276K   ./lib/libjdwp.so             <----------------- small gain
144K / 140K / 136K   ./lib/libjimage.so
564K / 420K / 404K   ./lib/liblcms.so             <----------------- large gain ,  \
even better with  ltgc 576K / 496K / 556K   ./lib/libmlib_image.so       \
<----------------- large gain with flto , small one with ltgc 368K / 212K / 236K   \
./lib/libsplashscreen.so     <----------------- large gain 320K / 296K / 300K   \
./lib/libsunec.so            <----------------- medium gain 23M / 17M   /  --not \
enabled---    ./lib/server/libjvm.so        <----------------- big gain maybe because \
it is C++ ?


So   one can see,  that   flto   is usually  a bit better  than link-time-gc  when it \
comes to  improving lib sizes, but not always . However  linktime-gc   seems to be \
faster when comparing build times   , I did not really notice much  build  time \
slowdown because of it . ( we have it enabled  for linux  s390x  for some time in \
OpenJDK ). The  linktime-gc   also offers a nice feature  to print out the eliminated \
stuff ,   that can be used  to remove  unused code cross-platform . e.g.  the removed \
symbols  from   https://bugs.openjdk.java.net/browse/JDK-8234629    has been found \
this way .


Best regards, Matthias



Aleksei, Matthias,

thanks for the numbers. The size reduction on libjvm.so looks not bad, indeed.

Do you know if newer versions of GCC use the gold linker by default? I remember from \
some experiments which I did many years ago that gold was considerably faster \
compared to the default ld linker.

Unfortunately, the documentation I found about LTO/ld/gold [1,2] seems to be quite \
old and not very precise. Do you have gained any experience with LTO/gold and know if \
gold could maybe improve linking times with LTO?

[1] https://gcc.gnu.org/wiki/LinkTimeOptimization
[2] https://stackoverflow.com/questions/31688069/requirements-to-use-flto


Baesken, Matthias <matthias.baesken@sap.com<mailto:matthias.baesken@sap.com>> schrieb \
am Mi., 15. Jan. 2020, 07:02: Hello , I can comment on   the  code size .  This is \
what I get when comparing  a build  without  and  with  -flto .

gcc7 linux x86_64  product build, normal / with -flto
----------------------------------------------------------------------------------

du -sh on the *.so files gives :

16K / 16K      ./lib/libattach.so
48K / 44K      ./lib/libawt_headless.so
752K / 760K    ./lib/libawt.so            <------------------ this one gets a bit \
larger with flto 472K / 456K    ./lib/libawt_xawt.so       <------------------ small \
gain 36K / 32K      ./lib/libdt_socket.so
16K /16K       ./lib/libextnet.so
1.5M / 824K    ./lib/libfontmanager.so     <------------------ HUGE gain
784K / 792K    ./lib/libfreetype.so        <------------------ this one gets a bit \
larger with flto 56K / 56K      ./lib/libinstrument.so
52K / 52K      ./lib/libj2gss.so
20K / 20K      ./lib/libj2pcsc.so
92K / 84K      ./lib/libj2pkcs11.so
12K / 12k      ./lib/libjaas.so
260K / 244K    ./lib/libjavajpeg.so         <----------------- small gain
196K / 188K    ./lib/libjava.so
12K / 12K      ./lib/libjawt.so
280K / 256K    ./lib/libjdwp.so             <----------------- small gain
144K / 140K    ./lib/libjimage.so
84K / 76K      ./lib/libjli.so
16K / 16K      ./lib/libjsig.so
88K / 80K      ./lib/libjsound.so
564K / 420K    ./lib/liblcms.so             <----------------- large gain
12K / 12K      ./lib/libmanagement_agent.so
40K / 36K      ./lib/libmanagement_ext.so
36K / 32K      ./lib/libmanagement.so
576K / 496K    ./lib/libmlib_image.so       <----------------- large gain
112K / 108K    ./lib/libnet.so
100K / 100K    ./lib/libnio.so
16K  / 16K     ./lib/libprefs.so
8.0K / 8.0K    ./lib/librmi.so
60K / 60K      ./lib/libsaproc.so
36K / 32K      ./lib/libsctp.so
368K / 212K    ./lib/libsplashscreen.so     <----------------- large gain
320K / 296K    ./lib/libsunec.so            <----------------- medium gain
72K / 72K      ./lib/libverify.so
44K / 44K      ./lib/libzip.so
16K / 16K      ./lib/server/libjsig.so
23M / 17M      ./lib/server/libjvm.so        <----------------- big gain maybe \
because it is C++ ?


So  for  some libs  you see  10% and more , but not for all .   But  most  large  \
libs  like   libjvm.so,  libfontmanager.so      or   liblcms.so    we see good \
results regarding reduced code size.

I Cannot say much about performance improvements , probably it would be small .

For SPEC  you find something at

http://hubicka.blogspot.com/2019/05/gcc-9-link-time-and-inter-procedural.html

(not that these results would say too much about  JVM performance ).


Best regards, Matthias

From: Volker Simonis <volker.simonis@gmail.com<mailto:volker.simonis@gmail.com>>
Sent: Mittwoch, 15. Januar 2020 14:40
To: Aleksei Voitylov \
                <aleksei.voitylov@bell-sw.com<mailto:aleksei.voitylov@bell-sw.com>>
Cc: Baesken, Matthias <matthias.baesken@sap.com<mailto:matthias.baesken@sap.com>>; \
Magnus Ihse Bursie <magnus.ihse.bursie@oracle.com<mailto:magnus.ihse.bursie@oracle.com>>; \
serviceability-dev@openjdk.java.net<mailto:serviceability-dev@openjdk.java.net>; \
build-dev <build-dev@openjdk.java.net<mailto:build-dev@openjdk.java.net>>; \
                hotspot-dev@openjdk.java.net<mailto:hotspot-dev@openjdk.java.net>
Subject: Re: serviceability agent : problems when using gcc LTO (link time \
optimization)

While we are speaking about all the drawbacks of LTO, it's still not clear what the \
benefits are? In the very first mail Matthias mentioned that there might be \
performance improvements but that performance is not the main driving factor behind \
this initiative. So is it the reduced code size (Matthias mentioned something around \
~10%)?

It would be nice to see some real numbers on various platform for both, the \
performance improvements for native parts like JIT/GC as well as for the size \
reduction. Aleksei Voitylov \
<aleksei.voitylov@bell-sw.com<mailto:aleksei.voitylov@bell-sw.com>> schrieb am Di., \
14. Jan. 2020, 09:54:

On 14/01/2020 19:57, Baesken, Matthias wrote:
> Hello  Magnus and Aleksei,  thanks for the input .
> 
> The times you  provided really look like they make a big difference  at least for \
> people  often  building   minimal-vm  . Guess I have to measure myself a bit  \
> (maybe the difference is not that big on our linux s390x / ppc64(le) ) . 
> > If the change to enable lto by default is proposed, what would be the
> > recommended strategy for development?
> > 
> Probably  we should a)   do not enable it by default but just make sure it can be \
> enabled easily and works  for  the minimal-vm
That would be welcome. I have high hopes to LTO the VM some time by
default, and the tendency observed is that the compiler time overhead
for GCC becomes smaller. At the same time there is no reason why vendors
that invested in testing and can absorb the build time hit could provide
binaries with LTO built VMs by passing an additional option flag.
> or  b)  take it easy to disable it for local development.
> 
> Best regards, Matthias
> 
> 
> 
> > Magnus, Matthias,
> > 
> > for me, lto is a little heavyweight for development. x86_64 build time
> > with gcc 7:
> > 
> > Server 1m32.484s
> > Server+Minimal 1m42.166s
> > Server+Minimal (--with-jvm-features="link-time-opt") 5m29.422s
> > 
> > If the change to enable lto by default is proposed, what would be the
> > recommended strategy for development?
> > 
> > For ARM32 Minimal, please keep in mind that it's not uncommon to disable
> > LTO plugin in commodity ARM32 gcc compiler distributions, so for some it
> > does not matter what settings we have in OpenJDK. I believe there could
> > be other reasons for that on top of build time (bugs?).
> > 


[Attachment #3 (text/html)]

<html xmlns:v="urn:schemas-microsoft-com:vml" \
xmlns:o="urn:schemas-microsoft-com:office:office" \
xmlns:w="urn:schemas-microsoft-com:office:word" \
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" \
xmlns="http://www.w3.org/TR/REC-html40"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
	{mso-style-name:msonormal;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">Hello,&nbsp;&nbsp;&nbsp; here is another&nbsp; \
comparison for the larger&nbsp; JDK&nbsp; shared libs,&nbsp; this time&nbsp; with the \
sizes&nbsp; of&nbsp; &nbsp;build with linktime-gc (--gc-sections)&nbsp;&nbsp; added \
.<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">( just for the larger libs )<o:p></o:p></span></p> \
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">(&nbsp; I \
had not &nbsp;enabled&nbsp; linktime-gc&nbsp; for libjvm&nbsp;&nbsp; in our&nbsp; \
test build , just for the JDK libs . )<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Linuxx86_64 / \
gcc7<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">normal / with \
-flto / with linktime-gc (--gc-sections)<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">-----------------------------------------------------------<o:p></o:p></span></p>
 <p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">752K / \
760K / 752K&nbsp;&nbsp; \
./lib/libawt.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;------------------ this one gets a bit larger but only with \
flto<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">472K / 456K / 468K&nbsp;&nbsp; \
./lib/libawt_xawt.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;------------------ small \
gain<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">1.5M / 824K / 900K&nbsp; \
&nbsp;./lib/libfontmanager.so&nbsp;&nbsp;&nbsp;&nbsp; &lt;------------------ HUGE \
gain , not as good with ltgc but still good<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">784K / 792K / \
784K&nbsp; ./lib/libfreetype.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;------------------ this one gets a bit larger&nbsp; (but not with \
ltgc)<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">260K / 244K / 252K&nbsp;&nbsp; \
./lib/libjavajpeg.so \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;----------------- small \
gain<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">196K / 188K / 196K&nbsp;&nbsp; \
./lib/libjava.so<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">280K / 256K / 276K&nbsp;&nbsp; \
./lib/libjdwp.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- small gain<o:p></o:p></span></p> <p class="MsoNormal"><span \
lang="EN-US" style="mso-fareast-language:EN-US">144K / 140K / 136K&nbsp;&nbsp; \
./lib/libjimage.so<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">564K / 420K / 404K&nbsp;&nbsp; \
./lib/liblcms.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- large gain ,&nbsp; even better with&nbsp; ltgc \
<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">576K / 496K / 556K&nbsp;&nbsp; \
./lib/libmlib_image.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;----------------- \
large gain with flto , small one with ltgc<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">368K / 212K / \
236K&nbsp;&nbsp; ./lib/libsplashscreen.so&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- large gain<o:p></o:p></span></p> <p class="MsoNormal"><span \
lang="EN-US" style="mso-fareast-language:EN-US">320K / 296K / 300K&nbsp;&nbsp; \
./lib/libsunec.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- medium gain<o:p></o:p></span></p> <p class="MsoNormal"><span \
lang="EN-US" style="mso-fareast-language:EN-US">23M / 17M&nbsp;&nbsp; /&nbsp; --not \
enabled---&nbsp;&nbsp;&nbsp; \
./lib/server/libjvm.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- big gain maybe because it is C&#43;&#43; \
?<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">So&nbsp;&nbsp; one can see,&nbsp; that&nbsp;&nbsp; \
flto&nbsp;&nbsp; is usually&nbsp; a bit better&nbsp; than link-time-gc &nbsp;when it \
comes to &nbsp;improving lib sizes, but not always .<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">However&nbsp; \
linktime-gc&nbsp;&nbsp; seems to be faster when comparing build times &nbsp;&nbsp;, I \
did not really notice much&nbsp; build&nbsp; time slowdown because of it \
.<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">( we have it enabled&nbsp; for linux&nbsp; \
s390x&nbsp; for some time in OpenJDK ).<o:p></o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">The&nbsp; \
linktime-gc&nbsp;&nbsp; also offers a nice feature&nbsp; to print out the eliminated \
stuff ,&nbsp;&nbsp; that can be used&nbsp; to remove&nbsp; unused code cross-platform \
.<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US">e.g. &nbsp;the removed symbols&nbsp; from \
&nbsp;&nbsp;</span><a href="https://bugs.openjdk.java.net/browse/JDK-8234629"><span \
lang="EN-US">https://bugs.openjdk.java.net/browse/JDK-8234629</span></a><span \
lang="EN-US">&nbsp;&nbsp;&nbsp;  has been found this way .</span><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p></o:p></span></p> <p class="MsoNormal"><span \
lang="EN-US" style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Best regards, \
Matthias<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="mso-fareast-language:EN-US"><o:p>&nbsp;</o:p></span></p> <div \
style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt"> <p \
class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p> <div>
<p class="MsoNormal"><span lang="EN-US">Aleksei, Matthias,<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
</div>
<div>
<p class="MsoNormal">thanks for the numbers. The size reduction on libjvm.so looks \
not bad, indeed.<o:p></o:p></p> </div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Do you know if newer versions of GCC use the gold linker by \
default? I remember from some experiments which I did many years ago that gold was \
considerably faster compared to the default ld linker.<o:p></o:p></p> </div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Unfortunately, the documentation I found about LTO/ld/gold [1,2] \
seems to be quite old and not very precise. Do you have gained any experience with \
LTO/gold and know if gold could maybe improve linking times with LTO?<o:p></o:p></p> \
</div> <div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">[1]&nbsp;<a \
href="https://gcc.gnu.org/wiki/LinkTimeOptimization">https://gcc.gnu.org/wiki/LinkTimeOptimization</a><o:p></o:p></p>
 </div>
<div>
<p class="MsoNormal">[2]&nbsp;<a \
href="https://stackoverflow.com/questions/31688069/requirements-to-use-flto">https://stackoverflow.com/questions/31688069/requirements-to-use-flto</a><o:p></o:p></p>
 </div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div>
<p class="MsoNormal">Baesken, Matthias &lt;<a \
href="mailto:matthias.baesken@sap.com">matthias.baesken@sap.com</a>&gt; schrieb am \
Mi., 15. Jan. 2020, 07:02:<o:p></o:p></p> </div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm \
6.0pt;margin-left:4.8pt;margin-right:0cm"> <div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">Hello , I can comment on&nbsp;&nbsp; the&nbsp; code size .&nbsp; This is \
what I get when comparing&nbsp; a build&nbsp; without&nbsp; and&nbsp; with&nbsp; \
-flto .</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">gcc7 \
linux x86_64&nbsp; product build, normal / with -flto</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">----------------------------------------------------------------------------------</span><o:p></o:p></p>
 <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">du -sh \
on the *.so files gives :</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">16K / \
16K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libattach.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">48K / 44K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libawt_headless.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">752K / \
760K&nbsp;&nbsp;&nbsp; \
./lib/libawt.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;------------------ this one gets a bit larger with flto</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">472K / 456K&nbsp;&nbsp;&nbsp; \
./lib/libawt_xawt.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;------------------ small \
gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">36K / \
32K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libdt_socket.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">16K /16K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libextnet.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">1.5M / \
824K&nbsp;&nbsp;&nbsp; ./lib/libfontmanager.so&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;------------------ HUGE gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">784K / \
792K&nbsp;&nbsp;&nbsp; ./lib/libfreetype.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;------------------ this one gets a bit larger with flto</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">56K / 56K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libinstrument.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">52K / \
52K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libj2gss.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">20K / 20K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libj2pcsc.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">92K / \
84K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libj2pkcs11.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">12K / 12k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libjaas.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">260K / \
244K&nbsp;&nbsp;&nbsp; \
./lib/libjavajpeg.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- small gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">196K / \
188K&nbsp;&nbsp;&nbsp; ./lib/libjava.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">12K / \
12K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libjawt.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">280K / 256K&nbsp;&nbsp;&nbsp; \
./lib/libjdwp.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- small gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">144K / \
140K&nbsp;&nbsp;&nbsp; ./lib/libjimage.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">84K / \
76K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libjli.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">16K / 16K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libjsig.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">88K / \
80K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libjsound.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">564K / 420K&nbsp;&nbsp;&nbsp; \
./lib/liblcms.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- large gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">12K / \
12K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libmanagement_agent.so</span><o:p></o:p></p> \
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">40K / 36K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libmanagement_ext.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">36K / \
32K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libmanagement.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">576K / 496K&nbsp;&nbsp;&nbsp; \
./lib/libmlib_image.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;----------------- \
large gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">112K / \
108K&nbsp;&nbsp;&nbsp; ./lib/libnet.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">100K / \
100K&nbsp;&nbsp;&nbsp; ./lib/libnio.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">16K&nbsp; / 16K&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libprefs.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">8.0K / \
8.0K&nbsp;&nbsp;&nbsp; ./lib/librmi.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">60K / \
60K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libsaproc.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">36K / 32K&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;./lib/libsctp.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">368K / \
212K&nbsp;&nbsp;&nbsp; ./lib/libsplashscreen.so&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- large gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">320K / \
296K&nbsp;&nbsp;&nbsp; \
./lib/libsunec.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- medium gain</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">72K / \
72K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/libverify.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">44K / 44K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/libzip.so</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">16K / \
16K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./lib/server/libjsig.so</span><o:p></o:p></p> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">23M / 17M&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
./lib/server/libjvm.so&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&lt;----------------- big gain maybe because it is C&#43;&#43; \
?</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">So&nbsp; for&nbsp; some libs&nbsp; you see&nbsp; 10% and more , but not \
for all .&nbsp;&nbsp; But&nbsp; most&nbsp; large&nbsp; libs&nbsp; like&nbsp;&nbsp; \
libjvm.so,&nbsp; libfontmanager.so&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;or&nbsp; \
&nbsp;liblcms.so&nbsp;&nbsp;&nbsp; we see good  results regarding reduced code \
size.</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">I \
Cannot say much about performance improvements , probably it would be small \
.</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">For \
SPEC&nbsp; you find something at </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a \
href="http://hubicka.blogspot.com/2019/05/gcc-9-link-time-and-inter-procedural.html" \
target="_blank"><span \
lang="EN-US">http://hubicka.blogspot.com/2019/05/gcc-9-link-time-and-inter-procedural.html</span></a><o:p></o:p></p>
 <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">(not \
that these results would say too much about&nbsp; JVM performance \
).</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US">Best \
regards, Matthias</span><o:p></o:p></p> <p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span \
lang="EN-US">&nbsp;</span><o:p></o:p></p> <div style="border:none;border-left:solid \
blue 1.5pt;padding:0cm 0cm 0cm 4.0pt"> <div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span \
lang="EN-US">From:</span></b><span lang="EN-US"> Volker Simonis &lt;<a \
href="mailto:volker.simonis@gmail.com" \
target="_blank">volker.simonis@gmail.com</a>&gt; <br>
<b>Sent:</b> Mittwoch, 15. Januar 2020 14:40<br>
<b>To:</b> Aleksei Voitylov &lt;<a href="mailto:aleksei.voitylov@bell-sw.com" \
target="_blank">aleksei.voitylov@bell-sw.com</a>&gt;<br> <b>Cc:</b> Baesken, Matthias \
&lt;<a href="mailto:matthias.baesken@sap.com" \
target="_blank">matthias.baesken@sap.com</a>&gt;; Magnus Ihse Bursie &lt;<a \
href="mailto:magnus.ihse.bursie@oracle.com" \
target="_blank">magnus.ihse.bursie@oracle.com</a>&gt;; <a \
href="mailto:serviceability-dev@openjdk.java.net" \
target="_blank">serviceability-dev@openjdk.java.net</a>; build-dev &lt;<a \
href="mailto:build-dev@openjdk.java.net" \
target="_blank">build-dev@openjdk.java.net</a>&gt;; <a \
href="mailto:hotspot-dev@openjdk.java.net" \
target="_blank">hotspot-dev@openjdk.java.net</a><br> <b>Subject:</b> Re: \
serviceability agent : problems when using gcc LTO (link time \
optimization)</span><o:p></o:p></p> </div>
</div>
<p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<o:p></o:p></p> \
<div> <div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">While \
we are speaking about all the drawbacks of LTO, it's still not clear what the \
benefits are? In the very first mail Matthias mentioned that there might be \
performance improvements  but that performance is not the main driving factor behind \
this initiative. So is it the reduced code size (Matthias mentioned something around \
~10%)?<o:p></o:p></p> </div>
<div>
<p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<o:p></o:p></p> \
</div> <div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt">It would be \
nice to see some real numbers on various platform for both, the performance \
improvements for native parts like JIT/GC as well as for the size \
reduction.<o:p></o:p></p> <div>
<div>
<p class="MsoNormal" \
style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Aleksei Voitylov &lt;<a \
href="mailto:aleksei.voitylov@bell-sw.com" \
target="_blank">aleksei.voitylov@bell-sw.com</a>&gt; schrieb am Di., 14. Jan. 2020, \
09:54:<o:p></o:p></p> </div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm \
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt"> <p \
class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"><br> On \
14/01/2020 19:57, Baesken, Matthias wrote:<br> &gt; Hello&nbsp; Magnus and \
Aleksei,&nbsp; thanks for the input .<br> &gt;<br>
&gt; The times you&nbsp; provided really look like they make a big difference&nbsp; \
at least for people&nbsp; often&nbsp; building&nbsp; &nbsp;minimal-vm&nbsp; .<br> \
&gt; Guess I have to measure myself a bit&nbsp; (maybe the difference is not that big \
on our linux s390x / ppc64(le) ) .<br> &gt;<br>
&gt;&gt; If the change to enable lto by default is proposed, what would be the<br>
&gt;&gt; recommended strategy for development?<br>
&gt;&gt;<br>
&gt; Probably&nbsp; we should a)&nbsp; &nbsp;do not enable it by default but just \
make sure it can be enabled easily and works&nbsp; for&nbsp; the minimal-vm&nbsp; \
&nbsp;<br> That would be welcome. I have high hopes to LTO the VM some time by<br>
default, and the tendency observed is that the compiler time overhead<br>
for GCC becomes smaller. At the same time there is no reason why vendors<br>
that invested in testing and can absorb the build time hit could provide<br>
binaries with LTO built VMs by passing an additional option flag.<br>
&gt;&nbsp; &nbsp;or&nbsp; b)&nbsp; take it easy to disable it for local \
development.<br> &gt;<br>
&gt; Best regards, Matthias<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;&gt; Magnus, Matthias,<br>
&gt;&gt;<br>
&gt;&gt; for me, lto is a little heavyweight for development. x86_64 build time<br>
&gt;&gt; with gcc 7:<br>
&gt;&gt;<br>
&gt;&gt; Server 1m32.484s<br>
&gt;&gt; Server&#43;Minimal 1m42.166s<br>
&gt;&gt; Server&#43;Minimal (--with-jvm-features=&quot;link-time-opt&quot;) \
5m29.422s<br> &gt;&gt;<br>
&gt;&gt; If the change to enable lto by default is proposed, what would be the<br>
&gt;&gt; recommended strategy for development?<br>
&gt;&gt;<br>
&gt;&gt; For ARM32 Minimal, please keep in mind that it's not uncommon to disable<br>
&gt;&gt; LTO plugin in commodity ARM32 gcc compiler distributions, so for some it<br>
&gt;&gt; does not matter what settings we have in OpenJDK. I believe there could<br>
&gt;&gt; be other reasons for that on top of build time (bugs?).<br>
&gt;&gt;<o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</body>
</html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic