> Hi all,
> 
> This PR augments the CPU time sampling measurement capabilities that a user 
> can perform from Java code with the addition of 
> `MemoryMXBean.getGcCpuTime()`. With this patch it will be possible for a user 
> to measure process and GC CPU time during critical section or iterations in 
> benchmarks to name a few. This new method complements the existing 
> `OperatingSystemMXBean.getProcessCpuTime()` for a refined understanding.
> 
> `CollectedHeap::gc_threads_do` may operate on terminated GC threads during 
> shutdown, but thanks to JDK-8366865 by @walulyai we can piggyback on the new 
> `Universe::is_shutting_down`. I have implemented a stress-test 
> `test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java` that may 
> identify reading CPU time of terminated threads. Synchronizing on 
> `Universe::is_shutting_down` and `Heap_lock` resolves this problem.
> 
> FWIW; To my understanding we don't want to add a `Universe::is_shutting_down` 
> check in gc_threads_do as this may introduce a performance penalty that is 
> unacceptable, therefore we must be careful about the few places where 
> external users call upon gc_threads_do and may race with a terminating VM.
> 
> Tested: test/jdk/java/lang/management/MemoryMXBean/GetGcCpuTime.java, 
> jdk/javax/management/mxbean hotspot/jtreg/vmTestbase/nsk/monitoring on Linux 
> x64, Linux aarch64, Windows x64, macOS x64 and macOS aarch64 with release and 
> fastdebug.

Jonas Norlinder has updated the pull request incrementally with three 
additional commits since the last revision:

 - Also stress-test Serial and Epsilon
 - Add basic test for MemoryMXBean.getTotalGcCpuTime
 - Change how test is invoked and fix review comment

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/27537/files
  - new: https://git.openjdk.org/jdk/pull/27537/files/5d360f45..f395e8d2

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=27537&range=08
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27537&range=07-08

  Stats: 308 lines in 4 files changed: 224 ins; 83 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/27537.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27537/head:pull/27537

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

Reply via email to