RFR(s): 8247248: JVM TI might create JNI locals in another thread when using handshakes.
David Holmes
david.holmes at oracle.com
Wed Jun 10 08:33:40 UTC 2020
Hi Robbin,
On 10/06/2020 5:55 pm, Robbin Ehn wrote:
> Hi David,
>
> On 2020-06-10 04:30, David Holmes wrote:
>> Hi Robbin,
>>
>> On 10/06/2020 2:15 am, Robbin Ehn wrote:
>>> Hi all,
>>>
>>> If the direct handshake is executed by the target thread, the JNI
>>> local(s) are created in that thread but returned in the handshaking
>>> thread.
>>> They thus are not safe to use. (thread might even have exited by this
>>> point)
>>>
>>> Code:
>>> http://cr.openjdk.java.net/~rehn/8247248/v1/webrev/
>>>
>>> Unfortunately there is no way the distinguish a local jobject vs a
>>> global. Which makes it hard to track when the jobject is global and not.
>>
>> I have some comments/concerns that I've added to the bug report.
>>
>> Switching from local refs to global refs adds a bit of overhead and
>> will likely impact the performance here. Not a showstopper but would
>> be nice to avoid if possible as it seems a bit of a kludge to
>> communicate values across threads via global refs.
>
> Using our test to measure nanos, it's seem to be 5%, 21 us to 22 us when
> target is current thread, no handshake at all.
> (handshake case is around 65 us, so noise is larger than overhead).
>
> In earlier version of the patch I skipped global when doing thread self.
> But since it's not easy to track if it's a global or local I removed
> that for the simplification.
>
>>
>> In the old VMOperation solution the VMThread used the JvmtiEnv* of the
>> calling thread so that the local refs were in the right place. Can we
>> do the same with the handshake code? It will mean restoring the
>> "calling thread" argument to the handshake operation but I think this
>> is a workable approach. (The removal of the calling thread argument
>> should have rung alarm bells :( .)
>>
>> Or, could this be case where we don't want the target thread to
>> execute the handshake and we need a way to mark the handshake
>> operation as such? That's a bigger change of course.
>
> This is a good idea, and we can easily implement a generic facility in
> the, hopefully, upcoming asynchronous handshakes.
>
> But no matter in what form I don't see us getting this enhancement to
> handshakes before JDK 15.
>
> How do you want to proceed for JDK 15?
Honestly I think I'd like to see things reverted to the use of
calling_thread as done for the VMOperation previously. We know it is
functionally correct and it should also have the same performance profile.
Thanks,
David
> Thanks, Robbin
>
>>
>> Thanks,
>> David
>> -----
>>
>>> Issue:
>>> https://bugs.openjdk.java.net/browse/JDK-8247248
>>>
>>> Local testing of JDI/JVMTI and t1-5.
>>> (no real crash so there is nothing to reproduce)
>>>
>>> Thanks, Robbin
More information about the serviceability-dev
mailing list