truffle - scg: scgscg.unibe.ch/download/lectures/cc/cc-10-truffle-old.pdf · performance: ruby...

49

Upload: others

Post on 14-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better
Page 2: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

TruffleA language implementation framework

Boris SpasojevićSenior Researcher

VM Research Group, Oracle Labs

Slides based on previous talks given by Christian Wimmer, Christian Humer and Matthias Grimmer.

Page 3: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to provide some insight into a line of research in Oracle Labs. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described in connection with any Oracle product or service remains at the sole discretion of Oracle. Any views expressed in this presentation are my own and do not necessarily reflect the views of Oracle.

3

Page 4: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Program Agenda

Motivation and Background

Truffle + Graal

Polyglot development (demo)

Tools

Conclusion

1

2

3

4

5

Confidential – Oracle Internal/Restricted/Highly Restricted 4

Page 5: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

One Language to Rule Them All?Let’s ask Stack Overflow…

5

Page 6: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

“Write Your Own Language”

6

Prototype a new language

Parser and language work to build syntax tree (AST), AST Interpreter

Write a “real” VM

In C/C++, still using AST interpreter, spend a lot of time implementing runtime system, GC, …

People start using it

Define a bytecode format and write bytecode interpreter

People complain about performance

Write a JIT compiler, improve the garbage collector

Performance is still bad

Prototype a new language in Java

Parser and language work to build syntax tree (AST)Execute using AST interpreter

People start using it

And it is already fastAnd it integrates with other languagesAnd it has tool support, e.g., a debugger

Current situation How it should be

Page 7: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Background: AST Interpreter

1. Source code -> Abstract Syntax Treeeg:

1+2+3+4

7

add

add 4

add 3

1 2

Page 8: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Background: AST Interpreter

2. Implement “execute” for each nodeeg:class AddNode extends Node {

Node left;

Node right;

int execute {

return left.execute()

+ right.execute();

}

}

8

add

add 4

add 3

1 2

Page 9: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Background: AST Interpreter

3. Execute the AST root nodeeg:

Int result = root.execute();

assert(result == 10);

9

add

add 4

add 3

1 2

Page 10: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Background: JIT Compiler

Compile once hot and profiledeg:

while(root.execute() == 10);

eventually:

mov eax, 10

10

add

add 4

add 3

1 2

Page 11: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Lets talk about JavaScript…

11

function negate(a) {return -a

}

> negate(42)-42

> negate(-"42")"-42"

> negate({})NaN

> negate([])0

Page 12: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Overall System Structure

Low-footprint VM, also

suitable for embedding

Common API separates

language implementation,

optimization system,

and tools (debugger)

Language agnostic

dynamic compiler

Interpreter for every

language

Integrate with Java

applications

Substrate VM

Graal

JavaScript Ruby LLVMR

Graal VM

TruffleTools

C C++ Fortran …

12

Page 13: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 13

(a + b) * c

– Abstract syntax tree IS the interpreter

– Every node has an execute method

– Running Java program that interprets JavaScript (or any other language)

Object execute(VirtualFrame frame) {

Object a = left.execute(frame);

Object b = right.execute(frame);

return add(a, b);

}

Object add(Object a, Object b) {

if(a instanceof Integer && b instanceof Integer) {

return (int)a + (int)b;

} else if (a instanceof String && b instanceof String) {

return (String)a + (String)b;

} else {

return genericAdd(a, b);

}

}

Truffle

Page 14: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Speculate and Optimize …

14

U

U U

U

U I

I I

G

G I

I I

G

G

Node Specialization

for Profiling Feedback

AST Interpreter

Specialized Nodes

AST Interpreter

Uninitialized Nodes

Compilation using

Partial Evaluation

Compiled Code

Node Transitions

S

U

I

D

G

Uninitialized Integer

Generic

DoubleString

Page 15: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

I

I I

G

G I

I I

G

G

Transfer back

to AST Interpreter

D

I D

G

G D

I D

G

G

Node Specialization to

Update Profiling Feedback

Recompilation using

Partial Evaluation

… and Transfer to Interpreter and Reoptimize!

15

Page 16: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

The Truffle Idea

16

Collectprofiling feedback

Optimize using partial evaluation assuming stable

profiling feedback

U

U U

U

U I

I I

S

S I

I I

S

S

Deoptimize if profiling feedback is invalid and

reprofile

I S

Page 17: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Stability

17

Page 18: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

More Details on Truffle Approach

18

