RFR: JDK-8036026: nsk/jvmti/scenarios/capability/CM02/cm02t001 fails intermittently
Gary Adams
gary.adams at oracle.com
Thu Oct 4 18:48:31 UTC 2018
fyi - I think JDK-8201603 tc02t001 is suffering from the same issue.
A sleep(100) is used to provoke a contention with the debuggee thread.
If the debuggee is not scheduled quickly enough, the main thread proceeds
to release the contended object M and the test fails because not all the
contended
conditions were reported event.
On 10/4/18, 1:03 PM, Daniel D. Daugherty wrote:
> On 10/4/18 1:00 PM, Gary Adams wrote:
>> On 10/4/18, 12:13 PM, Daniel D. Daugherty wrote:
>>> On 10/4/18 12:04 PM, Gary Adams wrote:
>>>> We currently use time factor 4 or 10 to scale up the jtreg tests.
>>>> The change I proposed was already 10x100 = 1000.
>>>
>>> Agreed that you are already bumping it up by 10X.
>>>
>>>
>>>> Since this is just a thread scheduling issue to let the debuggee
>>>> run til it blocks, it should not require more time to get the
>>>> switch to take place.
>>>
>>> Are you really trying to say that system load doesn't affect
>>> thread scheduling time?
>> In this particular test, the main thread and the debuggee thread
>> are toggling back and forth around several monitors and
>> synchronized code blocks. Not sure the tests are written
>> for an arbitrarily high system load.
>>>
>>>> If this was a process scheduling issue, then more complex
>>>> coordination might be worth considering.
>>>
>>> System load doesn't just affect process scheduling. It also
>>> affects thread scheduling. If all the cores are busy, then
>>> running another thread or another process is impacted.
>>>
>>>
>>> In any case, I wasn't clear in my suggestion.
>>>
>>> - Thread.sleep(100);
>>> + Thread.sleep(100 * timeoutFactor);
>>>
>>> assuming there is some easy way to get access to the -timeoutFactor
>>> parameter.
>> Currently, timeoutFactor has not been introduced to the vmTestbase/nsk
>> test suite.
>
> Ummmm.... The -timeoutFactor parameter comes with JavaTest/JTREG
> so it is already supported in the test harness that is uses to
> run the vmTestbase/nsk test suite... What am I missing here?
>
> Dan
>
>
>>>
>>> Dan
>>>
>>>
>>>
>>>>
>>>> On 10/4/18, 11:45 AM, Daniel D. Daugherty wrote:
>>>>> Sleeps don't scale under load. That said, I agree with Chris that
>>>>> the code is already in place. One possible addition is to scale
>>>>> the sleep value by the timeout factor for the test. That will
>>>>> further reduce the likelihood of intermittent failures.
>>>>>
>>>>> Dan
>>>>>
>>>>>
>>>>> On 10/4/18 7:39 AM, Gary Adams wrote:
>>>>>> Oops, wrong comment used in the patch.
>>>>>> Fresh patch attached.
>>>>>>
>>>>>> On 10/4/18, 7:11 AM, Gary Adams wrote:
>>>>>>> Patch attached.
>>>>>>>
>>>>>>> I think one reviewer is sufficient for a trivial patch.
>>>>>>>
>>>>>>> On 10/3/18, 4:49 PM, Chris Plummer wrote:
>>>>>>>> Hi Gary,
>>>>>>>>
>>>>>>>> Although I don't like relying on timer delays for stuff like
>>>>>>>> this, the code for it is already in place, so I'm ok with
>>>>>>>> making the delay longer to make sure there is contention on the
>>>>>>>> monitor. Could you update the comment to read "// pause to
>>>>>>>> provoke contention on thread.endingMonitor"
>>>>>>>>
>>>>>>>> thanks,
>>>>>>>>
>>>>>>>> Chris
>>>>>>>>
>>>>>>>> On 10/3/18 11:55 AM, Gary Adams wrote:
>>>>>>>>> While running a block of nsk/jvmti/scenarios tests, I noticed
>>>>>>>>> an occasional failure
>>>>>>>>> for cm02t001 in windows debug platform. After enabling the nsk
>>>>>>>>> verbose
>>>>>>>>> diagnostics and adding a few messages in the main test and the
>>>>>>>>> debuggee
>>>>>>>>> thread, it became clear that the missing contention was due to
>>>>>>>>> the main thread
>>>>>>>>> getting ahead of the debugee thread.
>>>>>>>>>
>>>>>>>>> The call to letFinish() below let's the deuggee thread wake up
>>>>>>>>> from it's wait
>>>>>>>>> and proceed to the contention for the endingMonitor. If the
>>>>>>>>> main thread
>>>>>>>>> waits a little longer it should reach the debuggee thread
>>>>>>>>> synchronized block.
>>>>>>>>>
>>>>>>>>> I reopened an earlier bug that was closed as CNR.
>>>>>>>>>
>>>>>>>>> Issue: https://bugs.openjdk.java.net/browse/JDK-8036026
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> diff --git
>>>>>>>>> a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/capability/CM02/cm02t001.java
>>>>>>>>> b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/capability/CM02/cm02t001.java
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>> a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/capability/CM02/cm02t001.java
>>>>>>>>> +++
>>>>>>>>> b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/capability/CM02/cm02t001.java
>>>>>>>>> @@ -82,7 +82,7 @@
>>>>>>>>> thread.letFinish();
>>>>>>>>>
>>>>>>>>> // pause to provoke contention
>>>>>>>>> - Thread.sleep(100);
>>>>>>>>> + Thread.sleep(1000);
>>>>>>>>> } catch (InterruptedException e) {
>>>>>>>>> throw new Failure(e);
>>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the serviceability-dev
mailing list