rubyconf 2009

123
Rubinius The 4th Year Tuesday, November 24, 2009

Upload: evanphx

Post on 31-Aug-2014

4.006 views

Category:

Technology


3 download

DESCRIPTION

My presentation on Rubinius at RubyConf 2009.

TRANSCRIPT

Page 1: RubyConf 2009

RubiniusThe 4th Year

Tuesday, November 24, 2009

Page 2: RubyConf 2009

RubiniusThe 1st Senior Year

Tuesday, November 24, 2009

Page 3: RubyConf 2009

4th Year

Tuesday, November 24, 2009

Page 4: RubyConf 2009

Year 1

48 commits

Freshman Year

Tuesday, November 24, 2009

Page 5: RubyConf 2009

http://photos.dzki.co.uk/oak_sapling_warming_itself_in_the_morning_sun.jpgTuesday, November 24, 2009

Page 6: RubyConf 2009

A Toy

Year 1

Tuesday, November 24, 2009

Page 7: RubyConf 2009

An Idea

Year 1

Tuesday, November 24, 2009

Page 8: RubyConf 2009

Year 2

2802 commits

Sophomore Year

Tuesday, November 24, 2009

Page 9: RubyConf 2009

Hubris

Year 3

Tuesday, November 24, 2009

Page 10: RubyConf 2009

Hubris

1.0 anyone?

Year 3

Tuesday, November 24, 2009

Page 11: RubyConf 2009

Year 3

6172 commits

Junior Year

Tuesday, November 24, 2009

Page 12: RubyConf 2009

Compliance

Year 3

Tuesday, November 24, 2009

Page 13: RubyConf 2009

Compliance

RubySpec

Year 3

Tuesday, November 24, 2009

Page 14: RubyConf 2009

Redirection

Year 3

Tuesday, November 24, 2009

Page 15: RubyConf 2009

Redirection

C++

Year 3

Tuesday, November 24, 2009

Page 16: RubyConf 2009

Plotting

Year 3

Tuesday, November 24, 2009

Page 17: RubyConf 2009

Year 4

2220 commits

1st Senior Year

Tuesday, November 24, 2009

Page 18: RubyConf 2009

JIT

Year 4

Tuesday, November 24, 2009

Page 19: RubyConf 2009

JIT

LLVM

Year 4

Tuesday, November 24, 2009

Page 20: RubyConf 2009

JIT

Hotspot Detection

Year 4

Tuesday, November 24, 2009

Page 21: RubyConf 2009

JIT

Type Profiling

Year 4

Tuesday, November 24, 2009

Page 22: RubyConf 2009

JIT

Method Inlining

Year 4

Tuesday, November 24, 2009

Page 23: RubyConf 2009

FTW

Block Inlining!

Year 4

Tuesday, November 24, 2009

Page 24: RubyConf 2009

RubySpec

Year 4

Tuesday, November 24, 2009

Page 25: RubyConf 2009

RubySpec

93% Pass Rate

Year 4

Tuesday, November 24, 2009

Page 26: RubyConf 2009

RubySpec

rake, rspec, rails

Year 4

Tuesday, November 24, 2009

Page 27: RubyConf 2009

C Extensions

Year 4

Tuesday, November 24, 2009

Page 28: RubyConf 2009

C Extensions

syck, nokogiri, mysql, yajl-json

Year 4

Tuesday, November 24, 2009

Page 29: RubyConf 2009

Compliance+

Performance

Tuesday, November 24, 2009

Page 30: RubyConf 2009

93+% RubySpec

Compliance

Tuesday, November 24, 2009

Page 31: RubyConf 2009

93+% RubySpec

Passing/untagging more everyday

Compliance

Tuesday, November 24, 2009

Page 32: RubyConf 2009

NotImplementedError

Tuesday, November 24, 2009

Page 33: RubyConf 2009

ObjectSpace

NotImplementedError

Tuesday, November 24, 2009

Page 34: RubyConf 2009

ObjectSpace

_id2ref

NotImplementedError

Tuesday, November 24, 2009

Page 35: RubyConf 2009

ObjectSpace

each_object (limited)

NotImplementedError

Tuesday, November 24, 2009

Page 36: RubyConf 2009

