On May 26, 2011, at 9:15 AM, Charles Oliver Nutter wrote: > On Thu, May 26, 2011 at 1:58 AM, Tom Rodriguez <tom.rodrig...@oracle.com> > wrote: >> but test is some ugly goo because of boxing. It's relatively easy to get >> the optimizer to fold away the boxing for boolean but sadly it doesn't help >> the performance at all. Additionally that ends up touching a fair amount of >> common code which makes it a little more risky for 7. > > It is definitely frustrating to see that perf has degraded so much the > past couple weeks and still not be there with the reverted code. I'm > hoping your fix will help bring the promised ricochet perf to JRuby, > but so far we're a long way off from what perf looked like on earlier > builds. There must be something more obvious than boolean box > folding...perhaps obvious enough we're not seeing it yet.
I also did some performance testing. I used a recent HS repository, applied Tom's patch, used a recent meth.jar provided by John and this is what I got: intelsdv07:~/mlvm/jruby$ bin/jruby.sh -J-Xbootclasspath/p:meth.jar --server -Xcompile.invokedynamic=false bench/bench_fib_recursive.rb 10 35 1.107000 0.000000 1.107000 ( 1.078000) 0.982000 0.000000 0.982000 ( 0.982000) 0.981000 0.000000 0.981000 ( 0.981000) 0.980000 0.000000 0.980000 ( 0.980000) 0.980000 0.000000 0.980000 ( 0.980000) 0.979000 0.000000 0.979000 ( 0.979000) 0.980000 0.000000 0.980000 ( 0.980000) 0.980000 0.000000 0.980000 ( 0.980000) 0.989000 0.000000 0.989000 ( 0.989000) 0.979000 0.000000 0.979000 ( 0.979000) intelsdv07:~/mlvm/jruby$ bin/jruby.sh -J-Xbootclasspath/p:meth.jar --server -Xcompile.invokedynamic=false -Xcompile.dynopt=true bench/bench_fib_recursive.rb 10 35 0.895000 0.000000 0.895000 ( 0.864000) 0.761000 0.000000 0.761000 ( 0.761000) 0.763000 0.000000 0.763000 ( 0.763000) 0.763000 0.000000 0.763000 ( 0.763000) 0.763000 0.000000 0.763000 ( 0.763000) 0.765000 0.000000 0.765000 ( 0.765000) 0.764000 0.000000 0.764000 ( 0.764000) 0.762000 0.000000 0.762000 ( 0.762000) 0.772000 0.000000 0.772000 ( 0.772000) 0.762000 0.000000 0.762000 ( 0.762000) intelsdv07:~/mlvm/jruby$ bin/jruby.sh -J-Xbootclasspath/p:meth.jar --server -Xcompile.invokedynamic=true bench/bench_fib_recursive.rb 10 35 1.074000 0.000000 1.074000 ( 1.045000) 0.929000 0.000000 0.929000 ( 0.928000) 0.925000 0.000000 0.925000 ( 0.925000) 0.925000 0.000000 0.925000 ( 0.925000) 0.924000 0.000000 0.924000 ( 0.924000) 0.923000 0.000000 0.923000 ( 0.923000) 0.923000 0.000000 0.923000 ( 0.923000) 0.935000 0.000000 0.935000 ( 0.935000) 0.926000 0.000000 0.926000 ( 0.926000) 0.920000 0.000000 0.920000 ( 0.920000) Here are the numbers from April 28 on the same machine: http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-April/002873.html Although I can't remember if the invokedynamic numbers were with or without the guard-removal-hack I tried at that time (I think without, because with the hack the numbers should be very similar to dynopt, see: http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-April/002869.html). Using Tom's new code doesn't make a difference since I think the meth.jar from John includes the reverted GWT code. A quick check on bench_string_ops.rb shows that a couple of numbers are better but some are worse, especially string == comparison (compare with http://mail.openjdk.java.net/pipermail/mlvm-dev/2011-April/002887.html): intelsdv07:~/mlvm/jruby$ bin/jruby.sh -J-Xbootclasspath/p:meth.jar --server -Xcompile.invokedynamic=true -J-XX:+UnlockDiagnosticVMOptions -J-XX:+UseNewCode2 bench/bench_string_ops.rb Measure string array sort time 2.726000 0.000000 2.726000 ( 2.698000) 2.651000 0.000000 2.651000 ( 2.651000) 2.648000 0.000000 2.648000 ( 2.648000) 2.647000 0.000000 2.647000 ( 2.647000) 2.632000 0.000000 2.632000 ( 2.632000) Measure hash put time 0.184000 0.000000 0.184000 ( 0.184000) 0.096000 0.000000 0.096000 ( 0.096000) 0.096000 0.000000 0.096000 ( 0.096000) 0.100000 0.000000 0.100000 ( 0.100000) 0.093000 0.000000 0.093000 ( 0.093000) Measure hash get time (note: not same scale as put test) 0.364000 0.000000 0.364000 ( 0.364000) 0.251000 0.000000 0.251000 ( 0.250000) 0.251000 0.000000 0.251000 ( 0.251000) 0.258000 0.000000 0.258000 ( 0.258000) 0.250000 0.000000 0.250000 ( 0.250000) Measure string == comparison time 0.511000 0.000000 0.511000 ( 0.511000) 0.314000 0.000000 0.314000 ( 0.314000) 0.309000 0.000000 0.309000 ( 0.309000) 0.310000 0.000000 0.310000 ( 0.310000) 0.310000 0.000000 0.310000 ( 0.310000) Measure string == comparison time, different last pos 0.549000 0.000000 0.549000 ( 0.549000) 0.367000 0.000000 0.367000 ( 0.366000) 0.367000 0.000000 0.367000 ( 0.367000) 0.368000 0.000000 0.368000 ( 0.368000) 0.372000 0.000000 0.372000 ( 0.372000) Measure string <=> comparison time 0.435000 0.000000 0.435000 ( 0.435000) 0.216000 0.000000 0.216000 ( 0.216000) 0.218000 0.000000 0.218000 ( 0.218000) 0.216000 0.000000 0.216000 ( 0.216000) 0.217000 0.000000 0.217000 ( 0.217000) Measure 'string'.index(fixnum) time 0.358000 0.000000 0.358000 ( 0.358000) 0.215000 0.000000 0.215000 ( 0.215000) 0.215000 0.000000 0.215000 ( 0.215000) 0.216000 0.000000 0.216000 ( 0.216000) 0.214000 0.000000 0.214000 ( 0.214000) Measure 'string'.index(str) time 0.546000 0.000000 0.546000 ( 0.546000) 0.388000 0.000000 0.388000 ( 0.388000) 0.387000 0.000000 0.387000 ( 0.387000) 0.390000 0.000000 0.390000 ( 0.391000) 0.390000 0.000000 0.390000 ( 0.390000) Measure 'string'.rindex(fixnum) time 0.348000 0.000000 0.348000 ( 0.348000) 0.226000 0.000000 0.226000 ( 0.226000) 0.225000 0.000000 0.225000 ( 0.225000) 0.229000 0.000000 0.229000 ( 0.229000) 0.225000 0.000000 0.225000 ( 0.225000) Measure 'string'.rindex(str) time 0.763000 0.000000 0.763000 ( 0.763000) 0.623000 0.000000 0.623000 ( 0.623000) 0.622000 0.000000 0.622000 ( 0.622000) 0.623000 0.000000 0.623000 ( 0.623000) 0.621000 0.000000 0.621000 ( 0.621000) -- Christian _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev