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

Daniel D. Daugherty dcubed at openjdk.org
Fri May 10 22:12:21 UTC 2024


On Tue, 30 Apr 2024 01:49:31 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

>> 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?
>
> Thank you for the comment. It is thinking in a right direction.
> Each `JavaThread` set the `VTM_transition_mark` only once and then checks for disable counters:
>  - `_VTMS_transition_disable_for_all_count`
>  - `java_lang_Thread::VTMS_transition_disable_count(vth())`
>  
> If any of the disable counters is not zero then each `JavaThread` clears the optimistically set mark and continues under protection of the `JvmtiVTMSTransition_lock`.

I'm not sure this answered Chris' query properly. Or I'm reading Chris' query wrong.

Perhaps this is not what Chris had in mind, but I'm wondering what happens in some
Thread-A when it is checked and passed by but then Thread-A sets the flag in itself
after the for-loop has passed it by. Does that Thread-A flag value get lost?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18937#discussion_r1597266296


More information about the serviceability-dev mailing list