callcc

NotImplementedError

Tuesday, November 24, 2009

Page 37: RubyConf 2009

callcc

Yet.

NotImplementedError

Tuesday, November 24, 2009

Page 38: RubyConf 2009

C-API

Compliance

Tuesday, November 24, 2009

Page 39: RubyConf 2009

C-API

syck, nokogiri, etc.

Compliance

Tuesday, November 24, 2009

Page 40: RubyConf 2009

C-API

A few gotchas...

Compliance

Tuesday, November 24, 2009

Page 41: RubyConf 2009

C ExtensionDo’s and Don’ts

Tuesday, November 24, 2009

Page 42: RubyConf 2009

prefer a function over an R*() macro

Do

Tuesday, November 24, 2009

Page 43: RubyConf 2009

RBASIC(obj)->class

rb_obj_class(obj)

Rubinius

Tuesday, November 24, 2009

Page 44: RubyConf 2009

rb_ivar_[get|set](obj, ...)

1.9 / Rubinius

ROBJECT(obj)->iv_tbl

Tuesday, November 24, 2009

Page 45: RubyConf 2009

use the “re.h” header

1.9 / Rubinius

Don’t

Tuesday, November 24, 2009

Page 46: RubyConf 2009

use the “env.h” header

Don’t

ruby_frameruby_scoperuby_class

ruby_dyna_varsruby_in_eval

1.9 / Rubinius

Tuesday, November 24, 2009

Page 47: RubyConf 2009

Try your gem

Tuesday, November 24, 2009

Page 48: RubyConf 2009

Report your problems!

Tuesday, November 24, 2009

Page 50: RubyConf 2009

Performance

Tuesday, November 24, 2009

Page 51: RubyConf 2009

The Two Fronts

Performance

Tuesday, November 24, 2009

Page 52: RubyConf 2009

Why We Fight

What We Write

Performance

Tuesday, November 24, 2009

Page 53: RubyConf 2009

(0..10).to_a.each do |i|ary << i

end

Tuesday, November 24, 2009

Page 54: RubyConf 2009

0.upto(10) do |i|ary << i

end

Tuesday, November 24, 2009

Page 55: RubyConf 2009

The Two Fronts

How We Run It

Performance

Tuesday, November 24, 2009

Page 56: RubyConf 2009

Benchmarking

Performance

Tuesday, November 24, 2009

Page 57: RubyConf 2009

Benchmarking

Expectations vs. Reality

Performance

Tuesday, November 24, 2009

Page 58: RubyConf 2009

Benchmarking

Lies, Damned Lies, and Statistics

Performance

Tuesday, November 24, 2009

Page 59: RubyConf 2009

Benchmarks

Tuesday, November 24, 2009

Page 60: RubyConf 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

Page 61: RubyConf 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

Page 62: RubyConf 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

Page 63: RubyConf 2009

12x faster!

Benchmarks

Tuesday, November 24, 2009

Page 64: RubyConf 2009

12x faster!

On these benchmarks!

Benchmarks

Tuesday, November 24, 2009

Page 65: RubyConf 2009

12x faster!

In general?

Benchmarks

Tuesday, November 24, 2009

Page 66: RubyConf 2009

What did we benchmark?

Benchmarks

Tuesday, November 24, 2009

Page 67: RubyConf 2009

Calling a method.Empty while loop.Creating a block.Accessing ivars.

Performing ‘not’.Calling a polymorphic method.

Calling super.

Tuesday, November 24, 2009

Page 68: RubyConf 2009

Why these things?

Benchmarks

Tuesday, November 24, 2009

Page 69: RubyConf 2009

Why these things?

How do these results translate?

Benchmarks

Tuesday, November 24, 2009

Page 70: RubyConf 2009

Analogy

Tuesday, November 24, 2009

Page 71: RubyConf 2009

Dishonest?

Tuesday, November 24, 2009

Page 72: RubyConf 2009

Ruby performancebegets

core performance

Rubinius

Tuesday, November 24, 2009

Page 73: RubyConf 2009

Ruby performancebegets

?

1.8

Tuesday, November 24, 2009

Page 74: RubyConf 2009

Need more/better data

Benchmarks

