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