Re[5]: [Gc] RE: Abuse of collector...

Ivan Maidanski ivmai at
Sun May 17 04:27:39 PDT 2009


Some refinements to what I wrote a week ago:

> Hi!
> "Talbot, George" <Gtalbot at> wrote:
> > From: Ivan Maidanski [ivmai at]
> > Sent: Tuesday, May 12, 2009 2:48 AM
> > ...
> > 
> > > Try GC_ENABLE_INCREMENTAL with tests/test.c first - if it works for Your platform then the number
> > > of collection (printed at end) should be smaller (approx by 1/4) in the incremental mode. Also try
> > > to measure average pause time in different collector modes (eg., with/without PARALLEL_MARK).
> I observe approx. 1/4 on Win32 (on Linux64 I saw only near 1/8). Better compare final heap sizes with/without GC_ENABLE_INCREMENTAL.

Hmm... I observe that GC_ENABLE_INCREMENTAL is not working on Linux amd64 (unlike linux32 or SunOS on amd64, or Win32 where the printed number of collection is smaller by somewhat 1/4...1/2 in the inc mode).
Further investigation is needed for Linux64...

> > > > ...
> > > >Are there any other suggestions for bringing down the collection times?
> > 
> > > Try maximize the use of GC_malloc_atomic[_...]() instead of GC_malloc[_...]().
> > 
> > I'm doing that at this point.  Does the _ignore_off_page versions help also if possible to use them?

Also, You could try GCJ-style allocations for partially ptr-containing objects (I think only length-based descriptors could be potentially increase collection speed for 64-bit arch where the probability of false marking of an unreachable object is very low), but it's typically not an easy task as you should reorder structs fields and add vtable ptr.

> ...

> > > I will try (probably in a day or two when my cluster run is complete) to rebuild disabling
> > > parallel marking and enabling incremental collection to see if that helps.  I don't know,
> > > however, that I would be able to turn off interior pointer checks.
> (as an aside, if and when GCC gets plugins, wouldn't that be useful for generating the type information needed to avoid interior pointer checks...)
> > You can disable parallel marking without recompilation - just set env GC_MARKERS=1.

This isn't really true with the current CVS version as there's some penalty occurred due to locking unnecessary in case we have one marker thread. See the post:

> > ...
> > George T. Talbot
> > <gtalbot at>
> > 


More information about the Gc mailing list