On Mon, 11 Sep 2023 21:22:18 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> This update fixes two important issues: >> - Issue reported by a bug submitter about missing JVMTI events on virtual >> threads after an a JVMTI agent dynamic attach >> - Known scalability/performance issue: a need to lazily create >> `JvmtiThreadState's` for virtual threads >> >> The issue is tricky to fix because the existing mechanism of the JVMTI event >> management does not support unmounted virtual threads. The JVMTI >> `SetEventNotificationMode()` calls the function >> `JvmtiEventControllerPrivate::recompute_enabled()` >> which inspects a `JavaThread's` list and for each thread in the list >> recomputes enabled event bits with the function >> `JvmtiEventControllerPrivate::recompute_thread_enabled()`. The >> `JvmtiThreadState` of each thread is created but only when it is really >> needed, eg, if any of the thread filtered events is enabled. There was an >> initial adjustment of this mechanism for virtual threads which accounted for >> both carrier and virtual threads when a virtual thread is mounted. However, >> it does not work for unmounted virtual threads. A temporary work around was >> to always create `JvmtiThreadState` for each virtual thread eagerly at a >> thread starting point. >> >> This fix introduces new function `JvmtiExport::get_jvmti_thread_state()` >> which checks if thread is virtual and there is a thread filtered event >> enabled globally, and if so, forces a creation of the `JvmtiThreadState`. >> Another adjustment was needed because the function >> `state_for_while_locked()` can be called directly in some contexts. New >> function `JvmtiEventController::recompute_thread_filtered()` was introduced >> to make necessary corrections. >> >> Testing: >> - new test from the bug report was adopted: >> `test/hotspot/jtreg/serviceability/jvmti/vthread/VThreadEventTest` >> - ran mach5 tiers 1-6: all are passed > > Serguei Spitsyn has updated the pull request incrementally with one > additional commit since the last revision: > > addressed second round of review comments on VThreadEventTest.java Leonid and Alex, thank you a lot for review and discussions! ------------- PR Comment: https://git.openjdk.org/jdk/pull/15467#issuecomment-1714769193