Hi again!
Thank you for spotting these! I'm sorry, silly mistakes.
I have updated lines 51-53 to:
51 inline bool operator<=(const Tickspan& lhs, const Tickspan& rhs) {
52 return !operator>(lhs,rhs);
53 }
And lines 97-99 as:
97 inline bool operator<=(const Ticks& lhs, const Ticks& rhs) {
98 return !operator>(lhs,rhs);
99 }
Thanks Vitaly!
Cheers
Markus
From: Vitaly Davidovich [mailto:[email protected]]
Sent: den 13 november 2013 02:19
To: Markus Gronlund
Cc: [email protected]; serviceability-dev;
[email protected]
Subject: RE: RFR(M): 8028128: Add a type safe alternative for working with
counter based data
Similar issue with the Ticks versions.
Sent from my phone
On Nov 12, 2013 8:17 PM, "Vitaly Davidovich" <HYPERLINK
"mailto:[email protected]"[email protected]> wrote:
Yeah, naming things is often a pain.
51 inline bool operator<=(const Tickspan& lhs, const Tickspan& rhs) {
52 return !operator<(lhs,rhs);
53 }
54
55 inline bool operator>=(const Tickspan& lhs, const Tickspan& rhs) {
56 return !operator<(lhs,rhs);
57 }
These look like bugs; first one should probably be !operator>(lhs,rhs) and
!operator<(lhs,rhs), respectively.
Sent from my phone
On Nov 12, 2013 10:32 AM, "Markus Gronlund" <HYPERLINK
"mailto:[email protected]" \[email protected]> wrote:
Hi Vitaly,
Thanks for you input!
"You have some operator overloads for these that can compare them against
jlongs - doesn't that still make it easy to mix up what you're comparing?
Personally, since these are value types I'd make their API work only against
these new types and make caller create the right type for comparison."
Thanks for spotting these - the compare against jlongs in from an older version
of the webrev where this was allowed - you are right, it should not be allowed,
I thought I had updated this, will remove them - many thanks for spotting.
As for the names,
"Ticks and Tickspan don't seem too optimal of names. What about TimeInstance
and TimeSpan?"
I agree with you that the names could possibly be improved, believe me I have
tried to use multiple names - one thing I wanted was to emphasize that these
types (currently) are only based on counter's (i.e ticks), and do not represent
any higher "time" abstraction. That is, the implementation is tied to data from
counters (based on ticks with a specific ticks frequency). In my current
context, I use these values to talk about "time" (as you saw from the original
post), but "time" can mean many things to different people, esp. many
implementations and clock sources.
Also, there already exist a few "Time/Timer" types (although they are not as
good as I want them to be for current purposes), for example there is a type
called Timestamp (in runtime/timers.hpp).
I have come to the conclusion that in order to address the overall time
abstractions in Hotspot, we would need to make a larger effort - this we should
indeed do, but it's outside the current scope.
Also I am pretty sure that when we do revisit the time abstractions, the names
for these types will most likely change - that made me leave the names to
emphasize the "ticks" sources.
Thanks for your input.
Best regards
Markus
From: Vitaly Davidovich [mailto:HYPERLINK "mailto:[email protected]"
\[email protected]]
Sent: den 12 november 2013 15:37
To: Markus Gronlund
Cc: serviceability-dev; HYPERLINK "mailto:[email protected]"
\[email protected]; HYPERLINK
"mailto:[email protected]" \[email protected]
Subject: Re: RFR(M): 8028128: Add a type safe alternative for working with
counter based data
Hi Markus,
Ticks and Tickspan don't seem too optimal of names. What about TimeInstance
and TimeSpan?
You have some operator overloads for these that can compare them against jlongs
- doesn't that still make it easy to mix up what you're comparing? Personally,
since these are value types I'd make their API work only against these new
types and make caller create the right type for comparison.
Just my $.02, feel free to ignore :).
Thanks
Sent from my phone
On Nov 12, 2013 6:16 AM, "Markus Gronlund" <HYPERLINK
"mailto:[email protected]" \[email protected]> wrote:
Greetings,
Kindly asking for reviews for the following changeset:
Webrev: http://cr.openjdk.java.net/~mgronlun/8028128/webrev01/
Bug: https://bugs.openjdk.java.net/browse/JDK-8028128
Description:
Currently, when working with counter based data, the primary data type
representation in the VM are raw jlong's. jlong's are employed to represent
both:
1. a single instance in time, for example a "now" timestamp
2. a time duration, a timespan, for example the duration between "now" - "then"
Having a raw jlong type represent both of these shifts the responsibility to
the programmer to always ensure the correct validity of the counter data,
without any assistance either at compile time or at runtime.
The event based tracing framework relies heavily on counter based data in order
to keep track of time and timing related information and we have seen counter
data errors where the representation sent to the tracing framework has
submitted the wrong time, i.e. a timespan when a time instant was expected and
vice versa.
We should therefore add an alternative to jlongs for representing counter based
data. We should enlist the help of the type system to enforce the correct data
types at compile time as well as introduce strong runtime asserts in order to
help with the correct usage of time and to reduce the number of potential bugs.
I will therefore add two new types in src/share/vm/utilities:
1. "Ticks" - represents a single counter based timestamp, a single instance in
time.
2. "Tickspan" - represents a counter based duration, a timespan, between two
"Ticks"
Please see the added files:
- src/share/vm/utilities/ticks.hpp
- src/share/vm/utilities/ticks.inline.hpp
- src/share/vm/utilities/ticks.cpp
I have also updated some of the existing event based tracing "event sites" to
employ usage of these new types as well as updated a few places in the event
based tracing framework implementation to accommodate these types.
Testing completed:
nsk.stress.testlist (UTE/Aurora)
GC nightlies (Aurora)
gc/gctests/* (UTE/Aurora)
nsk.gc.testlist (UTE/Aurora)
SpecJBB2013 (no regression)
SpecJBB2005 (no regression)
Kitchensink (locally Windows) runs for +> 9 days (still running.)
Thanks in advance
Markus