[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: RFR: 8312174: missing JVMTI events from vthreads parked during JVMTI attach
From: Serguei Spitsyn <sspitsyn () openjdk ! org>
Date: 2023-08-29 10:16:40
Message-ID: 5UkbsOBV6ixFV5IhduISKS7NpvPjU8s1r54KOwpBTC4=.510974ad-dfec-4ef8-8b41-1cd8d867d905 () github ! com
[Download RAW message or body]
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
-------------
Commit messages:
- 8312174: missing JVMTI events from vthreads parked during JVMTI attach
Changes: https://git.openjdk.org/jdk/pull/15467/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15467&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8312174
Stats: 414 lines in 9 files changed: 366 ins; 20 del; 28 mod
Patch: https://git.openjdk.org/jdk/pull/15467.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/15467/head:pull/15467
PR: https://git.openjdk.org/jdk/pull/15467
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic