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)
@ 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
> <[email protected]> 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
>> [email protected]
>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>
> _______________________________________________
> mlvm-dev mailing list
> [email protected]
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev