On Thu, 9 Nov 2023 05:27:40 GMT, Jonathan Joo <j...@openjdk.org> wrote:
>> 8315149: Add hsperf counters for CPU time of internal GC threads > > Jonathan Joo has updated the pull request incrementally with one additional > commit since the last revision: > > Add missing cpuTimeCounters files A few more comments. src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp line 82: > 80: _vtime_accum = 0.0; > 81: } > 82: maybe_update_threads_cpu_time(); I think the lines above here: if (os::supports_vtime()) { _vtime_accum = (os::elapsedVTime() - _vtime_start); } else { _vtime_accum = 0.0; } Should be extracted out into the new method and instead of calling it `maybe_update_threads_cpu_time()` just call `track_usage()` or `track_cpu_time()`. The the implementation in the primary thread can then call this and do the extra tracking. src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp line 189: > 187: void G1PrimaryConcurrentRefineThread::maybe_update_threads_cpu_time() { > 188: if (UsePerfData && os::is_thread_cpu_time_supported()) { > 189: cr()->update_concurrent_refine_threads_cpu_time(); I think we should pull the tracking closure in here and that way leave the concurrent refine class untouched. Suggestion: // The primary thread is responsible for updating the CPU time for all workers. CPUTimeCounters* counters = G1CollectedHeap::heap()->cpu_time_counters(); ThreadTotalCPUTimeClosure tttc(counters, CPUTimeGroups::gc_conc_refine); cr()->threads_do(&tttc); This is more or less a copy from `G1ConcurrentRefineThreadControl::update_threads_cpu_time()` which if we go with this solution can be removed. The above needs some new includes though. I change the comment a because I could not fully understand it, the primary thread is the one always checking and starting more threads so it is not stopped first. Also not sure when a terminated thread could be read. Even the stopped threads are still present so should be fine. If I'm missing something feel free to add back the comment. src/hotspot/share/gc/g1/g1ServiceThread.cpp line 138: > 136: ThreadTotalCPUTimeClosure tttc(counters, CPUTimeGroups::gc_service); > 137: tttc.do_thread(task->_service_thread); > 138: } Please extract this to a function, similar to the other cases something like `track_cpu_time()`. ------------- Changes requested by sjohanss (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/15082#pullrequestreview-1722194318 PR Review Comment: https://git.openjdk.org/jdk/pull/15082#discussion_r1387787912 PR Review Comment: https://git.openjdk.org/jdk/pull/15082#discussion_r1387803508 PR Review Comment: https://git.openjdk.org/jdk/pull/15082#discussion_r1387805665