RFR: New evacuation-locking protocol

Aleksey Shipilev shade at redhat.com
Tue Jun 23 10:55:10 UTC 2020


On 6/23/20 11:40 AM, Roman Kennke wrote:
> 1. Prune the 'old' evac-handler:
> http://cr.openjdk.java.net/~rkennke/evac-locking/webrev-prune-oom-handler.00/

*) Indenting change here:

shenandoahThreadLocalData.hpp:
-    _satb_mark_queue(&ShenandoahBarrierSet::satb_mark_queue_set()),
+   _satb_mark_queue(&ShenandoahBarrierSet::satb_mark_queue_set()),

> 2. Implementation of the new evac-locking:
> http://cr.openjdk.java.net/~rkennke/evac-locking/webrev-evac-locking.00/

*) We should probably transplant the protocol rationale comments to new files...

*) This docs are now invalid:

shenandoahForwarding.hpp:
  55   /* Tries to atomically update forwardee in $holder object to $update.
  56    * Assumes $holder points at itself.
  57    * Asserts $holder is in from-space.
  58    * Asserts $update is in to-space.
  59    *
  60    * Returns the new object 'update' upon success, or
  61    * the new forwardee that a competing thread installed.
  62    */
  63   static inline void update_forwardee(oop obj, oop update);

*) Removed newline:

shenandoahHeap.cpp:
@@ -2013,7 +2018,6 @@

           collection_set()->clear_current_index();
         }
-
         op_stw_evac();
         if (cancelled_gc()) {
           op_degenerated_fail();

*) I don't think explicit initialization of _evac_failed is needed here:

shenandoahHeap.cpp:

@@ -495,7 +498,9 @@
   _bitmap_region_special(false),
   _aux_bitmap_region_special(false),
   _liveness_cache(NULL),
-  _collection_set(NULL)
+  _collection_set(NULL),
+  _evac_locking_bitmap(NULL),
+  _evac_failed()
 {
   _heap = this;


*) Indenting is a bit off:

+  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.")         \
+                                                                            \

*) This is just (1 + ShenandoahEvacLockGranularity) * LogHeapWordSize?

_shifter(LogHeapWordSize + ShenandoahEvacLockGranularity * LogHeapWordSize)

-- 
Thanks,
-Aleksey



More information about the shenandoah-dev mailing list