This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
[boehms-gc] Performance results
- From: "Laurynas Biveinis" <laurynas dot biveinis at gmail dot com>
- To: "Daniel Berlin" <dberlin at dberlin dot org>, gcc at gcc dot gnu dot org
- Date: Mon, 24 Jul 2006 11:45:27 +0300
- Subject: [boehms-gc] Performance results
Hi,
(This email is quite long; if you are not interested in performance
data, scroll down for my questions that you might be able to answer)
Below are some performance results with --with-gc=boehm. This
collector since the last posted results at
http://gcc.gnu.org/ml/gcc/2006-06/msg00729.html, has following further
changes:
http://gcc.gnu.org/ml/gcc/2006-07/msg00194.html
http://gcc.gnu.org/ml/gcc-patches/2006-07/msg00678.html
http://www.cs.aau.dk/~lauras/gcc-patch.txt
Additionally compilers [2] and [3], [5] and [6] differ in that [3] and [6] have
http://gcc.gnu.org/ml/gcc-patches/2006-07/msg00695.html
[A]: Peak GC mem usage
[B]: garbage collection, absolute usr time
[C]: garbage collection, % of usr time
[D]: user time
[E]: sys time
[F]: user bootstrap time
[G]: sys bootstrap time
All tested compilers are based on
gcc version 4.2.0 20060615 (experimental)
[1]: Cygwin baseline, ggc-page
Target: i686-pc-cygwin
Thread model: single
[2]: Cygwin ggc-boehm, with cache support, no "deletable" support
Target: i686-pc-cygwin
Thread model: single
[3]: Cygwin ggc-boehm, with cache support, with "deletable" support
Target: i686-pc-cygwin
Thread model: single
[4]: Linux baseline
Target: i686-pc-linux-gnu
Thread model: posix
[5]: Linux boehm (+cache, no "deletable" support)
Target: i686-pc-linux-gnu
Thread model: posix
[6]: Linux boehm (+cache, deletable)
Target: i686-pc-linux-gnu
Thread model: posix
-------------------------------
Bootstrap:
4F: 33m51.280s 4G: 4m23.677s
5F: 35m12.730s 5G: 4m31.270s
6F: 35m14.948s 6G: 4m29.909s
reload.c:
1A: 10636K 1B: 0.50 1C: 6% 1D: 0m8.591s 1E: 0m0.405s
2A: 15908K 2B: 0.31 2C: 4% 2D: 0m8.309s 2E: 0m0.560s
3A: 16036K 3B: 0.90 3C: 4% 3D: 0m25.576s 3E: 0m1.389s
4D: 0m4.835s 4E: 0m0.581s
5D: 0m5.036s 5E: 0m0.633s
6D: 0m5.044s 6E: 0m0.599s
combine.c:
1A: 13921K 1B: 0.71 1C: 5% 1D: 0m13.559s 1E: 0m0.748s
2A: 21716K 2B: 0.50 2C: 4% 2D: 0m13.653s 2E: 0m0.591s
3A: 21716K 3B: 1.42 3C: 4% 3D: 0m39.310s 3E: 0m1.872s
4D: 0m7.498s 4E: 0m0.832s
5D: 0m7.782s 5E: 0m0.884s
6D: 0m7.778s 6E: 0m0.848s
PR/8361 (C++, -g -O3)
1A: 67071K 1B: 5.95 1C: 9% 1D: 1m9.496s 1E: 0m2.122s
2A: 141988K 2B: 3.21 2C: 4% 2D: 1m22.169s 2E: 0m2.809s
3A: 131936K 3B: 8.64 3C: 4% 3D: 3m23.059s 3E: 0m6.138s
4D: 0m41.204s 4E: 0m3.167s
5: ICE
6: ICE
PR/19614 (C++, -g -O3)
1A: 139521K 1B: 4.42 1C: 17% 1D: 0m26.686s 1E: 0m0.873s
2A: 170848K 2B: 5.95 2C: 17% 2D: 0m35.108s 2E: 0m1.108s
3A: 170752K 3B: 10.75 3C: 15% 3D: 1m13.342s 3E: 0m1.920s
4D: 0m18.354s 4E: 0m0.400s
5D: 0m20.522s 5E: 0m0.472s
6D: 0m20.515s 6E: 0m0.456s
I hope you made sense of my A..G, 1..6 notation. Cygwin and Linux
numbers cannot be directly compared. Linux compilers were configured
with --disable-checking, Cygwin ones had default development checking
enabled. Now about the results:
1) The basic patch here for cache support with weak pointers is a big
improvement, shaving a 100M or so from C++ GC peak usage (compare with
http://gcc.gnu.org/ml/gcc/2006-06/msg00729.html)
2) The "deletable" support patch
http://gcc.gnu.org/ml/gcc-patches/2006-07/msg00695.html gives me a lot
of headache. Mem usage: for C++ it reduces peak GC memory usage, in
some other cases it does not affect it, but I don't see how setting
things to NULL can actually increase peak GC memory usage? Its running
time is another headache on Cygwin, but fits my expectations on Linux.
I will try compilers on Linux without --disable-checking, in hope to
confirm that checking is the reason for such a long running time on
Cygwin.
3) OTOH, I don't fully get "deletable" GTY flag. Can anyone explain if
things marked with it must be cleared to NULL or is it OK to leave the
old value if the object pointed by it did not get collected?
4) I have configured Linux compilers with "--disable-checking". I was
quite surprised to see that GGC times have disappeared from the "-Q
-ftime-report -fmem-report" output. Is this expected by design
behaviour? What minimum configure options will cause GGC time to
reappear?
5) While peak GC memory usage is well decreased currently, still it
has a long way to go. I want to check if that's because of ordinary
data misintrepreted as pointers. Can anyone suggest what are the
biggest atomic data structures in GCC? I could check sources
file-by-file and replace calls to GC_malloc() to atomic version where
appropriate, but if anybody knows the what atomic data structures are
the biggest ones, it would save me a lot of time.
6) Are there any data objects in GCC, that the only pointers pointing
to them point to their interiors and not the beginning? If I could
disable Boehm's interior pointer support, that should boost
performance in all respects.
7) There are two ICEs, I'm looking into them.
--
Laurynas