JRuby invokedynamic updates
Charles Oliver Nutter
headius at headius.com
Thu Aug 11 14:07:03 PDT 2011
On Wed, Aug 10, 2011 at 11:02 PM, Charles Oliver Nutter
<headius at headius.com> wrote:
> I've added bench/bench_fib_complex.rb. This runs the original fib
> along with three variations:
>
> * One that uses constants for the literals 1 and 2 in the code
> * One that dispatches to other Ruby methods for the <, -, and + calls
> * One that does both
>
> Performance is perhaps most easily explained by showing the numbers:
After talking with Christian I realized that the constant-based
versions were not getting fully bound with invokedynamic because they
have pre/post logic (specifically, they need to update some
thread-local frame state in JRuby). Ignore those results for the
moment.
There does still seem to be a problem with switchpoints though. I
stripped out all but the "additional calls" version and compared
switchpoint invalidation with normal.
headius at headius-desktop:~/projects/jruby$
JAVA_HOME=~/hsx-hotspot/build/linux/jdk-linux-i586/ bin/jruby --server
bench/bench_fib_complex.rb 5 35
fib with additional calls
9227465
2.180000 0.000000 2.180000 ( 2.070000)
fib with additional calls
9227465
1.829000 0.000000 1.829000 ( 1.829000)
fib with additional calls
9227465
1.870000 0.000000 1.870000 ( 1.870000)
fib with additional calls
9227465
1.642000 0.000000 1.642000 ( 1.642000)
fib with additional calls
9227465
1.639000 0.000000 1.639000 ( 1.639000)
headius at headius-desktop:~/projects/jruby$
JAVA_HOME=~/hsx-hotspot/build/linux/jdk-linux-i586/ bin/jruby --server
-Xinvokedynamic.invocation.switchpoint=true bench/bench_fib_complex.rb
5 35
fib with additional calls
9227465
5.951000 0.000000 5.951000 ( 5.841000)
fib with additional calls
9227465
5.538000 0.000000 5.538000 ( 5.538000)
fib with additional calls
9227465
5.531000 0.000000 5.531000 ( 5.531000)
fib with additional calls
9227465
5.503000 0.000000 5.503000 ( 5.503000)
fib with additional calls
9227465
5.505000 0.000000 5.505000 ( 5.505000)
My quick look through inlining shows that "plus", "minus", "lt" all
inline into fib_ruby3 ok, as do the binops they call. fib_ruby3
appears to recursively inline one level. I did not see any obvious
failures in inlining, but there's something not right here.
- Charlie
More information about the mlvm-dev
mailing list