Poor performance with invokedynamic on Graal
Charles Oliver Nutter
headius at headius.com
Sat Aug 6 00:35:53 UTC 2016
I've started to poke at running JRuby on Graal and I've been pretty
disappointed with the results so far. It appears that Graal is not doing a
good job of optimizing through invokedynamic call sites, which largely
defeats our best opportunity for optimization.
I've tried two benchmarks today against graal-core HEAD.
The first is trivial: a recursive fib benchmark. JRuby+indy on Hotspot
(8u92) runs fib(35) in around 0.32s. JRuby+indy on Graal takes 0.52s or so
The second benchmark is more robust: a pure-Ruby red/black tree
implementation. The benchmark builds up a large tree, searches it, deletes
from it, etc. JRuby+indy on Hotspot can run an iteration in about 0.41s. On
Graal, it takes 1s or more.
This is all especially unfortunate because some time ago I was able to see
a 5x improvement on a mandelbrot benchmark. I don't see that on recent
Here's how to reproduce...
* Grab a master build of JRuby from http://ci.jruby.org. Look for
220.127.116.11-snapshot "bin" tarball.
* Unpack, add bin/ to PATH so JRuby gets picked up.
* Run the benchmarks I've gisted below.
Let me know if you have question! I want to see this run as well as I
believe it should!
More information about the graal-dev