RFR: 8300575: JVMTI support when using alternative virtual thread implementation [v2]
Patricio Chilano Mateo
pchilanomate at openjdk.org
Mon Feb 13 19:57:30 UTC 2023
On Mon, 13 Feb 2023 19:51:12 GMT, Patricio Chilano Mateo <pchilanomate at openjdk.org> wrote:
>> Please review the following change. Some of the JVMTI functions had to be modified since they are not supported by the specs on virtual threads (StopThread, RunAgentThread, GetCurrentThreadCpuTime, GetThreadCpuTime) or shouldn't include virtual threads in the results (GetAllThreads, GetAllStackTraces, GetThreadGroupChildren). Others were modified because they should work on virtual thread but they weren't (SuspendAllVirtualThreads/ResumeAllVirtualThreads). Also support for VirtualThreadStart/VirtualThreadEnd events was added.
>>
>> There were a total of 71 tests under serviceability/jvmti/ that had the vm.continuations requirement. Of those, 24 where under serviceability/jvmti/vthread/. I was able to remove that requirement from 50 tests. Most of those tests were already passing for the alternative vthread implementation just by removing the check in jni_GetEnv for VMContinuations.
>> From the other 21 tests, 20 still fail with the changes either because they actually test continuations or because of different assumptions in the tests that don't hold true for the alternative vthread implementation. So for those I left the vm.continuations requirement untouched (from those 20 tests there are actually 4 tests from the thread/GetStackTrace/ family that are passing because of a bug in the test, but I can fix that in another RFE). The other remaining test is vthread/GetSetLocalTest/GetSetLocalTest.java which I see is problemlisted.
>>
>> Regarding variable _is_bound_vthread, although it's handy as a cache to avoid repeating the check, I mainly added it to avoid transitioning for GetCurrentThreadCpuTime (we are native and cannot access oops).
>>
>> I added new test BoundVThreadTest.java which just checks for the unsupported/supported behavior mentioned previously. For some extra basic coverage I also added a new run with -XX:-VMContinuations on tests inside the serviceability/jvmti/vthread/ directory that don't require vm.continuations anymore. I could also add that for all the other tests in serviceability/jvmti/ for which I removed the vm.continuations requirement.
>>
>> I run the patch through mach5 tiers 1-6 plus some extra local runs on the relevant tests.
>>
>> Thanks,
>> Patricio
>
> Patricio Chilano Mateo has updated the pull request incrementally with three additional commits since the last revision:
>
> - use different @test to run with -XX:-VMContinuations
> - more removals of @requires vm.continuations
> - change BasicVirtualThread_klass -> BaseVirtualThread_klass
Also fixed a bug in the description. PopFrame and ForceEarlyReturnXXX don't actually need to return UNSUPPORTED_OPERATION (optionally supported by the specs), but when looking at jvmtiEnv.cpp, I saw the "// No support for virtual threads (yet)" comment, so I just changed them to return UNSUPPORTED_OPERATION for the alternative implementation too to match the behavior with normal virtual threads. But I could revert that if agreed. In fact I left SetLocalXXX unmodified where currently the implementation has different support on virtual threads than platform threads.
-------------
PR: https://git.openjdk.org/jdk/pull/12512
More information about the serviceability-dev
mailing list