On Tue, 29 Aug 2023 10:09:21 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 This pull request has now been integrated. Changeset: fda142ff Author: Serguei Spitsyn <sspit...@openjdk.org> URL: https://git.openjdk.org/jdk/commit/fda142ff6cfefa12ec1ea4d4eb48b3c1b285bc04 Stats: 424 lines in 9 files changed: 376 ins; 20 del; 28 mod 8312174: missing JVMTI events from vthreads parked during JVMTI attach Reviewed-by: lmesnik, amenkov ------------- PR: https://git.openjdk.org/jdk/pull/15467