rubyconf 2009
DESCRIPTION
My presentation on Rubinius at RubyConf 2009.TRANSCRIPT
RubiniusThe 4th Year
Tuesday, November 24, 2009
RubiniusThe 1st Senior Year
Tuesday, November 24, 2009
4th Year
Tuesday, November 24, 2009
Year 1
48 commits
Freshman Year
Tuesday, November 24, 2009
http://photos.dzki.co.uk/oak_sapling_warming_itself_in_the_morning_sun.jpgTuesday, November 24, 2009
A Toy
Year 1
Tuesday, November 24, 2009
An Idea
Year 1
Tuesday, November 24, 2009
Year 2
2802 commits
Sophomore Year
Tuesday, November 24, 2009
Hubris
Year 3
Tuesday, November 24, 2009
Hubris
1.0 anyone?
Year 3
Tuesday, November 24, 2009
Year 3
6172 commits
Junior Year
Tuesday, November 24, 2009
Compliance
Year 3
Tuesday, November 24, 2009
Compliance
RubySpec
Year 3
Tuesday, November 24, 2009
Redirection
Year 3
Tuesday, November 24, 2009
Redirection
C++
Year 3
Tuesday, November 24, 2009
Plotting
Year 3
Tuesday, November 24, 2009
Year 4
2220 commits
1st Senior Year
Tuesday, November 24, 2009
JIT
Year 4
Tuesday, November 24, 2009
JIT
LLVM
Year 4
Tuesday, November 24, 2009
JIT
Hotspot Detection
Year 4
Tuesday, November 24, 2009
JIT
Type Profiling
Year 4
Tuesday, November 24, 2009
JIT
Method Inlining
Year 4
Tuesday, November 24, 2009
FTW
Block Inlining!
Year 4
Tuesday, November 24, 2009
RubySpec
Year 4
Tuesday, November 24, 2009
RubySpec
93% Pass Rate
Year 4
Tuesday, November 24, 2009
RubySpec
rake, rspec, rails
Year 4
Tuesday, November 24, 2009
C Extensions
Year 4
Tuesday, November 24, 2009
C Extensions
syck, nokogiri, mysql, yajl-json
Year 4
Tuesday, November 24, 2009
Compliance+
Performance
Tuesday, November 24, 2009
93+% RubySpec
Compliance
Tuesday, November 24, 2009
93+% RubySpec
Passing/untagging more everyday
Compliance
Tuesday, November 24, 2009
NotImplementedError
Tuesday, November 24, 2009
ObjectSpace
NotImplementedError
Tuesday, November 24, 2009
ObjectSpace
_id2ref
NotImplementedError
Tuesday, November 24, 2009
ObjectSpace
each_object (limited)
NotImplementedError
Tuesday, November 24, 2009
callcc
NotImplementedError
Tuesday, November 24, 2009
callcc
Yet.
NotImplementedError
Tuesday, November 24, 2009
C-API
Compliance
Tuesday, November 24, 2009
C-API
syck, nokogiri, etc.
Compliance
Tuesday, November 24, 2009
C-API
A few gotchas...
Compliance
Tuesday, November 24, 2009
C ExtensionDo’s and Don’ts
Tuesday, November 24, 2009
prefer a function over an R*() macro
Do
Tuesday, November 24, 2009
RBASIC(obj)->class
rb_obj_class(obj)
Rubinius
Tuesday, November 24, 2009
rb_ivar_[get|set](obj, ...)
1.9 / Rubinius
ROBJECT(obj)->iv_tbl
Tuesday, November 24, 2009
use the “re.h” header
1.9 / Rubinius
Don’t
Tuesday, November 24, 2009
use the “env.h” header
Don’t
ruby_frameruby_scoperuby_class
ruby_dyna_varsruby_in_eval
1.9 / Rubinius
Tuesday, November 24, 2009
Try your gem
Tuesday, November 24, 2009
Report your problems!
Tuesday, November 24, 2009
http://github.com/evanphx/rubinius/
issues
Tuesday, November 24, 2009
Performance
Tuesday, November 24, 2009
The Two Fronts
Performance
Tuesday, November 24, 2009
Why We Fight
What We Write
Performance
Tuesday, November 24, 2009
(0..10).to_a.each do |i|ary << i
end
Tuesday, November 24, 2009
0.upto(10) do |i|ary << i
end
Tuesday, November 24, 2009
The Two Fronts
How We Run It
Performance
Tuesday, November 24, 2009
Benchmarking
Performance
Tuesday, November 24, 2009
Benchmarking
Expectations vs. Reality
Performance
Tuesday, November 24, 2009
Benchmarking
Lies, Damned Lies, and Statistics
Performance
Tuesday, November 24, 2009
Benchmarks
Tuesday, November 24, 2009
0
14
29
43
57
71
86
100
114
ruby 1.9 jruby macruby rubinius
Times faster than 1.8
Tuesday, November 24, 2009
0
7
14
21
29
36
43
50
57
ruby 1.9 jruby macruby rubinius
Times faster than 1.8
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
309304 51113 113824 70580 24232
1.0 6.0 2.7 4.3 12.7
Tuesday, November 24, 2009
12x faster!
Benchmarks
Tuesday, November 24, 2009
12x faster!
On these benchmarks!
Benchmarks
Tuesday, November 24, 2009
12x faster!
In general?
Benchmarks
Tuesday, November 24, 2009
What did we benchmark?
Benchmarks
Tuesday, November 24, 2009
Calling a method.Empty while loop.Creating a block.Accessing ivars.
Performing ‘not’.Calling a polymorphic method.
Calling super.
Tuesday, November 24, 2009
Why these things?
Benchmarks
Tuesday, November 24, 2009
Why these things?
How do these results translate?
Benchmarks
Tuesday, November 24, 2009
Analogy
Tuesday, November 24, 2009
Dishonest?
Tuesday, November 24, 2009
Ruby performancebegets
core performance
Rubinius
Tuesday, November 24, 2009
Ruby performancebegets
?
1.8
Tuesday, November 24, 2009
Need more/better data
Benchmarks
Tuesday, November 24, 2009
def foo() ary = [] 100.times { |i| ary << i }end
300,000 times
Tuesday, November 24, 2009
0
2
4
6
8
1.8 1.9 macruby jruby rbx
3.26
2.60
4.243.91
7.82
Seconds
Tuesday, November 24, 2009
def foo() hsh = {} 100.times { |i| hsh[i] = 0 }end
100,000 times
Tuesday, November 24, 2009
0
2.75
5.5
8.25
11
1.8 1.9 macruby jruby rbx
10.5
1.67
7.62
4.74.77
Seconds
Tuesday, November 24, 2009
def foo() hsh = { 47 => true } 100.times { |i| hsh[i] }end
100,000 times
Tuesday, November 24, 2009
0
1
2
3
4
1.8 1.9 macruby jruby rbx
2.6
1.75
2.61
2.12
3.64
Seconds
Tuesday, November 24, 2009
Conclusion
Benchmarking
Tuesday, November 24, 2009
Conclusion
Rubinius is awesome at ruby code
Benchmarking
Tuesday, November 24, 2009
Conclusion
Comparing C/Java to Ruby
Benchmarking
Tuesday, November 24, 2009
More Ruby
Tuesday, November 24, 2009
Burden of our own devising
More Ruby
Tuesday, November 24, 2009
Fast compliance
More Ruby
Tuesday, November 24, 2009
Slower core performance
More Ruby
Tuesday, November 24, 2009
Slower core performance
Ruby vs. C/Java
More Ruby
Tuesday, November 24, 2009
The upside...
More Ruby
Tuesday, November 24, 2009
0
14
29
43
57
71
86
100
114
ruby 1.9 jruby macruby rubinius
Times faster than 1.8
Tuesday, November 24, 2009
0
14
29
43
57
71
86
100
114
ruby 1.9 jruby macruby rubinius
Times faster than 1.8
Tuesday, November 24, 2009
def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1 m; m; m; m; m; m; m; m endend
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5 114.8
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5 114.8
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5 114.8
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5114.8
Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5114.8Tuesday, November 24, 2009
impl
ms
x faster
1.8 1.9 jruby macruby rbx
21361 6316 10101 3295 186
1.0 3.4 2.1 6.5114.8Tuesday, November 24, 2009
Bug
Tuesday, November 24, 2009
right?
Bug
Tuesday, November 24, 2009
Bug
Tuesday, November 24, 2009
def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1 m; m; m; m; m; m; m; m endend
Tuesday, November 24, 2009
JIT
Method Inlining
Year 4
Tuesday, November 24, 2009
def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1 m; m; m; m; m; m; m; m endend
Tuesday, November 24, 2009
bin/rbx -Xjit.inline.debug 0/bm_vm2_method.rb
Tuesday, November 24, 2009
JIT: compiling Object#runinlining: primitive fixnum_lt into run.inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)inlining: Object#m into run (<metaclass>)
Tuesday, November 24, 2009
def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1nil;nil;nil;nil;nil;nil;nil;nil endend
Tuesday, November 24, 2009
def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1 endend
Tuesday, November 24, 2009
Performance
Tuesday, November 24, 2009
Many programs, much faster
Performance
Tuesday, November 24, 2009
Many programs, a little slower
Performance
Tuesday, November 24, 2009
Some programs, a lot slower
Performance
Tuesday, November 24, 2009
Releases
Tuesday, November 24, 2009
0.13
Releases
Tuesday, November 24, 2009
0.13
JIT by default
Releases
Tuesday, November 24, 2009
0.13
Lots of fixes
Releases
Tuesday, November 24, 2009
1.0rc1Tuesday, November 24, 2009
Next Week!
Tuesday, November 24, 2009
Expectations
Tuesday, November 24, 2009
Runs rails 3
Expectations
Tuesday, November 24, 2009
Performance improvements
Expectations
Tuesday, November 24, 2009
One RC every month
Expectations
Tuesday, November 24, 2009
One RC every month
Until 1.0 is out.
Expectations
Tuesday, November 24, 2009