[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