RFR: Traversal evac assist should poll "next" marking context

Roman Kennke rkennke at redhat.com
Tue Aug 14 11:41:54 UTC 2018


Oh oops, good find! Looks good!

Am 14. August 2018 13:31:53 MESZ schrieb Aleksey Shipilev <shade at redhat.com>:
>This fixes the actual bug with evac assists and Traversal. It needs to
>poll the other context,
>otherwise it evacuates unnecessary objects on assist path:
>
>diff -r ad159fcdf3be
>src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp
>--- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp  Tue Aug
>14 13:13:39 2018 +0200
>+++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp  Tue Aug
>14 13:28:35 2018 +0200
>@@ -286,11 +286,15 @@
>// total assist costs, and can introduce a lot of evacuation latency.
>This is why we
>// only scan for _nearest_ N objects, regardless if they are eligible
>for evac or not.
>
>     size_t max = ShenandoahEvacAssist;
>     if (max > 0) {
>-      ShenandoahMarkingContext* ctx =
>_heap->complete_marking_context();
>+      // Traversal is special: it uses "next" marking context, because
>it coalesces evac with mark.
>+      // Other code uses "complete" marking, because evac happens
>after the mark.
>+      ShenandoahMarkingContext* ctx =
>_heap->is_concurrent_traversal_in_progress() ?
>+                           _heap->next_marking_context() :
>_heap->complete_marking_context();
>+
>       ShenandoahHeapRegion* r = _heap->heap_region_containing(obj);
>       assert(r->is_cset(), "sanity");
>
>HeapWord* cur = (HeapWord*)obj + obj->size() +
>BrooksPointer::word_size();
>       size_t count = 0;
>
>
>Testing: tier1_gc_shenandoah, benchmarks with evac stats
>
>Thanks,
>-Aleksey

-- 
Diese Nachricht wurde von meinem Android-Gerät mit K-9 Mail gesendet.


More information about the shenandoah-dev mailing list