https://wiki.openjdk.java.net/display/Graal/Publications+and+Presentationshttps://github.com/graalvm/simplelanguageOracle Labs VM Research YouTube channel

Page 19: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Performance Disclaimers

• All Truffle numbers reflect a development snapshot

– Subject to change at any time (hopefully improve)

– You have to know a benchmark to understand why it is slow or fast

• We are not claiming to have complete language implementations– JavaScript: passes 100% of ECMAscript standard tests • Working on full compatibility with V8 for Node.JS

– Ruby: passing 100% of RubySpec language tests• Passing around 90% of the core library tests

– R: prototype, but already complete enough and fast for a few selected workloads• Benchmarks that are not shown – may not run at all, or – may not run fast

19

Page 20: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Performance: GraalVM Summary

20

1.021.2

4.1

4.5

0.85 0.9

0

1

2

3

4

5

Java Scala Ruby R Native JavaScript

Speedup, higher is better

Performance relative to:HotSpot/Server, HotSpot/Server running JRuby, GNU R, LLVM AOT compiled, V8

Graal

Best Specialized Competition

Page 21: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Performance: JavaScript

21

0

0.2

0.4

0.6

0.8

1

1.2

1.4

box2d Deltablue Crypto EarleyBoyer Gameboy NavierStokes Richards Raytrace Splay Geomean

Speedup, higher is better

Performance relative to V8

JavaScript performance: similar to V8

Page 22: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Performance: Ruby Compute-Intensive Kernels

22

0

50

100

150

200

250

300

350

Speedup, higher is better

Performance relative to JRuby running with Java HotSpot server compiler

Huge speedup because Truffle can optimize

through Ruby metaprogramming

Page 23: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Performance: R with Scalar Code

23

0

10

20

30

40

50

60

70

80

90

100

Speedup, higher is better

Performance relative to GNU R with bytecode interpreter

660xHuge speedups on scalar code, GNU R is only

optimized for vector operations

Page 24: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Truffle Core Features

24

• Partial Evaluation (with Explicit Boundaries)

• Speculation with Internal Invalidation (guards)

• Speculation with External Invalidation (assumptions)

Page 25: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Introduction to Partial Evaluation

25

abstract class Node { abstract int execute(int[] args);}

class AddNode extends Node { final Node left, right;

AddNode(Node left, Node right) { this.left = right; this.right = right; } int execute(int args[]) { return left.execute(args) + right.execute(args); }}

class Arg extends Node { final int index; Arg(int i) {this.index = i;} int execute(int[] args) { return args[index]; }}

int interpret(Node node, int[] args) { return node.execute(args);}

// Sample program (arg[0] + arg[1]) + arg[2]

sample = new Add(new Add(new Arg(0), new Arg(1)), new Arg(2));

Page 26: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Introduction to Partial Evaluation

26

int interpret(Node node, int[] args) { return node.execute(args);}

// Sample program (arg[0] + arg[1]) + arg[2]

sample = new Add(new Add(new Arg(0), new Arg(1)), new Arg(2));

int interpretSample(int[] args) { return sample.execute(args);}

partiallyEvaluate(interpret, sample)

Page 27: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Introduction to Partial Evaluation

27

// Sample program (arg[0] + arg[1]) + arg[2]

sample = new Add(new Add(new Arg(0), new Arg(1)), new Arg(2));

int interpretSample(int[] args) { return sample.execute(args);}

int interpretSample(int[] args) { return sample.left.execute(args) + sample.right.execute(args);}

int interpretSample(int[] args) { return args[sample.left.left.index] + args[sample.left.right.index] + args[sample.right.index];

}

int interpretSample(int[] args) { return args[0] + args[1] + args[2];

}

int interpretSample(int[] args) { return sample.left.left.execute(args) + sample.left.right.execute(args) + args[sample.right.index];}

Page 28: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Explicit Boundaries for Partial Evaluation

28

Object parseJSON(Object value) {String s = objectToString(value);return parseJSONString(s);

}

@TruffleBoundaryObject parseJSONString(String value) {

// complex JSON parsing code}

Page 29: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 29

Explicit Boundaries for Partial Evaluation

// no boundary, but partially evaluatedvoid printLn() {

System.out.println()}

=> Partially evaluated version can be significantly slower than Java if not handled with care!

Page 30: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Initiate Partial Evaluation

30

class Function extends RootNode {@Child Node child;

Object execute(VirtualFrame frame) {return child.execute(frame)

}}

