RFR (S): 7117303: VM uses non-monotonic time source and complains that it is non-monotonic
John Cuthbertson
john.cuthbertson at oracle.com
Thu Dec 8 20:28:42 UTC 2011
Hi David,
Thanks for the code review comments - I'll change the comments to what
you suggest and send out a new webrev.
JohnC
On 12/07/11 21:48, David Holmes wrote:
> Hi John,
>
> On 8/12/2011 3:59 AM, John Cuthbertson wrote:
>> Can I have a couple of volunteers review the changes for this CR? The
>> webrev can be found at:
>> http://cr.openjdk.java.net/~johnc/7117303/webrev.0/.
>>
>> Summary:
>> I replaced the calls to os::javaTimeMillis() in the GC where we expect
>> monotonicity with calls os::javaTimeNanos(), converting the result to
>> milliseconds. os::javaTimeNanos(), at least on some configurations, does
>> guarantee monotonicity and so is a better alternative.
>
> javaTimeNanos is "guaranteed" monotonic if the underlying platform
> provides a monotonic timesource.
>
> I think this comment:
>
> ! // os::javaTimeMillis() does not guarantee monotonicity.
>
> might be better expressed as:
>
> // need to use a monotonic time source
>
> or perhaps
>
> // need a monotonic time in ms but os::javaTimeMillis() does not
> guarantee monotonicity
>
>> The changes in
>> the os_<*> files are to make use of the named conversion constants I
>> added/moved to globalDefinitions.hpp - we seemed to have multiple names
>> for the same two constants.
>
> Yeah that little cleanup has been on the to-do list for quite a while
> - thanks.
>
> genCollectedHeap.cpp:
>
> This comment block can be shortened from:
>
> ! // XXX Since javaTimeNanos() mostly guarantees monotonically
> ! // increasing return values, depending upon the underlying
> ! // os-dependent implementation, we still need to guard against
> ! // getting back a time later than now. This should be fixed
> ! // by basing the implementation on something like gethrtime()
> ! // which does guarantee monotonicity.
> ! // Note that cond_wait() is susceptible to a similar problem,
> ! // because its interface is based on absolute time in the form
> ! // of the system time's notion of UCT. See also 4506635 for yet
> ! // another problem of similar nature. XXX
>
> to just
>
> // javaTimeNanos() is guaranteed to be monotonic non-decreasing
> // provided the underlying platform provides such a time source
> // (and it is bug free). So we still have to guard against getting
> // back a time later than 'now'.
>
> javaTimeNanos _is_ based on gethrtime (on Solaris which is the only
> place it exists) or on CLOCK_MONOTONIC on Linux (if present). It is as
> monotonic as the platform provides. The ref to cond_wait is just
> completely out of place.
>
> David
> -----
>
>> Testing: GC test suite on solaris and Linux, NSK tests on solaris, and
>> jprt.
>>
>> Thanks,
>>
>> JohnC
More information about the hotspot-gc-dev
mailing list