rubyconf 2009

Post on 31-Aug-2014

4.003 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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

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

top related