public static void main(String[] args) {CallTarget target = Truffle.getRuntime().createCallTarget(new Function());

for (int i = 0; i < 10000; i++) {// after a few calls partially evaluates on a background thread// installs partially evaluated code when readytarget.call();

}}

Page 31: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Speculation with Internal Invalidation

31

class NegateNode extends Node {

@CompilationFinal boolean objectSeen = false;

Object execute(Object v) {if (v instanceof Double) {

return -((double) v);} else {

if (!objectSeen) {transferToInterpreter();objectSeen = true;

}// slow-case handling of all // other typesreturn objectNegate(v);

}}

}

if (v instanceof Double) {return -((double) v);

} else {deoptimize;

}

if (v instanceof Double) {return -((double) v);

} else {return objectNegate(v);

}

Compiler sees: objectSeen = true

Compiler sees: objectSeen = false

Page 32: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Speculation with External Invalidation

32

@CompilationFinal static Assumption addNotDefined = new Assumption();

class AddNode extends Node {

int execute(int left, int right) {if (addNotDefined.isValid()) {

return left + right;}... // complicated code to call user-defined add

}}

static void defineFunction(String name, Function f) {if (name.equals("+")) {

addNotDefined.invalidate();... // register user-defined add

}}

Page 33: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Polyglot Demo.

33

Page 34: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

High-Performance Language Interoperability (1)

34

Page 35: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

High-Performance Language Interoperability (2)

35

Page 36: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

More Details on Language Integration

36

http://dx.doi.org/10.1145/2816707.2816714

Page 37: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Tools

37

Page 38: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Tools: We Don’t Have It All

• Difficult to build– Platform specific

– Violate system abstractions

– Limited access to execution state

• Productivity tradeoffs for programmers– Performance – disabled optimizations

– Functionality – inhibited language features

– Complexity – language implementation requirements

– Inconvenience – nonstandard context (debug flags)

38

(Especially for Debuggers)

Page 39: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Tools: We Can Have It All

• Build tool support into the Truffle API

– High-performance implementation

–Many languages: any Truffle language can be tool-ready with minimal effort

– Reduced implementation effort

• Generalized instrumentation support

1. Access to execution state & events

2. Minimal runtime overhead

3. Reduced implementation effort (for languages and tools)

39

Page 40: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Implementation Effort: Language Implementors• Treat AST syntax nodes specially– Precise source attribution– Enable probing– Ensure stability

• Add default tags, e.g., Statement, Call, ...– Sufficient for many tools– Can be extended, adjusted, or replaced dynamically by other tools

• Implement debugging support methods, e.g.– Eval a string in context of any stack frame – Display language-specific values, method names, …

• More to be added to support new tools & services

40

Page 41: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

“Mark Up” Important AST Nodes for Instrumentation

41

Tag: Statement

Probe: A program location (AST

node) prepared to give tools

access to execution state.

Tag: An annotation for

configuring tool behavior at a

Probe. Multiple tags, possibly

tool-specific, are allowed.

PN

Page 42: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Access to Execution Events

Instr. 1 Instr. 2 Instr. 3

42

Tag: Statement

Instrument: A receiver of

program execution events

installed for the benefit of

an external tool

Tool 1

Tool 2

Tool 3

Event: AST execution flow

entering or returning from

a node.

…PN

Page 43: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Implementation: Nodes

4343

W PN

WrapperNode

• Inserted before any execution

• Intercepts Events

• Language-specific Type

ProbeNode

• Manages “instrument chain” dynamically

• Propagates Events

• Instrumentation Type

Page 44: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

More Details on Instrumentation and Debugging

44

http://dx.doi.org/10.1145/2843915.2843917

Page 45: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Overall System Structure

Low-footprint VM, also

suitable for embedding

Common API separates

language implementation,

optimization system,

and tools (debugger)

Language agnostic

dynamic compiler

Interpreter for every

language

Integrate with Java

applications

Substrate VM

Graal

JavaScript Ruby LLVMR

Graal VM

TruffleTools

C C++ Fortran …

45

Page 46: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Internships at Oracle

46

Page 47: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Confidential – Oracle Internal/Restricted/Highly Restricted 47

Page 48: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | Confidential – Oracle Internal/Restricted/Highly Restricted 48

Page 49: Truffle - SCG: SCGscg.unibe.ch/download/lectures/cc/CC-10-Truffle-OLD.pdf · Performance: Ruby Compute-Intensive Kernels 22 0 50 100 150 200 250 300 350 Speedup, higher is better