RFR: 8297286: runtime/vthread tests crashing after JDK-8296324 [v5]

Chris Plummer cjplummer at openjdk.org
Fri Mar 24 19:20:38 UTC 2023


On Fri, 24 Mar 2023 00:23:19 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

>> test/hotspot/jtreg/serviceability/jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest.java line 68:
>> 
>>> 66:             if (n <= 0) {
>>> 67:                 n = 1000;
>>> 68:                 ToggleNotifyJvmtiTest.sleep(1);
>> 
>> It looks like you do this short sleep 1 out of every 1,000,000 iterations. Can you explain why?
>
> It is for yielding. Do you think we need this with a bigger frequency?

I guess the question then is why the need to yield. It just seems a bit odd that I thought the main point of this loop was to keep busy calling `breakpointCheck()`, and I don't see how doing a yield 1 out of every 1,000,000 iterations relates to that.

>> test/hotspot/jtreg/serviceability/jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest.java line 72:
>> 
>>> 70:             if (i > n) {
>>> 71:                 i = 0;
>>> 72:                 n = n - 1;
>> 
>> n--
>
> This code was copied originally from the vmTestbase to SuspendThread* tests and some other tests.
> I can do all suggested simplifications but not sure if it is really necessary.
> It does not matter what exactly the method does because it just simulates some thread activity.
> Would it better to keep copy/pasted methods the same?

ok

>> test/hotspot/jtreg/serviceability/jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest.java line 148:
>> 
>>> 146: 
>>> 147:     static private void setVirtualThreadsNotifyJvmtiMode(int iter, boolean enable) {
>>> 148:         sleep(5);
>> 
>> Why is this needed?
>
> It is needed to balance enabling/disabling notifyJvmti mode with the ThreadStart/VirtualThreadStart events.
> Otherwise, many mode switches can be observed without any events which is not interesting.
> We need to allow virtual threads to execute a little bit after a mode switch.

Shouldn't that be the caller's responsibility? Including a comment would be helpful.

>> test/hotspot/jtreg/serviceability/jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest.java line 161:
>> 
>>> 159:             vm.loadAgentLibrary(AGENT_LIB, arg);
>>> 160:         } else {
>>> 161:             System.loadLibrary(AGENT_LIB);
>> 
>> Why is this needed? Isn't the library already loaded due to it being specified by `-agentlib`?
>
> Good question. We almost always do it in the JVMTI tests including `serviceability/jvmti/vthread` and `vmTestbase/nsk/jvmti` tests. Examples are 22 `serviceability/jvmti/vthread` tests.

Are you saying it's not needed, but you included it to be consistent with other tests?

>> test/hotspot/jtreg/serviceability/jvmti/vthread/ToggleNotifyJvmtiTest/ToggleNotifyJvmtiTest.java line 171:
>> 
>>> 169:         sleep(20);
>>> 170: 
>>> 171:         for (int iter = 0; VirtualThreadStartedCount() < VTHREADS_CNT; iter++) {
>> 
>> The test seems to exit once all the threads are started. I would think you would want it to run for a while after all the threads are started.
>
> I'm not sure if it is really needed. 60 virtual threads are started.
> Some of them are executed long enough before shutdown.
> We can just increase the number of threads if necessary.

ok

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1147966083
PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1147966677
PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1147969519
PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1147969967
PR Review Comment: https://git.openjdk.org/jdk/pull/13133#discussion_r1147970566


More information about the serviceability-dev mailing list