1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian...
Transcript of 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian...
![Page 1: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/1.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
![Page 2: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/2.jpg)
One VM to Rule Them All
Christian Wimmer, Chris Seaton
VM Research Group, Oracle Labs
![Page 3: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/3.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3
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.
![Page 4: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/4.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4
One Language to Rule Them All?Let’s ask Google…
![Page 5: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/5.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5
One Language to Rule Them All?Let’s ask Stack Overflow…
![Page 6: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/6.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6
“Write Your Own Language”
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 fast
Current situation How it should be
![Page 7: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/7.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7
@Specialization(rewriteOn=ArithmeticException.class)
int add(int l, int r) {return Math.addExact(l, r);
}
@Specializationdouble add(double l, double r) {
return l + r;}
@Specialization(guards = "isString")String doString(Object l, Object r) {
return l.toString() + r.toString();}
Truffle Requirements
L1: decl rax
jz L2
movl rcx, rdx[16+4*rax]
cvtsi2sd xmm1, rcx
addsd xmm0, xmm1
jmp L1
L2:
+
Generality
Ruby, JavaScript,
Python, R, J,
Java, Groovy,
Clojure, Scala ...
function f(a, n) {
var x = 0;
while (n-- > 0) {
x = x + a[n];
}
return x;
}
Simplicity
+
Performance
![Page 8: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/8.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8
System Structure
Low-footprint VM, also
suitable for embedding
Common API between
language implementation
and optimization system
Language agnostic
dynamic compiler
Your language here!
Integrate with Java
applicationsSubstrate VM
TruffleGraal
Ruby
JavaScript Python
R
Graal VM
…
![Page 9: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/9.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9
AST Interpreter
Uninitialized Nodes
Compiled Code
Automatic Partial
Evaluation
Truffle Approach
AST Rewriting
for Type Feedback
AST Interpreter
Rewritten Nodes
Syntax tree nodes are “stable”
Aggressive constant folding, method
inlining, escape analysis
Deoptimize compiled code on tree rewrite
Eliminate dynamic type checks
Eliminate boxing of primitive values
AST Inlining
![Page 10: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/10.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10
More Details on TruffleAccepted for Onward! 2013, October 26-31 2013, Indianapolis, IN
![Page 11: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/11.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11
Ruby Prototype: High Performance
Fastest Ruby
implementation …
… for the few
benchmarks that
we looked at
Substrate VM
TruffleGraal
Ruby
Graal VM
![Page 12: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/12.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12
Ruby Prototype: Low Footprint
Startup time
(“Hello World”)
comparable to MRI
Substrate VM
TruffleGraal
Ruby
Graal VM
![Page 13: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/13.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13
Ruby Prototype: Completeness
RubySpec
A library of executable assertions that
covers the language, core library and
standard library
This is the defacto Ruby spec
Gives us a quantifiable result for how much
of Ruby we implement correctly
Over 45% of
RubySpec
![Page 14: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/14.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14
Completeness
![Page 15: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/15.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15
Completeness: Informally
Charles Nutter: ‘So You Want to Optimize Ruby’ http://blog.headius.com/2012/10/so-you-want-to-optimize-ruby.html
Language Feature Implemented Notes
Fixnum to Bignum promotion ✓
Support for floating point ✓
Closures ✓
Bindings and eval ✓
callcc and Continuation ✓ Very limited support, the same as JRuby
Fibers ✓ Slightly limited support, the same as JRuby
Frame local variables ✓
C extensions
Ruby 1.9 encoding ✓
Garbage collection ✓
Concurrency and parallelism ✓ We currently use a GIL
Tracing and debugging ✓
ObjectSpace ✓
Method invalidation ✓
Constant invalidation ✓
Ruby on Rails
![Page 16: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/16.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16
Completeness: More formally via RubySpecRunning language tests
0.00%
10.00%
20.00%
30.00%
40.00%
50.00%
60.00%
70.00%
80.00%
90.00%
100.00%
Topaz RubyTruffle JRuby
![Page 17: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/17.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17
Low Footprint
![Page 18: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/18.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18
Ahead-of-Time
Compilation
Static Analysis
Substrate VM Execution Model
Substrate VM
Java Application
JDK
Reachable methods,
fields, and classes
Initial Heap
Machine Code
OS
All Java classes from
application, JDK,
and Substrate VM
Application running
without compilation
or class loading
![Page 19: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/19.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19
Startup PerformanceRunning "Hello World"
Execution time:
Memory footprint:
time -f "%e"
time -f "%M"
13
35
3
68
8
14
0
200
400
600
800
MRI JRuby Truffle onJVM
Truffle onSVM
[msec] Execution Time
5
35
53
9
0
10
20
30
40
50
60
MRI JRuby Truffle onJVM
Truffle onSVM
[MByte] Memory Footprint
![Page 20: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/20.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20
High Performance
![Page 21: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/21.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21
Why is Ruby Slow?
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
![Page 22: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/22.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22
Why is Ruby Slow?
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
![Page 23: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/23.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
b sqrt *
... 2 a
![Page 24: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/24.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
b sqrt *
... 2 a
![Page 25: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/25.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
b sqrt *
... 2 a
![Page 26: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/26.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
b sqrt *
... 2 a
![Page 27: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/27.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
b sqrt *
... 2 a
![Page 28: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/28.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
+
- /
bsqrt *
... 2 a
+
- /
b *
... 2 a
sqrt
![Page 29: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/29.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29
Improving Performance Using Truffle
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
execute b
check that b is a Float
check that the negate method in Float has not changed
calculate negation
check the result of that is a Float
execute b
check that b is a Float
check that the power method in Float has not changed
calculate power
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
execute c
check that c is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
check the result of that is a Float
execute a
check that a is a Float
check that the multiply method in Float has not changed
calculate multiplication
check the result of that is a Float
check that the division method in Float has not changed
calculate division
![Page 30: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/30.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
![Page 31: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/31.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
class Float
⚑ modified?
module Math
⚑ modified?
![Page 32: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/32.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
class Float
⚑ modified?
module Math
⚑ modified?
![Page 33: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/33.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
class Float
⚑ modified?
module Math
⚑ modified?
java object InstalledCode
.invalidate()
![Page 34: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/34.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
class Float
⚑ modified?
module Math
⚑ modified?
java object InstalledCode
.invalidate()
![Page 35: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/35.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35
Improving Performance Using Graal
unmodified = new Assumption();
unmodified.check();
unmodified.invalidate();
![Page 36: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/36.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36
Improving Performance Using Graal
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
calculate negation
execute b
calculate power
execute a
calculate multiplication
execute c
calculate multiplication
calculate sqrt
execute a
calculate multiplication
calculate division
execute b
check that the negate method in Float has not changed
calculate negation
execute b
check that the power method in Float has not changed
calculate power
execute a
check that the multiply method in Float has not changed
calculate multiplication
execute c
check that the multiply method in Float has not changed
calculate multiplication
check that Math has not changed
check that the sqrt method in Math has not changed
calculate sqrt
execute a
check that the multiply method in Float has not changed
calculate multiplication
check that the division method in Float has not changed
calculate division
![Page 37: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/37.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37
Improving Performance
-b + (Math.sqrt(b**2 - 4*a*c)) / 2*a
execute b
calculate negation
execute b
calculate power
execute a
calculate multiplication
execute c
calculate multiplication
calculate sqrt
execute a
calculate multiplication
calculate division
![Page 38: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/38.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38
Peak Performance
![Page 39: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/39.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39
Peak Performance
![Page 40: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/40.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40
Simplicity
One intern working for five months on the Ruby implementation
New to Truffle, Graal and Ruby
Written using Eclipse
Debugged as a normal Java program using the server compiler
Run using Graal for testing and performance numbers
No mention in the implementation of bytecode, classloaders, assembly,
system calls, OSR
One very minor use of Unsafe, one very minor use of reflection
![Page 41: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/41.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41
Oracle Labs
Laurent Daynès
Michael Haupt
Peter Kessler
Christos Kotselidis
David Leibs
Roland Schatz
Chris Seaton
Doug Simon
Michael Van De Vanter
Christian Wimmer
Christian Wirth
Mario Wolczko
Thomas Würthinger
Laura Hill (Manager)
JKU Linz
Gilles Duboscq
Matthias Grimmer
Christian Häubl
Josef Haider
Christian Humer
Christian Huber
Manuel Rigger
Lukas Stadler
Bernhard Urban
Andreas Wöß
Prof. Hanspeter Mössenböck
Acknowledgments
Oracle Labs Interns
Danilo Ansaloni
Daniele Bonetta
Shams Imam
Stephen Kell
Helena Kotthaus
Gregor Richards
Rifat Shariyar
Codrut Stancu
Wei Zhang
Purdue University
Tomas Kalibera
Floreal Morandat
Petr Maj
Prof. Jan Vitek
University of California, Irvine
University of Dortmund
![Page 42: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/42.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42
![Page 43: 1 Copyright © 2013, Oracle and/or its affiliates. All ... · One VM to Rule Them All Christian Wimmer, Chris Seaton VM Research Group, Oracle Labs](https://reader035.fdocuments.in/reader035/viewer/2022070710/5ec5611290b87c213c1a169b/html5/thumbnails/43.jpg)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43