This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[boehms-gc] Performance results


(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, has following further

Additionally compilers [2] and [3], [5] and [6] differ in that [3] and [6] have

[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



4F: 33m51.280s 4G: 4m23.677s
5F: 35m12.730s 5G: 4m31.270s
6F: 35m14.948s 6G: 4m29.909s


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


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

2) The "deletable" support patch 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

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

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]