Skip to content

Commit 01bd7e4

Browse files
author
Xiaolong Peng
committedFeb 27, 2025
8350314: Shenandoah: Capture thread state sync times in GC timings
Reviewed-by: ysr, shade, wkemper
1 parent 4522f12 commit 01bd7e4

6 files changed

+40
-7
lines changed
 

‎src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,11 @@ void ShenandoahConcurrentGC::op_init_mark() {
688688
if (ShenandoahPacing) {
689689
heap->pacer()->setup_for_mark();
690690
}
691+
692+
{
693+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::init_propagate_gc_state);
694+
heap->propagate_gc_state_to_all_threads();
695+
}
691696
}
692697

693698
void ShenandoahConcurrentGC::op_mark_roots() {
@@ -755,6 +760,11 @@ void ShenandoahConcurrentGC::op_final_mark() {
755760
}
756761
}
757762
}
763+
764+
{
765+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::final_mark_propagate_gc_state);
766+
heap->propagate_gc_state_to_all_threads();
767+
}
758768
}
759769

760770
bool ShenandoahConcurrentGC::has_in_place_promotions(ShenandoahHeap* heap) {
@@ -1158,6 +1168,11 @@ void ShenandoahConcurrentGC::op_final_update_refs() {
11581168
}
11591169

11601170
heap->rebuild_free_set(true /*concurrent*/);
1171+
1172+
{
1173+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::final_update_refs_propagate_gc_state);
1174+
heap->propagate_gc_state_to_all_threads();
1175+
}
11611176
}
11621177

11631178
void ShenandoahConcurrentGC::op_final_roots() {
@@ -1182,6 +1197,11 @@ void ShenandoahConcurrentGC::op_final_roots() {
11821197
if (VerifyAfterGC) {
11831198
Universe::verify();
11841199
}
1200+
1201+
{
1202+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::final_roots_propagate_gc_state);
1203+
heap->propagate_gc_state_to_all_threads();
1204+
}
11851205
}
11861206

11871207
void ShenandoahConcurrentGC::op_cleanup_complete() {

‎src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ void ShenandoahDegenGC::entry_degenerated() {
8383
heap->set_degenerated_gc_in_progress(true);
8484
op_degenerated();
8585
heap->set_degenerated_gc_in_progress(false);
86+
{
87+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::degen_gc_propagate_gc_state);
88+
heap->propagate_gc_state_to_all_threads();
89+
}
8690
}
8791

8892
void ShenandoahDegenGC::op_degenerated() {

‎src/hotspot/share/gc/shenandoah/shenandoahFullGC.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ void ShenandoahFullGC::op_full(GCCause::Cause cause) {
130130
// Regardless if progress was made, we record that we completed a "successful" full GC.
131131
heap->global_generation()->heuristics()->record_success_full();
132132
heap->shenandoah_policy()->record_success_full();
133+
134+
{
135+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::full_gc_propagate_gc_state);
136+
heap->propagate_gc_state_to_all_threads();
137+
}
133138
}
134139

135140
void ShenandoahFullGC::do_it(GCCause::Cause gc_cause) {

‎src/hotspot/share/gc/shenandoah/shenandoahOldGC.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ void ShenandoahOldGC::op_final_mark() {
7878
if (VerifyAfterGC) {
7979
Universe::verify();
8080
}
81+
82+
{
83+
ShenandoahTimingsTracker timing(ShenandoahPhaseTimings::final_mark_propagate_gc_state);
84+
heap->propagate_gc_state_to_all_threads();
85+
}
8186
}
8287
}
8388

‎src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp

