RFR: 8364638: Refactor and make accumulated GC CPU time code generic [v4]
Jonas Norlinder
duke at openjdk.org
Thu Aug 7 09:49:12 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:
>
>
> [12.517s][info][cpu] === CPU time Statistics =============================================================
> [12.517s][info][cpu] CPUs
> [12.517s][info][cpu] s % utilized
> [12.517s][info][cpu] Process
> [12.517s][info][cpu] Total 175.7628 100.00 14.0
> [12.517s][info][cpu] VM Thread 7.0000 3.98 0.6
> [12.517s][info][cpu] Garbage Collection 72.0000 40.96 5.8
> [12.517s][info][cpu] GC Threads 70.0000 39.83 5.6
> [12.517s][info][cpu] VM Thread 1.0000 0.57 0.1
> [12.518s][info][cpu] String Deduplication 0.0000 0.00 0.0
> [12.518s][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:
Improve robustness
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26621/files
- new: https://git.openjdk.org/jdk/pull/26621/files/216ba811..3f552362
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26621&range=03
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26621&range=02-03
Stats: 29 lines in 3 files changed: 23 ins; 0 del; 6 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 hotspot-dev
mailing list