RFR: 8364638: Refactor and make accumulated GC CPU time code generic [v5]

Jonas Norlinder duke at openjdk.org
Tue Aug 12 12:24:35 UTC 2025


> Hi all,
> 
> This PR refactors the newly added GC CPU time code from [JDK-8359110](https://bugs.openjdk.org/browse/JDK-8359110).
> 
> As a stepping-stone to enable consolidation of CPU time tracking in e.g. hsperf counters and GCTraceCPUTime and to have a unified interface for tracking CPU time of various components in Hotspot this code can be refactored. This PR introduces a new interface to retrieve CPU time for various Hotspot components and it currently supports:
> 
> CPUTimeUsage::GC::total() // the sum of gc_threads(), vm_thread(), stringdedup()
> 
> CPUTimeUsage::GC::gc_threads()
> CPUTimeUsage::GC::vm_thread()
> CPUTimeUsage::GC::stringdedup()
> 
> CPUTimeUsage::Runtime::vm_thread()
> 
> 
> I moved `CPUTimeUsage` to `src/hotspot/share/services` since it seemed fitting as it housed similar performance tracking code like `RuntimeService`, as this is no longer a class that is only specific to GC.
> 
> I also made a minor improvement in the CPU time logging during exit. Since `CPUTimeUsage` supports more components than just GC I changed the logging flag to from `gc,cpu` to `cpu` and created a detailed table:
> 
> 
> [71.425s][info][cpu   ] === CPU time Statistics =============================================================
> [71.425s][info][cpu   ]                                                                             CPUs
> [71.425s][info][cpu   ]                                                                s       %  utilized
> [71.425s][info][cpu   ]    Process
> [71.425s][info][cpu   ]      Total                                             1616.3627  100.00      22.6
> [71.425s][info][cpu   ]      VM Thread                                            5.2992    0.33       0.1
> [71.425s][info][cpu   ]      Garbage Collection                                  83.7322    5.18       1.2
> [71.425s][info][cpu   ]        GC Threads                                        82.7671    5.12       1.2
> [71.425s][info][cpu   ]        VM Thread                                          0.9651    0.06       0.0
> [71.425s][info][cpu   ] =====================================================================================
> 
> 
> Additionally, if CPU time retrieval fails it should not be the caller's responsibility to log warnings as this would bloat the code unnecessarily. I've noticed that `os` does log a warning for some methods if they fail so I continued on this path.

Jonas Norlinder has updated the pull request incrementally with one additional commit since the last revision:

  Feedback from Albert

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/26621/files
  - new: https://git.openjdk.org/jdk/pull/26621/files/3f552362..143fcacb

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=26621&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=26621&range=03-04

  Stats: 34 lines in 3 files changed: 2 ins; 7 del; 25 mod
  Patch: https://git.openjdk.org/jdk/pull/26621.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26621/head:pull/26621

PR: https://git.openjdk.org/jdk/pull/26621


More information about the serviceability-dev mailing list