8379781: G1: Full GC does not print partial array task stats

Reviewed-by: iwalulya, kbarrett
This commit is contained in:
Thomas Schatzl 2026-03-13 10:57:14 +00:00
parent 713664fa93
commit 1ea8ef92bc
8 changed files with 17 additions and 10 deletions

View File

@ -682,14 +682,14 @@ void G1ConcurrentMark::set_concurrency_and_phase(uint active_tasks, bool concurr
#if TASKQUEUE_STATS
void G1ConcurrentMark::print_and_reset_taskqueue_stats() {
_task_queues->print_and_reset_taskqueue_stats("G1ConcurrentMark Oop Queue");
_task_queues->print_and_reset_taskqueue_stats("Concurrent Mark");
auto get_pa_stats = [&](uint i) {
return _tasks[i]->partial_array_task_stats();
};
PartialArrayTaskStats::log_set(_max_num_tasks, get_pa_stats,
"G1ConcurrentMark Partial Array Task Stats");
"Concurrent Mark Partial Array");
for (uint i = 0; i < _max_num_tasks; ++i) {
get_pa_stats(i)->reset();

View File

@ -353,7 +353,13 @@ void G1FullCollector::phase1_mark_live_objects() {
scope()->tracer()->report_object_count_after_gc(&_is_alive, _heap->workers());
}
#if TASKQUEUE_STATS
marking_task_queues()->print_and_reset_taskqueue_stats("Marking Task Queue");
marking_task_queues()->print_and_reset_taskqueue_stats("Full GC");
auto get_stats = [&](uint i) {
return marker(i)->partial_array_splitter().stats();
};
PartialArrayTaskStats::log_set(_num_workers, get_stats,
"Full GC Partial Array");
#endif
}

View File

@ -89,6 +89,7 @@ public:
~G1FullGCMarker();
G1MarkTasksQueue* task_queue() { return &_task_queue; }
PartialArraySplitter& partial_array_splitter() { return _partial_array_splitter; }
// Marking entry points
template <class T> inline void mark_and_push(T* p);

View File

@ -741,7 +741,7 @@ void G1ParScanThreadStateSet::print_partial_array_task_stats() {
return state_for_worker(i)->partial_array_task_stats();
};
PartialArrayTaskStats::log_set(_num_workers, get_stats,
"Partial Array Task Stats");
"Young GC Partial Array");
}
#endif // TASKQUEUE_STATS

View File

@ -1064,6 +1064,7 @@ void G1YoungCollector::post_evacuate_collection_set(G1EvacInfo* evacuation_info,
allocator()->release_gc_alloc_regions(evacuation_info);
#if TASKQUEUE_STATS
_g1h->task_queues()->print_and_reset_taskqueue_stats("Young GC");
// Logging uses thread states, which are deleted by cleanup, so this must
// be done before cleanup.
per_thread_states->print_partial_array_task_stats();
@ -1183,5 +1184,4 @@ void G1YoungCollector::collect() {
policy()->record_young_collection_end(_concurrent_operation_is_full_mark, evacuation_alloc_failed(), _allocation_word_size);
}
TASKQUEUE_STATS_ONLY(_g1h->task_queues()->print_and_reset_taskqueue_stats("Oop Queue");)
}

View File

@ -203,13 +203,13 @@ void ParCompactionManager::remove_all_shadow_regions() {
#if TASKQUEUE_STATS
void ParCompactionManager::print_and_reset_taskqueue_stats() {
marking_stacks()->print_and_reset_taskqueue_stats("Marking Stacks");
marking_stacks()->print_and_reset_taskqueue_stats("Full GC");
auto get_pa_stats = [&](uint i) {
return _manager_array[i]->partial_array_task_stats();
};
PartialArrayTaskStats::log_set(ParallelGCThreads, get_pa_stats,
"Partial Array Task Stats");
"Full GC Partial Array");
uint parallel_gc_threads = ParallelScavengeHeap::heap()->workers().max_workers();
for (uint i = 0; i < parallel_gc_threads; ++i) {
get_pa_stats(i)->reset();

View File

@ -138,13 +138,13 @@ bool PSPromotionManager::post_scavenge(YoungGCTracer& gc_tracer) {
#if TASKQUEUE_STATS
void PSPromotionManager::print_and_reset_taskqueue_stats() {
stack_array_depth()->print_and_reset_taskqueue_stats("Oop Queue");
stack_array_depth()->print_and_reset_taskqueue_stats("Young GC");
auto get_pa_stats = [&](uint i) {
return manager_array(i)->partial_array_task_stats();
};
PartialArrayTaskStats::log_set(ParallelGCThreads, get_pa_stats,
"Partial Array Task Stats");
"Young GC Partial Array");
for (uint i = 0; i < ParallelGCThreads; ++i) {
get_pa_stats(i)->reset();
}

View File

@ -64,7 +64,7 @@ static const char* const stats_hdr[] = {
};
void PartialArrayTaskStats::print_header(outputStream* s, const char* title) {
s->print_cr("%s:", title);
s->print_cr("GC Task Stats %s", title);
for (uint i = 0; i < ARRAY_SIZE(stats_hdr); ++i) {
s->print_cr("%s", stats_hdr[i]);
}