[gclist] Re: finding object prefix from infix pointer

marc.shapiro@inria.fr marc.shapiro@inria.fr
Fri, 9 Jul 1999 14:15:40 +0200


 || Date: Fri, 9 Jul 1999 08:07:03 +0200
 || From: Francois-Rene Rideau <fare@tunes.org>
 || Subject: [gclist] finding object prefix from infix pointer
 || 
 || But it looks like we've moved from the topic of implementing read/write
 || barriers to a _completely_ different (and orthogonal, it seems to me)
 || topic of identifying object head from an infix pointer (assuming your
 || implementation uses unguarded infix pointers).

I'm interested in a discussion of the alternatives: this is a costly
operation.

Hans, how does the conservative collector do this?

The plan in our PerDiS system (not yet implemented I think) is simply to
have a fixed-size bitmap associated with every fixed-sized sub-heap.
Assuming the allocation granularity is 16 bytes, each bit in the bitmap
says whether an object starts in this granule or not.  

However scanning a bitmap is very expensive. If performance suffers, I
am thinking of using hierachical bitmaps (Finlayson and Cheriton, SOSP
1987).  The leaves use the simple encoding (bit=1 means an object starts
at this granule).  A node in the tree is a bit whose value is the "or"
of its children.  If each node has, say 16 children, a 1 bit at the 1st
level says that an object starts somewhere in the corresponding
16*16=256 bytes; to find out exactly where, look at the underlying
leaves.  A 1 bit at level 2 says that an object starts somewhere in the
underlying 16*256=4K bytes.  You can continue up more levels but (for
this particular application) there is no point in encoding more than a
page.  The largest page size I'm aware of in modern OSes is 64 Kb; the
object-start information for such a page fits into 8.5 words with just 2
levels.

 || > I'm not sure of a situation where it's more than just a minor inconvenience
 || > to do such a BIBOP lookup.
 || 
 || However, the technique doesn't work in presence of BLOBs (or even BSOBs);

Sorry, these acronyms (BIBOP, BLOB, BSOB) are unfamiliar to me. Could you
explain?

                                                Marc