Integrated: 8372584: [Linux]: Replace reading proc to get thread user CPU time with clock_gettime
Jonas Norlinder
jnorlinder at openjdk.org
Wed Dec 3 09:38:48 UTC 2025
On Fri, 28 Nov 2025 12:00:28 GMT, Jonas Norlinder <jnorlinder at openjdk.org> wrote:
> Since kernel v2.6.12 the Linux ABI have had support for encoding the clock types in the last three bits. Setting bit to 001 (CPUCLOCK_VIRT) will result in the kernel returning only user time. POSIX compliant implementations of pthread_getcpuclockid for the Linux kernel defaults to construct a clockid that with 010 (CPUCLOCK_SCHED) set, which return system+user time, which is what the POSIX standard mandates, see POSIX.1-2024/IEEE Std 1003.1-2024 §3.90. This patch joins the family of glibc, musl etc. that utilities this bit pattern.
>
> This PR also results in improved performance and thus a reduced observer effect, especially for the 100th percentile (max).
>
> Before patch:
>
> Benchmark Mode Cnt Score Error Units
> CPUTime.execute sample 7506555 0.008 ± 0.001 ms/op
> CPUTime.execute:p0.00 sample 0.008 ms/op
> CPUTime.execute:p0.50 sample 0.008 ms/op
> CPUTime.execute:p0.90 sample 0.008 ms/op
> CPUTime.execute:p0.95 sample 0.008 ms/op
> CPUTime.execute:p0.99 sample 0.012 ms/op
> CPUTime.execute:p0.999 sample 0.015 ms/op
> CPUTime.execute:p0.9999 sample 0.021 ms/op
> CPUTime.execute:p1.00 sample 1.030 ms/op
>
>
> After patch:
>
> Benchmark Mode Cnt Score Error Units
> CPUTime.execute sample 8984189 ≈ 10⁻³ ms/op
> CPUTime.execute:p0.00 sample ≈ 10⁻³ ms/op
> CPUTime.execute:p0.50 sample ≈ 10⁻³ ms/op
> CPUTime.execute:p0.90 sample ≈ 10⁻³ ms/op
> CPUTime.execute:p0.95 sample ≈ 10⁻³ ms/op
> CPUTime.execute:p0.99 sample 0.001 ms/op
> CPUTime.execute:p0.999 sample 0.001 ms/op
> CPUTime.execute:p0.9999 sample 0.006 ms/op
> CPUTime.execute:p1.00 sample 0.054 ms/op
>
>
> Testing: `java/lang/management/ThreadMXBean/ThreadUserTime.java` and the added microbenchmark.
This pull request has now been integrated.
Changeset: 858d2e43
Author: Jonas Norlinder <jnorlinder at openjdk.org>
Committer: Kevin Walls <kevinw at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/858d2e434dd4eb8aa94784bb1cd115554eec5dff
Stats: 138 lines in 3 files changed: 84 ins; 42 del; 12 mod
8372584: [Linux]: Replace reading proc to get thread user CPU time with clock_gettime
Reviewed-by: dholmes, kevinw, redestad
-------------
PR: https://git.openjdk.org/jdk/pull/28556
More information about the hotspot-runtime-dev
mailing list