Coro patch

Lukas Stadler lukas.stadler at jku.at
Wed Nov 30 02:17:26 PST 2011


On 2011-11-30 08:49, Charles Oliver Nutter wrote:
> Seconds after I email...A DISCOVERY...
>
> It seems like invokedynamic is causing headaches for coro. Here's the
> numbers with coro fibers and JRuby's invokedynamic support turned
> *off*:
>
> 100 fibers / 1000 passes:   0.076000   0.000000   0.076000 (  0.077000)
> 100 fibers / 1000 passes:   0.076000   0.000000   0.076000 (  0.076000)
> 100 fibers / 1000 passes:   0.105000   0.000000   0.105000 (  0.105000)
> 100 fibers / 1000 passes:   0.070000   0.000000   0.070000 (  0.070000)
>
> Perhaps the fix you (Lukas) made to get coro + indy working together
> has impacted performance?
Hm, maybe... the fix was really just a tiny tiny bugfix, so that 
shouldn't have caused any performance regressions, although, of course, 
I can't say for sure.
But maybe something in invokedynamic has changed so that it's impacted 
by coro? I can reproduce it and I'll have to look into this.
Has your usage of invokedynamic changed a lot since the last "perfect" 
performance numbers with invokedynamic?

- Lukas

> Awesome, awesome, awesome to see the above perf numbers...regardless!
>
> - Charlie
>
> On Wed, Nov 30, 2011 at 1:46 AM, Charles Oliver Nutter
> <headius at headius.com>  wrote:
>> Ok, good news and not as good news!
>>
>> The good news is that coro seems to be working in the latest
>> openjdk-osx-build, and it definitely improves JRuby's coroutine
>> performance!
>>
>> For running bench_fiber_ring with 100 fibers passing 1000 messages,
>> here's numbers for the threaded impl:
>>
>> 100 fibers / 1000 passes:   1.070000   0.000000   1.070000 (  1.071000)
>> 100 fibers / 1000 passes:   1.070000   0.000000   1.070000 (  1.070000)
>> 100 fibers / 1000 passes:   1.092000   0.000000   1.092000 (  1.092000)
>> 100 fibers / 1000 passes:   1.077000   0.000000   1.077000 (  1.077000)
>>
>> And with the coro impl:
>>
>> 100 fibers / 1000 passes:   0.215000   0.000000   0.215000 (  0.215000)
>> 100 fibers / 1000 passes:   0.217000   0.000000   0.217000 (  0.217000)
>> 100 fibers / 1000 passes:   0.212000   0.000000   0.212000 (  0.212000)
>> 100 fibers / 1000 passes:   0.216000   0.000000   0.216000 (  0.215000)
>>
>> Hooray!
>>
>> Now for the not-as-good news...
>>
>> Here's Ruby 1.9.3 on the same benchmark:
>>
>> 100 fibers / 1000 passes:   0.160000   0.000000   0.160000 (  0.155562)
>> 100 fibers / 1000 passes:   0.150000   0.000000   0.150000 (  0.156581)
>> 100 fibers / 1000 passes:   0.160000   0.000000   0.160000 (  0.155351)
>> 100 fibers / 1000 passes:   0.150000   0.000000   0.150000 (  0.156776)
>>
>> Now even getting close to 1.9.3 is really awesome, but I'm wondering
>> if either I'm doing something wrong (maybe broke something in the
>> coro-based fiber impl?) or if something regressed in coro, because
>> Lukas's blog post showed JRuby + coro performing significantly
>> *better* than C Ruby.
>>
>> This is also a bit tricky to profile...since call stacks are jumping
>> around a bit :) A dumb sampled profile doesn't show much other than
>> Ruby code being hit heavily...which I'd expect.
>>
>> Lukas: Are you able to reproduce these numbers with JRuby master and
>> bench/bench_fiber_ring.rb? Here's the command line I'm using:
>>
>> jruby --1.9 -Xfiber.coroutines=true bench/bench_fiber_ring.rb 20 100 1000
>>
>> - Charlie
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list