GCC 3.1 - even slower compilation and relocation
Rolf Magnus
ramagnus at t-online.de
Fri May 17 16:40:26 BST 2002
Hi,
First of all: if you aren't interested in some comparisons between gcc 2.95.3
and gcc 3.1, just stop here. This is not about the speed of the generated
executables (it's about app startup time though)
I did some testing of the newly released GCC 3.1. I was using some CVS
versions before and found some speed penalties in compilation, relocation and
a massive increase in size of debugging binaries.
Now I got the new gcc 3.1 to try out if it has become better in the release.
First, I did a complete build (not only symlinks src tools) of the current
qt-copy, once with gcc 2.95.3 and once with gcc 3.1 (CPU is Athlon XP at
1.533Ghz).
Compile time:
=============
(configure options for qt were -qt-gif -system-zlib -qt-imgfmt-mng
-system-libpng -qt-imgfmt-jpeg -system-libjpeg -no-g++-exceptions -thread
-no-xinerama -xft -debug)
output of "time make" with gcc 2.95.3:
real 34m56.576s
user 33m16.010s
sys 1m12.750s
and with gcc 3.1:
real 69m10.886s
user 65m58.620s
sys 1m49.540s
So compilation with gcc 3.1 takes twice! as much time as with 2.95.3. Someone
mentioned that I should have compiled gcc 3.1 with --disable-checking to
reduce some runtime checking overhead, but it didn't give much improvement:
real 66m59.415s
user 63m15.600s
sys 1m45.950s
Relocation times:
=================
This is the result of "LD_DEBUG=statistics designer"
gcc 2.95.3:
19610: runtime linker statistics:
19610: total startup time in dynamic loader: 99450870 clock cycles
19610: time needed for relocation: 96252974 clock cycles (96.7%)
19610: number of relocations: 11570
19610: number of relocations from cache: 19609
19610: time needed to load objects: 2912251 clock cycles (2.9%)
gcc 3.1:
19605: runtime linker statistics:
19605: total startup time in dynamic loader: 155168071 clock cycles
19605: time needed for relocation: 150826130 clock cycles (97.2%)
19605: number of relocations: 13878
19605: number of relocations from cache: 21553
19605: time needed to load objects: 4010301 clock cycles (2.5%)
So the relocation time goes up by a factor of about 1.5 with gcc 3.1. Those
are the results of a qt linked with the new binutils 2.12 -z combreloc option
that speeds up relocations. I have some older results with gcc HEAD of
2002-03-21, where the -z combreloc results were about the same. Just in case
you are interested in the effect that -z combreloc has on the relocation
time, those are the results without it:
gcc 2.95.3:
07188:
07188: runtime linker statistics:
07188: total startup time in dynamic loader: 144293736 clock cycles
07188: time needed for relocation: 124828263 clock cycles (86.5%)
07188: number of relocations: 18640
07188: number of relocations from cache: 19802
07188: time needed to load objects: 5526436 clock cycles (3.8%)
gcc HEAD as of 2002-03-21:
10263:
10263: runtime linker statistics:
10263: total startup time in dynamic loader: 208165944 clock cycles
10263: time needed for relocation: 204587996 clock cycles (98.2%)
10263: number of relocations: 40241
10263: number of relocations from cache: 2434
10263: time needed to load objects: 3252161 clock cycles (1.5%)
Debug builds:
=============
Debug binaries don't grow as much as with the CVS version I tested, but still
they get twice as big with 3.1 (with the CVS version, it was a factor of 3):
debugging version of qt compiled with 2.95.3:
-rwxr-xr-x 1 root root 28M May 17 11:27 libqt-mt.so.3.0.4
and with 3.1:
-rwxr-xr-x 1 root root 54M May 17 01:05 libqt-mt.so.3.0.4
Non-debug builds seem to be comparable in size though.
Conlcusion: gcc 3.1 is slow, even much slower than 2.95.3 :(, and app startup
times will go up again. And if you have a small disk, forget about debug
builds with gcc 3.1
More information about the kde-core-devel
mailing list