RFR: Non-cancellable mark loops should have sensible stride
Aleksey Shipilev
shade at redhat.com
Thu Jul 5 07:31:53 UTC 2018
Both final-mark and mark-compact are affected by this: we set the stride to 1 for non-cancellable
loops, but that is inconvenient for better pipelining and prefetching work. This also makes Full GC
mark and concurrent mark subtly different performance-wise, which complicates performance testing.
We should still do strides for non-cancellable loops too!
diff -r 4f5549ec27fb src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp Wed Jul 04 11:57:32 2018 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp Thu Jul 05 09:21:55 2018 +0200
@@ -937,7 +937,7 @@
template <class T, bool CANCELLABLE>
void ShenandoahConcurrentMark::mark_loop_work(T* cl, jushort* live_data, uint worker_id,
ParallelTaskTerminator *terminator) {
int seed = 17;
- uintx stride = CANCELLABLE ? ShenandoahMarkLoopStride : 1;
+ uintx stride = ShenandoahMarkLoopStride;
ShenandoahHeap* heap = ShenandoahHeap::heap();
ShenandoahObjToScanQueueSet* queues = task_queues();
Testing: tier1_gc_shenandoah, benchmarks
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list