On 06/05/2011 10:41 AM, Charles Oliver Nutter wrote: > On Fri, Jun 3, 2011 at 1:01 PM, Tom Rodriguez<tom.rodrig...@oracle.com> > wrote: >> On Jun 3, 2011, at 12:12 AM, Charles Oliver Nutter wrote: >> >>> I did make another small discovery: the + calls never inline >>> completely. They eventually are a virtual invocation of >>> RubyFixnum.op_plus, and in both old and new builds they're calls in >>> the asm. >> That's not what I see when I run it. RubyFixnum::op_plus is always inlined >> in the runs I do. > Am I reading the dumps wrong. If possible, tell me where you see them > inlining in the asm dumps I provided against mlvm and macosx builds. I > want to learn how to better understand the assembly output! > >> The current machinery should do the same inlining that it would have done if >> there were a direct call instead of a method handle invoke. Basically the >> call site has frequency information that drives our more aggressive inlining >> and that is propagated through the method to the final call. So if the >> method handle is hot then the final call will be too. > As Rémi mentioned, the game changes somewhat when the eventual direct > MH invoke is at the end of a chain of other handles like GWTs and > argument permutes; or rather...it's at least different than doing a > MethodHandle.invokeExact in-place myself, and I would just like to > know whether it's treated any differently by Hotspot. > >> Don't get sad just yet. 7 won't perform as well as it might but we should >> be able to fix the performance issues in the updates. Once the core >> implementation is ironed out we can optimize to our hearts content and there >> no problem getting that into update releases. > Oh I definitely understand! I have expected for some time that > performance would be adequate but not stellar for the 1.7.0 release, > and that after you all had ironed out the compatibility and stability > issues we'd hit performance hard for an update. At that point, we'll > be comfortable releaseing a JRuby version that's invokedynamic-based, > since the numbers will better reflect what we all want them to.
7 already performs well. But yes, compared to a top notch JVM based dynamic language runtime, 7 has some performance glitches. But please don't forget that implementing a runtime with invokedynamic is a way easier that to write one without it. Also invokedynamic performance is already stellar if you have primitive types in the signature compared to other runtimes. By example, for JRuby, x + 1 can have a dedicated fast path that: - doesn't require to box 1 to a Fixnum. - has a specific overflow check. This kind of optimization is hard to implement without invokedynamic. > - Charlie Rémi _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev