Hi John,

In my blog entry this week I will present our current offering and its 
performance characteristics. But this is not driven exclusively by 
performance though it is a big factor. I want to make it extremely easy 
for counters (longs which cannot be decremented only incremented) to be 
added into code without too much mental & maintenance effort on the 
developer such as needing to create a field or a class holding fields 
representing counter names(paces) used as indices.

Incrementing a counter should be as easy as listing it on a line of code 
though we should also support value specific increments. Maybe this 
would be a whole lot easier with first class DSL support and later the 
JVM evolving to having some specific DSL awareness in its optimization 
routines if the context cannot be easily determined via the existing 
instruction execution mechanics.

With this proposal I am hoping that we can eliminate much of the 
logging/jmx abuses that exist today but at the same time provide a means 
for communication to flow upwards from callers without have to abuse 
return values (pairs, tuples,....). A caller could simply make a 
savepoint and then generate a changeset and see the effects (events) as 
a result of its execution and calling similar to what we offer at the 
metering level which includes both activities and meters (mapped to 
counters).

http://opencore.jinspired.com/?page_id=3553#p23

http://williamlouth.wordpress.com/2010/01/05/user-level-metering-with-savepoints-changesets/

I also see this proposal as a means for the JVM to convey provide more 
contextual runtime diagnostics (case-and-effect rather than metric 
causality) and I think it would be a much better option for dynamic 
languages to expose runtime observation rather than having them to be in 
someway retrofit to support something akin to JVMTI. For example JRuby 
could have counters named (j)ruby.object.alloc, (j)ruby.call.count,.... 
which would then be visible to Java callers (from a calling thread 
specific).

William

On 02/08/2011 00:06, John Rose wrote:
> On Aug 1, 2011, at 7:14 AM, Rémi Forax wrote:
>
>> Basically, this kind of counter already exist in the VM,
>> is there a way to bubble them up in Java ?
> William and I talked about this a little at the Summit, too.
>
> First, a caveat:  It's interesting and useful to start with pseduocode 
> sketches of the desired functionality, along the lines of a new intrinsic 
> "thread local long" data type in the Java language and bytecodes.  But, it is 
> extremely rare that this turns out to be the right answer.  New bytecodes are 
> very expensive, compared to new APIs.  All less-expensive options have to be 
> exhausted first.
>
> The right first answer is to create a suitable Java API (usually a class), 
> and then see how to support it in the JVM with suitable optimizations.
>
> For example, a Java ThreadLocal.get performs about the same underlying 
> operations as a C pthread_getspecific.  When TL.get was first written, 
> microbenchmarks showed that it was much slower than the C equivalent, but it 
> was relatively simple to optimize the relevant code paths (especially 
> Thread.currentThread) in the JVM.
>
> In the case of thread-local counters, an abstraction like ThreadLocal is 
> almost certainly the right answer.  In fact, ThreadLocal<long[]>  is the 
> first thing to try.  If that cannot be optimized enough, then we can look 
> into further options.  Note that "cannot be optimized enough" applies only 
> after a round of compiler work.  A failing microbenchmark is not even close 
> to due diligence on this point!
>
> Since we don't have reified generics, ThreadLocal<long>  is not available; 
> wish it were.  Other starting points could be ThreadLocalLong or 
> ThreadLocalLongArray, with a suitably optimized underlying mechanism that 
> stores exactly one long[] reference in each Thread.
>
> But ThreadLocal<long[]>  is the first thing to investigate.
>
> -- John
>
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to