RFR: 8330969: scalability issue with loaded JVMTI agent [v2]

Chris Plummer cjplummer at openjdk.org
Fri Apr 26 20:03:50 UTC 2024


On Fri, 26 Apr 2024 07:45:50 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

>> This is a fix of the following JVMTI scalability issue. A closed benchmark with millions of virtual threads shows 3X-4X overhead when a JVMTI agent has been loaded. For instance, this is observable when an app is executed under control of the Oracle Studio `collect` utility.
>> For performance analysis, experiments and numbers, please, see the comment below this description.
>> 
>> The fix is to replace the global counter `_VTMS_transition_count` with the mark bit `_VTMS_transition_mark` in each `JavaThread`'.
>> 
>> Testing:
>>  - Tested with mach5 tiers 1-6
>
> Serguei Spitsyn has updated the pull request incrementally with one additional commit since the last revision:
> 
>   review: fixed minor issues: renamed function, corrected comment, removed typo in assert

src/hotspot/share/prims/jvmtiThreadState.cpp line 366:

> 364:           attempts--;
> 365:         }
> 366:         DEBUG_ONLY(if (attempts == 0) break;)

Previously `_VTMS_transition_count` considered all threads at the same time. Now you are iterating through the threads and looking at a flag in each one. Is it guaranteed that once the `_VTMS_transition_mark` flag has been verified not to be set in a thread it won't get set while still iterating in the threads loop?

src/hotspot/share/prims/jvmtiThreadState.cpp line 433:

> 431:   // Avoid using MonitorLocker on performance critical path, use
> 432:   // two-level synchronization with lock-free operations on counters.
> 433:   assert(!thread->VTMS_transition_mark(), "sanity check");

The "counters" comment needs to be updated.

src/hotspot/share/prims/jvmtiThreadState.cpp line 456:

> 454:     // Slow path: undo unsuccessful optimistic counter incrementation.
> 455:     // It can cause an extra waiting cycle for VTMS transition disablers.
> 456:     thread->set_VTMS_transition_mark(false);

The "optimistic counter incrementation" comment needs updating.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18937#discussion_r1581460754
PR Review Comment: https://git.openjdk.org/jdk/pull/18937#discussion_r1581463641
PR Review Comment: https://git.openjdk.org/jdk/pull/18937#discussion_r1581462878


More information about the serviceability-dev mailing list