nirvdrum has joined #jruby
<headius[m]> another justification for splitting blocks lazily into different forms: Proc#call does its own arg processing before passing to the block, which then re-processes them again
<headius[m]> worth looking into whether both are really needed but the protocol for these things is so involved
<headius[m]> the indy logic for binding Proc#call can reduce that processing somewhat since it has input args and knows target arity, but ideally it wouldn't have to
ur5us_ has quit [Ping timeout: 260 seconds]
ur5us_ has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
_whitelogger has joined #jruby
nirvdrum has quit [Ping timeout: 268 seconds]
ur5us_ has quit [Ping timeout: 260 seconds]
_whitelogger has joined #jruby
nirvdrum has joined #jruby
nirvdrum has quit [Ping timeout: 265 seconds]
nirvdrum has joined #jruby
nirvdrum has quit [Ping timeout: 265 seconds]
nirvdrum has joined #jruby
drbobbeaty has quit [Ping timeout: 245 seconds]
rusk has quit [Remote host closed the connection]
lucasb has joined #jruby
<rdubya[m]> enebo: headius
<rdubya[m]> * enebo: headius does this apply to jruby? https://github.com/ruby/ruby/pull/2752
nirvdrum has quit [Quit: Leaving]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
nirvdrum has quit [Remote host closed the connection]
nirvdrum has joined #jruby
xardion has quit [Remote host closed the connection]
xardion has joined #jruby
<headius[m]> lopex that explains a lot about G1
<headius[m]> rdubya it very likely could
ur5us_ has joined #jruby
ur5us_ has quit [Read error: Connection reset by peer]
<headius[m]> enebo: I put the block improvements into a PR and added some benchmark numbers
<headius[m]> I also included numbers for when it isn't an inlined indy yield...the lion's share of these optimizations will improve all leaf blocks that can eliminate the frame
<headius[m]> I really would like to see some big impact from this 🙂 There's a lot of leaf blocks in Ruby
<enebo[m]> headius: I will just merge once travis re-oks it
<enebo[m]> I am going to try a graphql bench I was just running
<headius[m]> there's more to be done here too...we're still checking both block type and eval type on every entry
<enebo[m]> we are slower than MRI without indy on by like 40%
<enebo[m]> they do a nutty amount of simple nested closures
<headius[m]> best solution there would be to move those operations into IR and emit different code for lambda vs normal, module_eval versus no eval
<headius[m]> oh I just realized something
<headius[m]> nested closures shouldn't need to push a frame either
<enebo[m]> as we were saying if that really does not change once set we can eliminate evalType pretty easily
<headius[m]> so like 1.times { 1.times { } }
<headius[m]> the containing method neds to make a frame available for both blocks, but the outer block shouldn't need to push it since it doesn't use it
<headius[m]> the inner block can be created just based on the outer block's binding
<headius[m]> we have lots of opportunity here
<headius[m]> so potentially if we have nested blocks that don't access frame we could eliminate all frame pushes except the one at the method level
<headius[m]> wow how did that finish travis so fast
<enebo[m]> I was noticing earlier in the week your first build seemed way faster than our others
<enebo[m]> I was not sure if you got "lucky" somehow on travis instance or ?
<headius[m]> yeah I was noticing that too
<headius[m]> and MRI finishing in 12 minutes is really unusually fast
<enebo[m]> I guess digging more into whether anything in IRScope.needsFrame() is conservative would be a good next step too
<headius[m]> it's possible travis bumped up speed or something so I don't know
<enebo[m]> going to test on graphql but are all builds faster?
<enebo[m]> it is like 30 minutes faster from what I saw
<enebo[m]> which is like a 30% improvement
<headius[m]> they have been
<headius[m]> oh you mean like master builds too?
<headius[m]> so that's three days ago
<headius[m]> 15-17min for MRI
<enebo[m]> BEFORE ' query 13.613 (± 7.3%) i/s - 267.000 in 20.012019s'
<enebo[m]> AFTER ' query 14.539 (± 6.9%) i/s - 289.000 in 20.039969s'
<enebo[m]> Java 8 non-indy
<headius[m]> well that's a gain
<enebo[m]> MRI27 ' query 17.731 (±11.3%) i/s - 346.000 in 20.004189s'
<enebo[m]> tons of blocks and we won before this patch with indy I will get before/after on that with 8
<enebo[m]> BEFORE(indy) ' query 18.493 (±10.8%) i/s - 359.000 in 20.020372s'
<enebo[m]> AFTER(indy)' query 19.986 (±15.0%) i/s - 381.000 in 19.994822s'
<enebo[m]> surprisingly similar jump
<enebo[m]> ce 19.2.1 (something with native exts and 11) is not so good though
<headius[m]> with indy on, indy yields are on now
<enebo[m]> 19.2.1CE: query 8.256 (±24.2%) i/s - 152.000 in 20.076710s
<headius[m]> heh
<headius[m]> CE is still the fastest on my contrived times bench
<enebo[m]> DEFEATED...FINISH HIM
<headius[m]> 2-3x faster than EE
<enebo[m]> with ir.inliner on I get 9s with 8 so something is not going well
<enebo[m]> meh on G1
<headius[m]> hah
<headius[m]> yeah I could shift gears for a while to look at inlininer + indy
<headius[m]> we're going to need to pair on making IR specialize code for lambda vs normal
<enebo[m]> 16s for G1+indy+11 and 21s for Par+indy+11
<enebo[m]> That is an epic shortfall on GC with G1
<headius[m]> did you see lopex's link?
<enebo[m]> You can't be all things to all people but wow
<headius[m]> G1 does great on large objects and shit but the throughput on other benchmarks is in the toilet
<enebo[m]> yeah G1 did not do great on several of those use cases
<enebo[m]> shen. did well in most
<lopex> there's some discussion on hn too https://news.ycombinator.com/item?id=21797030
<headius[m]> Oliver's fixing a bunch of stuff in the bash script
<headius[m]> I'm schooling him on doing small commits as part of a larger PR
<headius[m]> might be able to make it sh compat...that would be slick
<headius[m]> lopex: yeah crazy
<enebo[m]> 15.1s with par+11 so we are getting pretty close to MRI for this without indy
<headius[m]> I know there are some improvements to G1 coming but how could anyone recommend it at this point
<headius[m]> or make it default 🙄
<enebo[m]> I should probably get a newer 13 and try that to see what else is going on
<enebo[m]> yeah I was wondering what their metrics for enabling it was
<enebo[m]> It no doubt made a bunch of things as good or better
<enebo[m]> for us it looks horrible and makes it look slower
<headius[m]> 14 came out in Sept right?
travis-ci has joined #jruby
travis-ci has left #jruby [#jruby]
<travis-ci> jruby/jruby (master:a318333 by Thomas E Enebo): The build passed. https://travis-ci.org/jruby/jruby/builds/627868436 [172 min 19 sec]
<enebo[m]> 172 is slower
<enebo[m]> or more toward the slow result
<enebo[m]> so something with travis having better or worse vms? Or maybe just some networking influence
<headius[m]> 172?
<enebo[m]> that job is 172 minutes
<enebo[m]> 170-190 minutes is about what I expect
<enebo[m]> ignore me looking back 190ish is more the normal time
<headius[m]> yeah it does seem faster
<headius[m]> bit by bit
<headius[m]> @rd
<headius[m]> rdubya: hey returning to that issue you mentioned
<headius[m]> in JRuby I know that our method invalidation impacts startup time to some extent, both for simple commands and for larger apps
<headius[m]> Especially if you are making modifications at a high level like Kernel or Object... we invalidate all classes below that so e.g. Kernel changes have to walk every class in the system
<headius[m]> invalidateClassHierarchy in RubyModule I think
<headius[m]> there's gotta be a better way but I have not dug into it for a while
<rdubya[m]> interesting
<headius[m]> this also flips the bit on a bunch of invokedynamic SwitchPoint which has a surprisingly high cost
sagax has quit [Ping timeout: 265 seconds]
Gacha has joined #jruby
sagax has joined #jruby
Gacha has quit [Read error: Connection reset by peer]
sagax has quit [Ping timeout: 268 seconds]