Galois, Inc 2010

92
The Rubinius Virtual Machine Brian Ford brixen @ {twitter IRC gmail} presented at Galois, Inc 30 Nov 10

Transcript of Galois, Inc 2010

Page 1: Galois, Inc 2010

The Rubinius Virtual Machine

Brian Fordbrixen @ {twitter IRC gmail}

presented at Galois, Inc 30 Nov 10

Page 2: Galois, Inc 2010
Page 3: Galois, Inc 2010

Rubinius runs Ruby

Page 4: Galois, Inc 2010

Methods

Page 5: Galois, Inc 2010

Methods

Page 6: Galois, Inc 2010

Methods

Page 7: Galois, Inc 2010

Blocks

Page 8: Galois, Inc 2010

Blocks

Page 9: Galois, Inc 2010

Scopes

Page 10: Galois, Inc 2010

Classes

Page 11: Galois, Inc 2010

Classes

Page 12: Galois, Inc 2010

Modules

Page 13: Galois, Inc 2010

Modules

Page 14: Galois, Inc 2010

Modules

Page 15: Galois, Inc 2010

Singleton Classes

Page 16: Galois, Inc 2010

Singleton Classes

Page 17: Galois, Inc 2010

Expressions

Page 18: Galois, Inc 2010

Rubinius History

Page 19: Galois, Inc 2010
Page 20: Galois, Inc 2010

Sydneythread-safe MRI

prototype Bprototype S

Page 21: Galois, Inc 2010

~4 yearsearly Git user

open commit policy

Page 22: Galois, Inc 2010

virtual machinesgarbage collectorsbytecode compilersRuby core libraryprimitives systemsJIT compilersof RubySpecs

21.75

3122

tons

Page 23: Galois, Inc 2010

Virtual Machine

Page 24: Galois, Inc 2010

bootstrapping

Page 25: Galois, Inc 2010

VM | OM

Page 26: Galois, Inc 2010

object memoryontologymethods

Page 27: Galois, Inc 2010

vm/ontology.cpp

vm/environment.cpp

vm/builtin/

Page 28: Galois, Inc 2010

VM | OM

alpha.rb

Page 29: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

Page 30: Galois, Inc 2010

kernel/bootstrap/array.rb

Page 31: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

platform/

Page 32: Galois, Inc 2010

kernel/platform/posix.rb

Page 33: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

platform/

common/

Page 34: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

platform/

common/

delta/

Page 35: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

platform/

common/

delta/

loader.rb

Page 36: Galois, Inc 2010

set pathsprocess optionsrun application

Page 37: Galois, Inc 2010

VM | OM

alpha.rb

bootstrap/

platform/

common/

delta/

loader.rb

Ruby

C++

Page 38: Galois, Inc 2010

interpreters

Page 39: Galois, Inc 2010

vm/instructions.def

Page 40: Galois, Inc 2010

vm/instructions.def

Page 41: Galois, Inc 2010

vm/instructions.def

Page 42: Galois, Inc 2010

vm/instructions.def

Page 43: Galois, Inc 2010

vm/instructions.def

Page 44: Galois, Inc 2010

vm/instructions.def

Page 45: Galois, Inc 2010

vm/instructions.def

Page 46: Galois, Inc 2010

String

Bytecode Compiler

File

AST SymbolicBytecode

CompiledMethod

CompiledFile

Page 47: Galois, Inc 2010

lib/compiler/compiler.rb

Page 48: Galois, Inc 2010

lib/compiler/ast/operators.rb

Page 49: Galois, Inc 2010

spec/compiler/and_spec.rb

Page 50: Galois, Inc 2010

field access

Page 51: Galois, Inc 2010

kernel/bootstrap/array.rb

Page 52: Galois, Inc 2010

vm/builtin/array.hpp

Page 53: Galois, Inc 2010

primitives

Page 54: Galois, Inc 2010

kernel/bootstrap/array.rb

Page 55: Galois, Inc 2010

vm/builtin/array.hpp

Page 56: Galois, Inc 2010

vm/gen/primitives_glue.gen.hpp

Page 57: Galois, Inc 2010

Garbage Collector

Page 58: Galois, Inc 2010

Large Object Space

Nursery

Young

Semi-Space

Mature

Immix

Generational

Page 59: Galois, Inc 2010

Nursery

slab 1 slab 2

Page 60: Galois, Inc 2010

auto-tunedlifetime

Page 61: Galois, Inc 2010

Immix:A Mark-Region Garbage Collector

with Space Efficiency, Fast Collection, and Mutator

Performance

Blackburn, S. & McKinley, K.(PLDI 2008)

Page 62: Galois, Inc 2010

C-API

Page 63: Galois, Inc 2010

MRI native APIlegacy codepoor quality

Page 64: Galois, Inc 2010

Inflated Headers

Flags

field 1

...

Page 65: Galois, Inc 2010

Inflated Headers

TaggedPointer

field 1

...

Flags

handle

Page 66: Galois, Inc 2010

JIT

Page 67: Galois, Inc 2010

bytecode to LLVM IR

Page 68: Galois, Inc 2010

programthreads

JITthreads

Page 69: Galois, Inc 2010

vm/llvm/jit_visit.hpp

Page 70: Galois, Inc 2010

uncommon_interpreter

Page 71: Galois, Inc 2010

pure functions

Page 72: Galois, Inc 2010

Custom Passesguard elimination

Page 73: Galois, Inc 2010

rbx -Xjit.dump_code=NLLVM IR = 1

optimized IR = 2machine code = 4

Page 74: Galois, Inc 2010

exceptions

Page 75: Galois, Inc 2010

RubySpec

Page 76: Galois, Inc 2010

array/index_spec.rb

Page 77: Galois, Inc 2010

array/index_spec.rb

Page 78: Galois, Inc 2010

integer/even_spec.rb

Page 79: Galois, Inc 2010

file/open_spec.rb

Page 80: Galois, Inc 2010

3521 files,15769 examples,

43797 expectations,0 failures, 0 errors

Page 81: Galois, Inc 2010

Future Rubinius

Page 82: Galois, Inc 2010

full concurrency(hydra branch)

Page 83: Galois, Inc 2010

method store(image?)

lazy loading

Page 84: Galois, Inc 2010

build system

Page 85: Galois, Inc 2010

modularityswap core library

Page 86: Galois, Inc 2010

LLVM metadatatype propagation

Page 87: Galois, Inc 2010

LLVM metadatatype propagation

Page 88: Galois, Inc 2010

runtime compilationwith clang

(Windows, C-ext)

Page 89: Galois, Inc 2010

StrongRuby ?

Page 90: Galois, Inc 2010

Androidmobile

Page 91: Galois, Inc 2010

Web rubini.us

Github github.com/evanphx/rubinius

IRC #rubinius

Page 92: Galois, Inc 2010

Thank you