On Aug 10, 2011, at 9:10 PM, Christian Thalinger wrote:

> 
> On Jul 28, 2011, at 7:29 PM, Ola Bini wrote:
> 
>> On 2011-07-28 10.11, Christian Thalinger wrote:
>>> 
>>> On Jul 28, 2011, at 6:10 PM, Ola Bini wrote:
>>> 
>>>>> The bad performance sounds like something is not inlined at all.
>>>>> How are you invoking valueMH?  Via invokedynamic or a direct MH
>>>>> call?
>>>> 
>>>> valueMH is combined with an exactInvoker and then chained together
>>>> with another method handle that calls a method on the result of it
>>>> that returns another methodhandle that is set as the target for the
>>>> call site.
>>> 
>>> Hard to follow :-)
>>> 
>>>> 
>>>> Exactly the same thing that was done in the emitted bytecode,
>>>> actually.
>>> 
>>> Do you have a test case to run?
>>> 
>> 
>> Yes, it's a specific benchmark run (bench/bench_read_lexical.sp). The
>> current master of Seph (12e906d6cac94608a1da565fe748f87421210c97) has
>> the method handle implementation. The
>> c92f2246c09cef9eb9018128e19bfa25593afd2f checkin is the last with the
>> bytecode based version.
> 
> Sorry, I forgot to look into that.
> 
> $ bin/seph --version bench/bench_read_lexical.sp
> Seph 0.0.1-SNAPSHOT [2011-08-10 07:44 -- c92f224]
> variable reading, flat short lex 1.803377237
> variable reading, flat short lex 1.716815071
> variable reading, flat short lex 1.720287124
> variable reading, flat short lex 1.721601836
> variable reading, flat short lex 1.718097445
> 
> $ bin/seph --version bench/bench_read_lexical.sp
> Seph 0.0.1-SNAPSHOT [2011-08-10 07:46 -- 12e906d]
> variable reading, flat short lex 7.131910330
> variable reading, flat short lex 6.479506665
> variable reading, flat short lex 6.427145377
> variable reading, flat short lex 6.472033742
> variable reading, flat short lex 6.481569097
> 
> Current master is even slower:
> 
> $ bin/seph --version bench/bench_read_lexical.sp
> Seph 0.0.1-SNAPSHOT [2011-08-10 07:50 -- 4520464]
> variable reading, flat short lex 8.043511168
> variable reading, flat short lex 7.227023135
> variable reading, flat short lex 7.167401210
> variable reading, flat short lex 7.153554078
> variable reading, flat short lex 7.157729388
> 
> Looking at the compiled methods and the inlinees I found this one (I suppose 
> this the body for flat_short_scope, correct?):
> 
>   1490  167             
> seph$gen$abstraction$1$flat_short_scope::activationFor (9 bytes)
>                            @ 3   java.lang.invoke.MethodHandle::invokeExact 
> (36 bytes)   inline (hot)
>                              @ 5   java.lang.invoke.MethodHandle::invokeExact 
> (5 bytes)   inline (hot)
>                                @ 1   
> sun.invoke.util.ValueConversions::identity (2 bytes)   inline (hot)
>                              @ 12   
> java.lang.invoke.MethodHandle::invokeExact (12 bytes)   inline (hot)
>                                @ 5   
> java.lang.invoke.MethodHandleImpl::selectAlternative (10 bytes)   inline (hot)
>                              @ 29   
> java.lang.invoke.MethodHandle::invokeExact (38 bytes)   inline (hot)
>                              @ 29   
> java.lang.invoke.MethodHandle::invokeExact (11 bytes)   inline (hot)
>                                @ 4   
> seph.lang.ActivationHelpers::arityErrorMH (45 bytes)   too big
>                                @ 5   
> java.lang.invoke.MethodHandle::invokeExact (6 bytes)   inline (hot)
>                                  @ 2   
> seph.lang.compiler.SephCallSite::int_eq (11 bytes)   inline (hot)
>                                @ 14   
> java.lang.invoke.MethodHandle::invokeExact (12 bytes)   inline (hot)
>                                  @ 5   
> java.lang.invoke.MethodHandleImpl::selectAlternative (10 bytes)   inline (hot)
>                                @ 31   
> java.lang.invoke.MethodHandle::invokeExact (38 bytes)   inline (hot)
>                                @ 31   
> java.lang.invoke.MethodHandle::invokeExact (10 bytes)   inline (hot)
>                                  @ 3   java.lang.invoke.MethodHandle::bindTo 
> (58 bytes)   already compiled into a medium method
>                                  @ 5   
> java.lang.invoke.MethodHandle::invokeExact (6 bytes)   inline (hot)
>                                    @ 2   
> seph.lang.compiler.SephCallSite::int_eq (11 bytes)   inline (hot)
>                                  @ 14   
> java.lang.invoke.MethodHandle::invokeExact (12 bytes)   inline (hot)
>                                    @ 5   
> java.lang.invoke.MethodHandleImpl::selectAlternative (10 bytes)   inline (hot)
>                                  @ 31   
> java.lang.invoke.MethodHandle::invokeExact (11 bytes)   inline (hot)
>                                  @ 31   
> java.lang.invoke.MethodHandle::invokeExact (10 bytes)   inline (hot)
>                                    @ 3   
> java.lang.invoke.MethodHandle::bindTo (58 bytes)   already compiled into a 
> medium method
>                                    @ 4   
> seph.lang.ActivationHelpers::arityErrorMH (45 bytes)   inline (hot)
> 
> The problem is:  java.lang.invoke.MethodHandle::bindTo
> 
> That one calls
> 
> java.lang.invoke.BoundMethodHandle::<init> (19 bytes)   already compiled into 
> a big method
> 
> which calls
> 
> java.lang.invoke.MethodHandleNatives::init (0 bytes)   native method
> 
> and there we have our performance bugger.

FYI, this is:

7071693: JSR 292: native method calls slow down method handle constructor 
execution

I'm not sure if John is already working on that but that's the plan.

-- Christian

> 
> -- Christian
> 
>> 
>> Cheers
>> -- 
>> Ola Bini (http://olabini.com)
>> Ioke - JRuby - ThoughtWorks
>> 
>> "Yields falsehood when quined" yields falsehood when quined.
>> 
>> _______________________________________________
>> 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

Reply via email to