RFR: CODETOOLS-7902928: Improve support for async-profiler 2.x [v2]

Andrei Pangin apangin at openjdk.java.net
Mon May 10 14:30:10 UTC 2021

On Fri, 7 May 2021 06:06:18 GMT, Jason Zaugg <jzaugg at openjdk.org> wrote:

>> Allow multiple events to be captured simultaneously in this version,
>> provided that JFR is chosen as output format.
>> Delegate output file writing to the async-profiler. This is required
>> in 2.x for the JFR output but is supported in both versions. The file
>> path must be provided when starting the profiler with JFR output, so
>> we need to create the per-trial output directory in the first
>> `beforeIteration`.
>> Avoid the character '%' in the generated directory name as this
>> is interpreted by async-profiler as part %p or %t placeholder.
> Jason Zaugg has updated the pull request incrementally with one additional commit since the last revision:
>   Fixup: remove incorrect/unneeded 'reset' argument

jmh-core/src/main/java/org/openjdk/jmh/profile/AsyncProfiler.java line 100:

> 98: 
> 99:         OptionSpec<String> optEvent = parser.accepts("event",
> 100:                 "Event(s) to sample: cpu, alloc, lock, wall, itimer; com.foo.Bar.methodName; any event from `perf list` e.g. cache-misses")

I'd vote against making `event` a multi-option:

- First, not all events can be profiled together, e.g. you cannot profile `wall` and `cache-misses` at the same time. Only `alloc` and/or `lock` may be combined with other events.
- Second, async-profiler has dedicated options for specifying the allocation profiling interval and the lock profiling threshold, like `alloc=512k,lock=1ms`. Even though multiple `event=x` options are allowed, the canonical way to turn on allocation and lock profiling is `event=cpu,alloc[=interval],lock[=threshold]` (interval and threshold are optional).


PR: https://git.openjdk.java.net/jmh/pull/37

More information about the jmh-dev mailing list