RFR: Fix evac-locking math
Aleksey Shipilev
shade at redhat.com
Mon Jun 29 12:28:02 UTC 2020
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
>
--
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list