On Jul 6, 2011, at 10:49 PM, Tom Rodriguez wrote: > > On Jul 6, 2011, at 4:18 AM, Christian Thalinger wrote: > >> On Jul 5, 2011, at 6:39 PM, Charles Oliver Nutter wrote: >>> I'm not in position at this exact moment to report perf issues, but >>> Rémi's list would be a good start. I'll return to JRuby benchmarks and >>> start looking for specific bottlenecks. >> >> OK. >> >>> >>> As reported in some of my my previous emails, JRuby has several uses >>> of indy that are off by default, so it will be nice to start getting >>> them enabled. >> >> When I use -Xinvokedynamic.all=true with bench_string_ops.rb I get: >> >> InvokeDynamicSupport.java:710:in `fixnum_op_mul': >> java.lang.ClassCastException: org.jruby.RubyString cannot be cast to >> org.jruby.RubyFixnum >> >> I just saw a benchmark I haven't seen before: bench_avi_base64.rb >> >> Performance with indy is not very good: >> >> intelsdv07:~/mlvm/jruby$ jruby --server -Xcompile.invokedynamic=false >> bench/bench_avi_base64.rb >> 1.569000 0.000000 1.569000 ( 1.539000) >> 0.895000 0.000000 0.895000 ( 0.895000) >> 0.850000 0.000000 0.850000 ( 0.850000) >> 0.848000 0.000000 0.848000 ( 0.848000) >> 0.848000 0.000000 0.848000 ( 0.848000) >> >> intelsdv07:~/mlvm/jruby$ jruby --server bench/bench_avi_base64.rb >> 2.335000 0.000000 2.335000 ( 2.305000) >> 1.503000 0.000000 1.503000 ( 1.503000) >> 1.470000 0.000000 1.470000 ( 1.470000) >> 1.479000 0.000000 1.479000 ( 1.479000) >> 1.470000 0.000000 1.470000 ( 1.470000) >> >> The pattern I always see when I look at the inlining tree of a badly >> performing benchmark is this one: >> >> @ 9 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::invocationFallback >> (197 bytes) inline (hot) > > I would think we don't want this inlined since it's the fallback path. Try > -XX:CompileCommand=dontinline,*,invocationFallback. Inlining it may cause us > to run up against other limits like the NodeInliningCutoff and > DesiredMethodLimit.
Ahh, right. This is inlined because of how we promote the invocation count of the call site into the method handle chain. Sorry, I forgot. -- Christian > > tom > >> @ 2 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::pollAndGetClass (13 >> bytes) inline (hot) >> @ 1 >> org.jruby.runtime.ThreadContext::callThreadPoll (23 bytes) inline (hot) >> @ 19 >> org.jruby.runtime.ThreadContext::pollThreadEvents (9 bytes) inline (hot) >> @ 5 >> org.jruby.RubyThread::pollThreadEvents (13 bytes) inline (hot) >> @ 11 org.jruby.RubyModule::searchWithCache >> (68 bytes) already compiled into a medium method >> @ 19 >> org.jruby.runtime.invokedynamic.JRubyCallSite::callType (5 bytes) inline >> (hot) >> @ 25 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::methodMissing (47 >> bytes) too big >> @ 34 >> org.jruby.runtime.invokedynamic.JRubyCallSite::callType (5 bytes) inline >> (hot) >> @ 43 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::callMethodMissing (34 >> bytes) never executed >> ! @ 55 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::getTarget (169 bytes) >> too big >> @ 109 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::postProcess (315 >> bytes) too big >> @ 115 >> java.lang.invoke.MutableCallSite::getTarget (5 bytes) inline (hot) >> @ 128 >> java.lang.invoke.MutableCallSite::getTarget (5 bytes) inline (hot) >> @ 135 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::createGWT (59 bytes) >> too big >> @ 138 >> java.lang.invoke.MutableCallSite::setTarget (15 bytes) executed < >> MinInliningThreshold times >> @ 156 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::createGWT (11 bytes) >> never executed >> @ 159 >> java.lang.invoke.MutableCallSite::setTarget (15 bytes) executed < >> MinInliningThreshold times >> @ 94 >> org.jruby.runtime.invokedynamic.InvokeDynamicSupport::createFail (74 bytes) >> too big >> @ 100 >> java.lang.invoke.MutableCallSite::setTarget (15 bytes) executed < >> MinInliningThreshold times >> @ 190 >> java.lang.invoke.MethodHandle::invokeWithArguments (61 bytes) too big >> >> I remember we were talking about the createGWT. Can this go away? >> >> -- Christian >> >>> >>> On Tue, Jul 5, 2011 at 9:04 AM, Christian Thalinger >>> <christian.thalin...@oracle.com> wrote: >>>> Now that we are done with 7 I'm looking into performance issues we have. >>>> Are there any that you know of and would like to get fixed for 7u2? >>>> >>>> -- Christian >>>> _______________________________________________ >>>> mlvm-dev mailing list >>>> mlvm-dev@openjdk.java.net >>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >>>> >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-dev@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> >> >> _______________________________________________ >> mlvm-dev mailing list >> mlvm-dev@openjdk.java.net >> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev > > _______________________________________________ > mlvm-dev mailing list > mlvm-dev@openjdk.java.net > http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev