On Wed, Dec 2, 2009 at 2:44 AM, Charles Oliver Nutter <[email protected]> wrote: > One of the ideas we have had to improve startup perf is to lazily load > all the generated invoker classes, rather than eagerly loading them > whether you're going to call those methods or not. I've just done a > spike of this, and while it helps a bit it doesn't improve things a > whole lot. > > Here's the count of classes loaded for "puts 1" along with timings for > startup on master: > > ~/projects/jruby ➔ jruby -J-verbose:class -e "puts 1" | wc > 2661 11583 268681 > > ~/projects/jruby ➔ time jruby -e "puts 1" > 1 > > real 0m0.584s > user 0m0.452s > sys 0m0.092s > > Here's with my patch that makes all invokers be lazily constructed. > You can see that we load far fewer classes (almost 1000 fewer) but the > raw startup perf improves only by about 8-10%: > > ~/projects/jruby ➔ jruby -J-verbose:class -e "puts 1" | wc > 1732 7867 162740 > > ~/projects/jruby ➔ time jruby -e "puts 1" > 1 > > real 0m0.532s > user 0m0.398s > sys 0m0.079s > > This also appears to have only a small impact on RubyGems startup > (about the same amount of time trimmed off as for "puts 1"), which is > the real perf killer for most applications: > > BEFORE: > ~/projects/jruby ➔ time jruby -rubygems -e "puts 1" > 1 > > real 0m2.442s > user 0m2.159s > sys 0m0.192s > > AFTER: > ~/projects/jruby ➔ time jruby -rubygems -e "puts 1" > 1 > > real 0m2.395s > user 0m2.094s > sys 0m0.182s > > I've attached the patch if anyone else wants to poke around on it. For > now, it doesn't appear to solve startup issues *enough* to be worth > it, but I'm willing to entertain suggestions. > > Oh, and Tom: I quickly figured out that in the initial boot we are > *not* calling invalidateDescendants, so those calls you saw in the > profile are entirely from post-init class construction.
Wow...for some code which only loads benchmark.rb and fileutils.rb that is one hell of a lot of invalidation. I guess for long term runs it means little because performance levels out since invalidation stops after a lwhile. That while in the profiler for bench_load was 0.5s! I may have to load Rails and see how much invalidation is occurring. -Tom -- blog: http://blog.enebo.com twitter: tom_enebo mail: [email protected] --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email
