From db2a5420a2e3d0f5f0f066eace37a8fd4f075802 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Wed, 3 Dec 2025 22:43:17 +0000 Subject: [PATCH] 8372861: Genshen: Override parallel_region_stride of ShenandoahResetBitmapClosure to a reasonable value for better parallelism Reviewed-by: kdnilsen, shade, wkemper --- src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp | 3 +++ src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp | 2 +- src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp | 1 + .../share/gc/shenandoah/shenandoahHeapRegionClosures.hpp | 8 ++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp index ea421365614..123bd792126 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp @@ -76,6 +76,9 @@ public: } } + // Bitmap reset task is heavy-weight and benefits from much smaller tasks than the default. + size_t parallel_region_stride() override { return 8; } + bool is_thread_safe() override { return true; } }; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 5c4d10ca8a5..6d569e9b4ce 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -1962,7 +1962,7 @@ void ShenandoahHeap::parallel_heap_region_iterate(ShenandoahHeapRegionClosure* b assert(blk->is_thread_safe(), "Only thread-safe closures here"); const uint active_workers = workers()->active_workers(); const size_t n_regions = num_regions(); - size_t stride = ShenandoahParallelRegionStride; + size_t stride = blk->parallel_region_stride(); if (stride == 0 && active_workers > 1) { // Automatically derive the stride to balance the work between threads // evenly. Do not try to split work if below the reasonable threshold. diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp index cd388ee7cf3..65e3803627c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp @@ -113,6 +113,7 @@ public: class ShenandoahHeapRegionClosure : public StackObj { public: virtual void heap_region_do(ShenandoahHeapRegion* r) = 0; + virtual size_t parallel_region_stride() { return ShenandoahParallelRegionStride; } virtual bool is_thread_safe() { return false; } }; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp index 0daf268628c..3f3b57c9bb2 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp @@ -44,6 +44,10 @@ public: } } + size_t parallel_region_stride() override { + return _closure->parallel_region_stride(); + } + bool is_thread_safe() override { return _closure->is_thread_safe(); } @@ -64,6 +68,10 @@ public: } } + size_t parallel_region_stride() override { + return _closure->parallel_region_stride(); + } + bool is_thread_safe() override { return _closure->is_thread_safe(); }