RFR 6309226: TEST: java/lang/management/ThreadMXBean/SynchronizationStatistics.java didn't check Thread.sleep
David Holmes
david.holmes at oracle.com
Tue Oct 22 17:40:21 PDT 2013
On 22/10/2013 9:03 PM, Jaroslav Bachorik wrote:
> On 22.10.2013 09:58, David Holmes wrote:
>> On 21/10/2013 9:55 PM, Jaroslav Bachorik wrote:
>>> Please, review this small patch for a test failing due to the updated
>>> implementation in JDK6.
>>>
>>> Issue: https://bugs.openjdk.java.net/browse/JDK-6309226
>>> Webrev: http://cr.openjdk.java.net/~jbachorik/6309226/webrev.00/
>>>
>>> The test fails due to the change in mustang where
>>> ThreadMXBean.getThreadInfo().getWaitedTime() and
>>> ThreadMXBean.getThreadInfo().getWaitedCount() include Thread.sleep()
>>> too. Unfortunately, Thread.sleep() is used throughout the test for
>>> synchronization purposes and this breaks the test.
>>>
>>> In the patch I propose to replace Thread.sleep() with busy wait and
>>> hinting the scheduler by Thread.yield(). While not very elegant it
>>> successfully works around inclusion of unknown number of Thread.sleep()s
>>> (they are called in loop).
>>
>> Not elegant and not completely reliable either. Probably adequate on a
>> multi-core system but single-core and with some schedulers it could just
>> be a busy spin.
>
> :/ Ok, so I need to account for the Thread.sleep() calls made outside of
> the test code but still reported by the ThreadMXBean. Not that elegant,
> too, but at least should be reliable.
>
> http://cr.openjdk.java.net/~jbachorik/6309226/webrev.01
Sorry, I can't follow the logic of that test enough to determine whether
this compensating logic is correct.
Whether this is more reliable depends on whether the 5% tolerance in
timeRangeCheck is enough to account for all the potential inaccuracies
in the time measurements. On a lightly loaded system it may be, but
otherwise ... a context switch after determining the base time and doing
the sleep could add an arbitrary load and cpu-dependent delay. It might
be less reliable than the yield approach :(
I can't help wonder whether there is a more explicit synchronization
mechanism that will avoid the need for goSleep? But that becomes a much
bigger task to deal with.
I will leave this for the serviceability team to determine the best
course of action.
Thanks,
David
> -JB-
>
>>
>> David
>>
>>> Thanks,
>>>
>>> -JB-
>
More information about the serviceability-dev
mailing list