RFR: 8348402: PerfDataManager stalls shutdown for 1ms
Aleksey Shipilev
shade at openjdk.org
Wed Jan 29 07:02:45 UTC 2025
On Wed, 29 Jan 2025 05:06:12 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Found this when studying Leyden performance. [JDK-8049304](https://bugs.openjdk.org/browse/JDK-8049304) added 1ms sleep on destruction path to catch up with threads updating the counters.
>>
>> I was not able to confidently prove the deletion race is benign. Even though `sleep` is not really a fix for that race either, I think it is safer to use GlobalCounter to coordinate deletions.
>>
>> This improves startup (roundtrip) tests for the expected 1ms:
>>
>>
>> $ hyperfine -w 10 -r 100 ...
>>
>> # Before
>> Benchmark 1: build/linux-x86_64-server-release/images/jdk/bin/java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx128m Hello
>> Time (mean ± σ): 20.0 ms ± 0.3 ms [User: 11.7 ms, System: 16.0 ms]
>> Range (min … max): 19.0 ms … 21.7 ms 1000 runs
>>
>> # After
>> Benchmark 1: build/linux-x86_64-server-release/images/jdk/bin/java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx128m Hello
>> Time (mean ± σ): 19.0 ms ± 0.3 ms [User: 11.9 ms, System: 15.8 ms]
>> Range (min … max): 18.2 ms … 20.8 ms 1000 runs
>>
>>
>> Additional testing:
>> - [x] Linux AArch64 server fastdebug, `all`
>> - [x] Linux x86_64 server fastdebug, `all`
>
> src/hotspot/share/runtime/synchronizer.cpp line 66:
>
>> 64: #include "utilities/dtrace.hpp"
>> 65: #include "utilities/events.hpp"
>> 66: #include "utilities/globalCounter.inline.hpp"
>
> Why is this necessary?
This compilation unit uses the `OM_PERFDATA_OP` define, which now uses `GlobalCounter::CriticalSection`, which now needs this include.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/23293#discussion_r1933353410
More information about the hotspot-runtime-dev
mailing list