Tuesday, November 24, 2009

Page 75: RubyConf 2009

def foo() ary = [] 100.times { |i| ary << i }end

300,000 times

Tuesday, November 24, 2009

Page 76: RubyConf 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

Page 77: RubyConf 2009

def foo() hsh = {} 100.times { |i| hsh[i] = 0 }end

100,000 times

Tuesday, November 24, 2009

Page 78: RubyConf 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

Page 79: RubyConf 2009

def foo() hsh = { 47 => true } 100.times { |i| hsh[i] }end

100,000 times

Tuesday, November 24, 2009

Page 80: RubyConf 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

Page 81: RubyConf 2009

Conclusion

Benchmarking

Tuesday, November 24, 2009

Page 82: RubyConf 2009

Conclusion

Rubinius is awesome at ruby code

Benchmarking

Tuesday, November 24, 2009

Page 83: RubyConf 2009

Conclusion

Comparing C/Java to Ruby

Benchmarking

Tuesday, November 24, 2009

Page 84: RubyConf 2009

More Ruby

Tuesday, November 24, 2009

Page 85: RubyConf 2009

Burden of our own devising

More Ruby

Tuesday, November 24, 2009

Page 86: RubyConf 2009

Fast compliance

More Ruby

Tuesday, November 24, 2009

Page 87: RubyConf 2009

Slower core performance

More Ruby

Tuesday, November 24, 2009

Page 88: RubyConf 2009

Slower core performance

Ruby vs. C/Java

More Ruby

Tuesday, November 24, 2009

Page 89: RubyConf 2009

The upside...

More Ruby

Tuesday, November 24, 2009

Page 90: RubyConf 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

Page 91: RubyConf 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

Page 92: RubyConf 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

Page 93: RubyConf 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

Page 94: RubyConf 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

Page 95: RubyConf 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

Page 96: RubyConf 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

Page 97: RubyConf 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

Page 98: RubyConf 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

Page 99: RubyConf 2009

Bug

Tuesday, November 24, 2009

Page 100: RubyConf 2009

right?

Bug

Tuesday, November 24, 2009

Page 101: RubyConf 2009

Bug

Tuesday, November 24, 2009

Page 102: RubyConf 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

Page 103: RubyConf 2009

JIT

Method Inlining

Year 4

Tuesday, November 24, 2009

Page 104: RubyConf 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

Page 105: RubyConf 2009

bin/rbx -Xjit.inline.debug 0/bm_vm2_method.rb

Tuesday, November 24, 2009

Page 106: RubyConf 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

Page 107: RubyConf 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

Page 108: RubyConf 2009

def m; nil; enddef Bench.run i=0 while i < 15_000_000 i+=1 endend

Tuesday, November 24, 2009

Page 109: RubyConf 2009

Performance

Tuesday, November 24, 2009

Page 110: RubyConf 2009

Many programs, much faster

Performance

Tuesday, November 24, 2009

Page 111: RubyConf 2009

Many programs, a little slower

Performance

Tuesday, November 24, 2009

Page 112: RubyConf 2009

Some programs, a lot slower

Performance

Tuesday, November 24, 2009

Page 113: RubyConf 2009

Releases

Tuesday, November 24, 2009

Page 114: RubyConf 2009

0.13

Releases

Tuesday, November 24, 2009

Page 115: RubyConf 2009

0.13

JIT by default

Releases

Tuesday, November 24, 2009

Page 116: RubyConf 2009

0.13

Lots of fixes

Releases

Tuesday, November 24, 2009

Page 117: RubyConf 2009

1.0rc1Tuesday, November 24, 2009

Page 118: RubyConf 2009

Next Week!

Tuesday, November 24, 2009

Page 119: RubyConf 2009

Expectations

Tuesday, November 24, 2009

Page 120: RubyConf 2009

Runs rails 3

Expectations

Tuesday, November 24, 2009

Page 121: RubyConf 2009

Performance improvements

Expectations

Tuesday, November 24, 2009

Page 122: RubyConf 2009

One RC every month

Expectations

Tuesday, November 24, 2009

Page 123: RubyConf 2009

One RC every month

Until 1.0 is out.

Expectations

Tuesday, November 24, 2009