+6
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class outputStream;
5757
f(init_swap_rset, " Swap Remembered Set") \
5858
f(init_transfer_satb, " Transfer Old From SATB") \
5959
f(init_update_region_states, " Update Region States") \
60+
f(init_propagate_gc_state, " Propagate GC State") \
6061
\
6162
f(init_scan_rset, "Concurrent Scan Remembered Set") \
6263
SHENANDOAH_PAR_PHASE_DO(init_scan_rset_, " RS: ", f) \
@@ -70,6 +71,7 @@ class outputStream;
7071
f(final_mark_gross, "Pause Final Mark (G)") \
7172
f(final_mark, "Pause Final Mark (N)") \
7273
f(finish_mark, " Finish Mark") \
74+
f(final_mark_propagate_gc_state, " Propagate GC State") \
7375
SHENANDOAH_PAR_PHASE_DO(finish_mark_, " FM: ", f) \
7476
f(purge, " System Purge") \
7577
SHENANDOAH_PAR_PHASE_DO(purge_cu_par_, " CU: ", f) \
@@ -107,6 +109,7 @@ class outputStream;
107109
f(promote_in_place, "Concurrent Promote Regions") \
108110
f(final_roots_gross, "Pause Final Roots (G)") \
109111
f(final_roots, "Pause Final Roots (N)") \
112+
f(final_roots_propagate_gc_state, " Propagate GC State") \
110113
\
111114
f(init_update_refs_gross, "Pause Init Update Refs (G)") \
112115
f(init_update_refs, "Pause Init Update Refs (N)") \
@@ -121,6 +124,7 @@ class outputStream;
121124
f(final_update_refs_update_region_states, " Update Region States") \
122125
f(final_update_refs_trash_cset, " Trash Collection Set") \
123126
f(final_update_refs_rebuild_freeset, " Rebuild Free Set") \
127+
f(final_update_refs_propagate_gc_state, " Propagate GC State") \
124128
\
125129
f(conc_cleanup_complete, "Concurrent Cleanup") \
126130
f(conc_coalesce_and_fill, "Concurrent Coalesce and Fill") \
@@ -157,6 +161,7 @@ class outputStream;
157161
f(degen_gc_promote_regions, " Degen Promote Regions") \
158162
f(degen_gc_coalesce_and_fill, " Degen Coalesce and Fill") \
159163
SHENANDOAH_PAR_PHASE_DO(degen_coalesce_, " DC&F", f) \
164+
f(degen_gc_propagate_gc_state, " Propagate GC State") \
160165
\
161166
f(full_gc_gross, "Pause Full GC (G)") \
162167
f(full_gc, "Pause Full GC (N)") \
@@ -188,6 +193,7 @@ class outputStream;
188193
f(full_gc_copy_objects_rebuild, " Rebuild Region Sets") \
189194
f(full_gc_reconstruct_remembered_set, " Reconstruct Remembered Set") \
190195
f(full_gc_heapdump_post, " Post Heap Dump") \
196+
f(full_gc_propagate_gc_state, " Propagate GC State") \
191197
\
192198
f(pacing, "Pacing") \
193199
\

‎src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -81,47 +81,40 @@ void VM_ShenandoahInitMark::doit() {
8181
ShenandoahGCPauseMark mark(_gc_id, "Init Mark", SvcGCMarker::CONCURRENT);
8282
set_active_generation();
8383
_gc->entry_init_mark();
84-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
8584
}
8685

8786
void VM_ShenandoahFinalMarkStartEvac::doit() {
8887
ShenandoahGCPauseMark mark(_gc_id, "Final Mark", SvcGCMarker::CONCURRENT);
8988
set_active_generation();
9089
_gc->entry_final_mark();
91-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
9290
}
9391

9492
void VM_ShenandoahFullGC::doit() {
9593
ShenandoahGCPauseMark mark(_gc_id, "Full GC", SvcGCMarker::FULL);
9694
set_active_generation();
9795
_full_gc->entry_full(_gc_cause);
98-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
9996
}
10097

10198
void VM_ShenandoahDegeneratedGC::doit() {
10299
ShenandoahGCPauseMark mark(_gc_id, "Degenerated GC", SvcGCMarker::CONCURRENT);
103100
set_active_generation();
104101
_gc->entry_degenerated();
105-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
106102
}
107103

108104
void VM_ShenandoahInitUpdateRefs::doit() {
109105
ShenandoahGCPauseMark mark(_gc_id, "Init Update Refs", SvcGCMarker::CONCURRENT);
110106
set_active_generation();
111107
_gc->entry_init_update_refs();
112-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
113108
}
114109

115110
void VM_ShenandoahFinalUpdateRefs::doit() {
116111
ShenandoahGCPauseMark mark(_gc_id, "Final Update Refs", SvcGCMarker::CONCURRENT);
117112
set_active_generation();
118113
_gc->entry_final_update_refs();
119-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
120114
}
121115

122116
void VM_ShenandoahFinalRoots::doit() {
123117
ShenandoahGCPauseMark mark(_gc_id, "Final Roots", SvcGCMarker::CONCURRENT);
124118
set_active_generation();
125119
_gc->entry_final_roots();
126-
ShenandoahHeap::heap()->propagate_gc_state_to_all_threads();
127120
}

0 commit comments

Comments
 (0)
Please sign in to comment.