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

RubyConf 2009

Aug 31, 2014

Download

Technology

evanphx

My presentation on Rubinius at RubyConf 2009.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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