RFR: Fix evac-locking math

Roman Kennke rkennke at redhat.com
Mon Jun 29 12:35:42 UTC 2020


Looks good to me, thank you!

Roman

> 	Error verifying signature: Cannot verify message signature:
> Incorrect message format
> Resending for Roman's convenience.
> 
> -Aleksey
> 
> On 6/29/20 11:23 AM, Aleksey Shipilev wrote:
> > This is destined to sh/jdk sandbox.
> > 
> > I believe current sizing math mismatches the intent. We already
> > compute bitmap index from the *word
> > size*, which means shifting that to LogHeapWordSize is incorrect.
> > What we have now in the sandbox is
> > actually 2^3 = 8 heap words per lock bit.
> > 
> > This reflects it better:
> > 
> > ---
> > a/src/hotspot/share/gc/shenandoah/shenandoahEvacLockingBitmap.hpp  
> >  Tue Jun 23 18:07:20 2020 +0200
> > +++
> > b/src/hotspot/share/gc/shenandoah/shenandoahEvacLockingBitmap.hpp  
> >  Mon Jun 29 11:12:00 2020 +0200
> > @@ -44,19 +44,19 @@
> >   */
> >  class ShenandoahEvacLockingBitmap : public CHeapObj<mtGC> {
> >  private:
> >    MemRegion _covered;    // The heap area covered by this bitmap.
> >    const int _shifter;    // Shift amount from heap index to bit
> > index in the bitmap.
> > -  CHeapBitMap _bm;        // The actual bitmap.
> > +  CHeapBitMap _bm;       // The actual bitmap.
> > 
> >    // Convert from address to bit offset.
> >    inline size_t addr_to_offset(const HeapWord* addr) const;
> > 
> >  public:
> >    ShenandoahEvacLockingBitmap(MemRegion heap) :
> >    _covered(heap),
> > -  _shifter((1 + ShenandoahEvacLockGranularity) * LogHeapWordSize),
> > +  _shifter(ShenandoahEvacLockGranularity),
> >    _bm(_covered.word_size() >> _shifter, mtGC) {
> >  }
> > 
> >    inline void acquire(oop obj);
> >    inline void release(oop obj);
> > diff -r aeb9d445884d
> > src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp
> > --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp    Tue
> > Jun 23 18:07:20 2020 +0200
> > +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp    Mon
> > Jun 29 11:12:00 2020 +0200
> > @@ -320,14 +320,16 @@
> >                                                                    
> >           \
> >    experimental(uintx, ShenandoahSATBBufferFlushInterval,
> > 100,               \
> >            "Forcefully flush non-empty SATB buffers at this
> > interval. "      \
> >            "Time is in
> > milliseconds.")                                       \
> >                                                                    
> >           \
> > -  experimental(uintx, ShenandoahEvacLockGranularity,
> > 0,                     \
> > -          "How coarse to make evac-locking. Default 0 means
> > "               \
> > -          "per-HeapWord-locking, higher value make locking coarser
> > "        \
> > -          "in 2-exponent steps, e.g. one lock per 2^N heap
> > words.")         \
> > +  experimental(uintx, ShenandoahEvacLockGranularity,
> > 3,                     \
> > +          "Defines the coarseness of evac-locking bitmap. Measured
> > in "     \
> > +          "power-of-two steps. Zero means per-HeapWord-locking,
> > default 3 " \
> > +          "means one lock per 2^3 = 8 heap words. Larger values
> > improve "   \
> > +          "native footprint at expense of more potential
> > contention during "\
> > +          "evacuation.")                                          
> >           \
> >                                                                    
> >           \
> >    diagnostic(bool, ShenandoahPreclean,
> > true,                                \
> >            "Do concurrent preclean phase before final mark: process
> > "        \
> >            "definitely alive references to avoid dealing with them
> > during "  \
> >            "pause.")                                               
> >           \
> > 
> > Testing: hotspot_gc_shenandoah
> > 
> 
> 



More information about the shenandoah-dev mailing list