SlideShare a Scribd company logo
1 of 81
Download to read offline
RSqueak/VM
Building a fast, malleable VM with students
Hasso-Plattner-Institut Potsdam
Software Architecture Group
Tim Felgentreff, Tobias Pape, Patrick Rein, Robert
Hirschfeld
http://www.hpi.uni-potsdam.de/swa/
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Goals
2
• No C or assembler
– Useful for teaching
• Good performance
– Think about abstractions and how to lower them
• Small codebase
– Easy to introduce new students
• Lots of tests
– Experiments can rely on tests to catch errors
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
A VM WITHOUT LL CODE
3
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Background: the RPython Toolchain
4
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2008: Back to the Future in 1 Week
• Spy VM – a Smalltalk-80 VM in
RPython
• Interpreter-only
• 1 week
• Mostly people with no prior
RPython and little Python
experience
5
VM HLL-Code
Squeak VM 8900
Spy VM 2600
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
•
.
• Fast enough to run
many primitives
from Slang
2013: Tracing Algorithmic Primitives
• Lars Wassermann for his Master’s thesis transforms
Spy VM into RSqueak/VM
• Adds an FFI interface to native Squeak plugins
• Adds JIT annotations
• Supports Closures
6
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 7
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2014: Software Transactional Memory
• 5 students, 3 months
8
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2014: Software Transactional Memory
– Threads see different memory until they commit
– Automatically re-execute conflicts
9
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
• 3 students, 3 months
2014: Tagged vs Boxed Integers
10
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
• 3 students, 3 months
2015: Objects as Methods
11
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2015: Allocation Removal Strategies
• 1 student, 6 months
• adds a generic interface in RPython (and uses it in
RSqueak) to avoid allocations of special objects in
homogeneous objects
12
BitBlt benchmark in C in Smalltalk
Interpreter VM 650ms 389,660ms
1 x C 599 x C
Cog JIT VM 790ms 336,490ms
1 x C 423 x C
R/SqueakVM 880ms 20,310ms
1 x C 23 x C
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Slot 0
Slot 1
Slot 3
Slot 4
Slot 2
SmallInteger
value: 456
SmallInteger
value: 789
...
...
SmallInteger
value: 123
value: 123
value: 456
...
...
value: 789
Collection Collection
<SmallIntegers>
Optimization
Storage Strategies
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Slot 0
Slot 1
Slot 3
Slot 4
Slot 2
...
...
SmallInteger
value: 123
value: 123
value: 456
...
...
value: 789
Collection Collection
<SmallIntegers>
Deoptimizatio
nPoint
x
y
...
...
SmallInteger
value: 456
col at: 3 put: 1@2
Storage Strategies
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Collection
storage
...
...
...
...
read
write
Storage Strategies
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Collection
storage
...
...
...
...
StorageStrategy
read
write
StorageStrategyA
Storage Strategies
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Increment size of OrderedCollection
i215 = int_add_ovf(i213, 1)
p227 = new_with_vtable(ConstClass(W_SmallInteger))
setfield_gc(p227, i215, W_SmallInteger.inst_value)
setarrayitem_gc(p147, 2, p227)
Store new value in Array
i204 = int_add_ovf(i189,
2)
i219 = int_ne(i204,
2147483647)
guard_true(i219)
setarrayitem_gc(p211,
i213, i204)
Store new value in Array
i207 = int_add_ovf(i194, 2)
p231 =
new_with_vtable(ConstClass(W_SmallIntege
r))
setfield_gc(p231, i207,
W_SmallInteger.inst_value)
setarrayitem_gc(p220, i222, p231)
Without
Strategie
s
With
Strategie
s
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Strategy
Transitions
(Big picture)
Scenario:
● Open image
● Use browser
● Close image
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Evaluation: Performance
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
rstrategies: Architecture
AbstractStrategy
SingleValueStrategy
EmptyStrategy
GenericStrategy
SingleTypeStrategy
TaggedStrategy
StrategyFactory
StrategyLogger
LogParser
Logfil
e
jpg
pdf
svg
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
rstrategies: Usage
SingleValueStrategy
AllNilStrategy
SingleValueStrategy
value = nil
SmallIntegerStrategy
SingleTypeStrategy
type = SmallInteger
SingleTypeStrategy
StrategyFactory
RSqueakStrategyFact
ory
create_strategy()...
switch_strategy()...
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
rstrategies: Usage
@rstrat.strategy(generalize=[
SmallIntegerOrNilStrategy,
FloatOrNilStrategy,
ListStrategy])
class AllNilStrategy(AbstractStrategy):
repr_classname = "AllNilStrategy"
import_from_mixin(rstrat.SingleValueStrategy)
def value(self): return self.space.w_nil
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
SIDETRACK
The tracing JIT optimizations from up high
23
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
BitBlt
24
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Algorithm Structure
25
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Type Specialization
26
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Type Specialization
27
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Inlining
28
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Folding
29
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Loops
30
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Loops
31
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Branch Pruning
32
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Branch Pruning
33
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2016: RSqueak + SQLite
• Joint-execution JIT and shared object space for
SQLite and RSqueak
• 5 students, 3 months
• ~25% speed-up
34
JIT
RSqueak
+ SqPyte
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
2016: RSqueak + Topaz Ruby
• Joint-execution JIT and shared object space for
Topaz and RSqueak
• me, 2 days
35
JIT
RSqueak
+ Topaz
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
THE (SMALL-ISH) CODEBASE
36
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Absolute Size of Codebases
37
0
100
200
300
400
500
600
OST-VM RSqueak/VM
x1000
VMs including Translation Toolchains
HLL-Code LL-Code Test-Code
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Code of VMs without Translation bits
38
0
50
100
150
200
250
300
350
400
450
500
OST-VM RSqueak/VM
x1000
VMs without Toolchains
HLL-Code LL-Code Test-Code
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Code of VMs without Translation bits
39
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
OST-VM RSqueak/VM
VMs without Toolchains
HLL-Code LL-Code Test-Code
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Code of VMs without Translation bits
40
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
OST-VM RSqueak/VM
VMs without Toolchains
HLL-Code LL-Code Test-Code
35% Tests =>
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Performance Tests
41
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Performance Tests
42
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
IMPRESSIONS FROM
STUDENTS
43
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
 Taking advantage of the (R)Python standard library is
enjoyable (compared to C-based projects)
 PyPy source documentation very helpful
Feedback
44
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Feedback
45
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Feedback
46
DETAILS ON THE PROJECT SETUP
From a non-technical perspective, a problem we
encountered was the huge roundtrip times (on our
machines up to 600s, 900s with JIT enabled). This led
to a tendency of bigger code changes ("Before we
compile, let's also add this"), lost flow ("What where we
doing before?") and different compiled interpreters in
parallel testing ("How is this version different from the
others?") As a consequence it was harder to test and
correct errors. While this is not as much of a problem for
other RPython VMs, RSqueakVM needs to execute the
entire image, which makes running it untranslated
even slower.
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 47
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 49
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 50
INT TAGGING ALLOCATION REMOVAL
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 51
FLOAT WORDS ALLOCATION REMOVAL
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 52
BITBLT PLUGIN AGGRESSIVE INLINING
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
BitBlt>>benchmark
Rule Depth VM copy 1x1warp 2x2warp 3x3warp
Rule 25 8 C 10 11 37 59
R 455 763 2703 2831
16 C 15 19 42 56
R 736 719 2223 2525
32 C 4 7 26 44
R 624 640 2191 2669
Rule 3 8 C 4 5 23 40
R 70 95 1650 2518
16 C 6 6 27 49
R 115 108 1497 1799
32 C 1 6 22 48
R 18 92 1586 2029
53
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Rule Depth VM copy 1x1warp 2x2warp 3x3warp
Rule 25 8 C 10 11 37 59
R 455 763 2703 2831
16 C 15 19 42 56
R 736 719 2223 2525
32 C 4 7 26 44
R 624 640 2191 2669
Rule 3 8 C 4 5 23 40
R 70 95 1650 2518
16 C 6 6 27 49
R 115 108 1497 1799
32 C 1 6 22 48
R 18 92 1586 2029
54
~ Factor <50
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Rule Depth VM copy 1x1warp 2x2warp 3x3warp
Rule 25 8 C 10 11 37 59
R 455 763 2703 2831
16 C 15 19 42 56
R 736 719 2223 2525
32 C 4 7 26 44
R 624 640 2191 2669
Rule 3 8 C 4 5 23 40
R 70 95 1650 2518
16 C 6 6 27 49
R 115 108 1497 1799
32 C 1 6 22 48
R 18 92 1586 2029
55
~ Factor <50 Factor 100+
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Growing the method dictionary copies
56
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Removing methods creates copies
57
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Points to Consider
• No interrupts in VM-level primitives
• Performance critical code may still have to be
optimized
• GC interaction with user code, but not primitives
• Simulating C semantics impacts results
58
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Array filling
| index repOff |
repOff := repStart - start.
index := start - 1.
[(index := index + 1) <= stop] whileTrue: [
self at: index
put: (replacement at: repOff + index)]
59
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Array filling
| index repOff |
repOff := repStart - start.
index := start - 1.
[(index := index + 1) <= stop] whileTrue: [
self at: index
put: (replacement at: repOff + index)]
Needs bounds checks
– interrupting threads may modify the replacement array
60
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Mandala
self isDefined: 'ENABLE_FAST_BLT'
inSmalltalk: [false
"there is no current fast path
specialisation code in-image"]
ifTrue:[self copyBitsFastPathSpecialised]
ifFalse: [self copyBitsLockedAndClipped].
No Slang code for this – just plain C. Optimization on
Smalltalk level required.
61
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Secure Hash Algorithm
self primHasSecureHashPrimitive
ifTrue: [
^ self
processBufferUsingPrimitives:
aByteArray]
ifFalse: [totals := nil].
"... 26 lines of code using instances of
ThirtyTwoBitRegister"
62
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Secure Hash Algorithm
self primHasSecureHashPrimitive
ifTrue: [
^ self
processBufferUsingPrimitives:
aByteArray]
ifFalse: [totals := nil].
"... 26 lines of code using instances of
ThirtyTwoBitRegister"
OO-Abstraction of words (with high and low parts stored
separately). Instances escape loops and cause GCs
63
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 64
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Rendering Fonts
65
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Rendering Fonts
66
Simulating C pointer arithmetic, casts, …
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 67
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present
Our Takeaway
• Useable Performance
reduces the need for
primitives
• Debugging in practical
applications feasible
• Writing new primitives
in Smalltalk from the
start is an option
68
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 69
(#('VMMaker-Translation to C' 'VMMaker-Building' 'VMMaker-
InterpreterSimulation'
'VMMaker-JITSimulation' 'VMMaker-SpurMemoryManagerSimulation' 'VMMaker-
PostProcessing')
gather: [:cat | (Smalltalk organization listAtCategoryNamed:
cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum
22171
(#('VMMaker-Interpreter' 'VMMaker-JIT' 'VMMaker-Multithreading' 'VMMaker-
Plugins' 'VMMaker-Plugins-FFI' 'VMMaker-SmartSyntaxPlugins'
'VMMaker-SpurMemoryManager' 'VMMaker-Support')
gather: [:cat | (Smalltalk organization listAtCategoryNamed:
cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum
118738
sloccount platforms/
ansic: 263736
cpp: 46791
objc: 13036
asm: 9753
-------------------------
(#('VMMaker-Tests') gather: [:cat | (Smalltalk organization
listAtCategoryNamed: cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum
3837
Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 70
find rpython/ -not -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' ' |
xargs sloccount
python: 345405
ansic: 8090
asm: 213
sloccount rsdl/
python: 822
find rsqueakvm/ -type f -not -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr
'n' ' ' | xargs sloccount
python: 11823
-------------------------
find rpython -type f -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' '
| xargs sloccount
python: 134942
asm: 4956
ansic: 574
sloccount rsdl/test
python: 513
find rsqueakvm/ -type f -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' '
' | xargs sloccount
python: 6786
Software Architecture Group - Anton Gulenko - 23.02.2015
Storage Strategies
• A kind of Allocation Removal Optimization
– Less overhead due to memory management
– Less pressure on garbage collector (less GCs, shorter GCs)
– Smaller memory footprint of application
• Based on heuristics/speculations
– Slow deoptimizations possible
Software Architecture Group - Anton Gulenko - 23.02.2015
Storage Strategies
Slot 0
Slot 1
Slot 3
Slot 4
Slot 2
SmallInteger
value: 456
SmallInteger
value: 789
...
...
SmallInteger
value: 123
value: 123
value: 456
...
...
value: 789
Collection Collection
<SmallIntegers>
Optimization
Software Architecture Group - Anton Gulenko - 23.02.2015
Storage Strategies
Slot 0
Slot 1
Slot 3
Slot 4
Slot 2
...
...
SmallInteger
value: 123
value: 123
value: 456
...
...
value: 789
Collection Collection
<SmallIntegers>
Deoptimizatio
nPoint
x
y
...
...
SmallInteger
value: 456
col at: 3 put: 1@2
Software Architecture Group - Anton Gulenko - 23.02.2015
Storage Strategies
Collection
storage
...
...
...
...
read
write
Software Architecture Group - Anton Gulenko - 23.02.2015
Storage Strategies
Collection
storage
...
...
...
...
StorageStrategy
read
write
StorageStrategyA
Software Architecture Group - Anton Gulenko - 23.02.2015
Increment size of OrderedCollection
i215 = int_add_ovf(i213, 1)
p227 = new_with_vtable(ConstClass(W_SmallInteger))
setfield_gc(p227, i215, W_SmallInteger.inst_value)
setarrayitem_gc(p147, 2, p227)
Store new value in Array
i204 = int_add_ovf(i189,
2)
i219 = int_ne(i204,
2147483647)
guard_true(i219)
setarrayitem_gc(p211,
i213, i204)
Store new value in Array
i207 = int_add_ovf(i194, 2)
p231 =
new_with_vtable(ConstClass(W_SmallIntege
r))
setfield_gc(p231, i207,
W_SmallInteger.inst_value)
setarrayitem_gc(p220, i222, p231)
Without
Strategie
s
With
Strategie
s
Software Architecture Group - Anton Gulenko - 23.02.2015
Strategy
Transitions
(Big picture)
Scenario:
● Open image
● Use browser
● Close image
Software Architecture Group - Anton Gulenko - 23.02.2015
Evaluation: Performance
Software Architecture Group - Anton Gulenko - 23.02.2015
rstrategies: Architecture
AbstractStrategy
SingleValueStrategy
EmptyStrategy
GenericStrategy
SingleTypeStrategy
TaggedStrategy
StrategyFactory
StrategyLogger
LogParser
Logfil
e
jpg
pdf
svg
Software Architecture Group - Anton Gulenko - 23.02.2015
rstrategies: Usage
SingleValueStrategy
AllNilStrategy
SingleValueStrategy
value = nil
SmallIntegerStrategy
SingleTypeStrategy
type = SmallInteger
SingleTypeStrategy
StrategyFactory
RSqueakStrategyFact
ory
create_strategy()...
switch_strategy()...
Software Architecture Group - Anton Gulenko - 23.02.2015
Example: RSqueak VM
@rstrat.strategy(generalize=[
SmallIntegerOrNilStrategy,
FloatOrNilStrategy,
ListStrategy])
class AllNilStrategy(AbstractStrategy):
repr_classname = "AllNilStrategy"
import_from_mixin(rstrat.SingleValueStrategy)
def value(self): return self.space.w_nil

More Related Content

Viewers also liked

OpenPonk (formerly DynaCASE). The open modeling platform
OpenPonk (formerly DynaCASE). The open  modeling platformOpenPonk (formerly DynaCASE). The open  modeling platform
OpenPonk (formerly DynaCASE). The open modeling platformESUG
 
Optimizing Parser Combinators
Optimizing Parser CombinatorsOptimizing Parser Combinators
Optimizing Parser CombinatorsESUG
 
Mocks, Proxies, and Transpilation as Development Strategies for Web Development
Mocks, Proxies, and Transpilation as Development Strategies for Web DevelopmentMocks, Proxies, and Transpilation as Development Strategies for Web Development
Mocks, Proxies, and Transpilation as Development Strategies for Web DevelopmentESUG
 
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...Explicit Composition Constructs in DSLs - The case of the epidemiological lan...
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...ESUG
 
Lub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingLub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingESUG
 
PharoJS
PharoJSPharoJS
PharoJSESUG
 

Viewers also liked (6)

OpenPonk (formerly DynaCASE). The open modeling platform
OpenPonk (formerly DynaCASE). The open  modeling platformOpenPonk (formerly DynaCASE). The open  modeling platform
OpenPonk (formerly DynaCASE). The open modeling platform
 
Optimizing Parser Combinators
Optimizing Parser CombinatorsOptimizing Parser Combinators
Optimizing Parser Combinators
 
Mocks, Proxies, and Transpilation as Development Strategies for Web Development
Mocks, Proxies, and Transpilation as Development Strategies for Web DevelopmentMocks, Proxies, and Transpilation as Development Strategies for Web Development
Mocks, Proxies, and Transpilation as Development Strategies for Web Development
 
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...Explicit Composition Constructs in DSLs - The case of the epidemiological lan...
Explicit Composition Constructs in DSLs - The case of the epidemiological lan...
 
Lub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingLub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented Programming
 
PharoJS
PharoJSPharoJS
PharoJS
 

Similar to How to Build a High-Performance VM for Squeak/Smalltalk in Your Spare Time: An Experience Report of Using the RPython Toolchain

How to lock a Python in a cage? Managing Python environment inside an R project
How to lock a Python in a cage?  Managing Python environment inside an R projectHow to lock a Python in a cage?  Managing Python environment inside an R project
How to lock a Python in a cage? Managing Python environment inside an R projectWLOG Solutions
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1Rubens Dos Santos Filho
 
2014 04-17 Applied SCAP, Red Hat Summit 2014
2014 04-17 Applied SCAP, Red Hat Summit 20142014 04-17 Applied SCAP, Red Hat Summit 2014
2014 04-17 Applied SCAP, Red Hat Summit 2014Shawn Wells
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeIntel® Software
 
OpenStack Ottawa Meetup - October 2018
OpenStack Ottawa Meetup - October 2018OpenStack Ottawa Meetup - October 2018
OpenStack Ottawa Meetup - October 2018Stacy Véronneau
 
Ephemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived SystemsEphemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived SystemsPriyanka Aash
 
Apache Beam (incubating)
Apache Beam (incubating)Apache Beam (incubating)
Apache Beam (incubating)Apache Apex
 
2014-07-31 customer convergence applied scap
2014-07-31 customer convergence applied scap2014-07-31 customer convergence applied scap
2014-07-31 customer convergence applied scapShawn Wells
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationMark Proctor
 
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...Jason Dai
 
OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)Jooho Lee
 
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015AboutYouGmbH
 
PTK 1.0 official presentation
PTK 1.0 official presentationPTK 1.0 official presentation
PTK 1.0 official presentationDFLABS SRL
 
Introduction Apache Kafka
Introduction Apache KafkaIntroduction Apache Kafka
Introduction Apache KafkaJoe Stein
 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia
 
What’s New in ScyllaDB Open Source 5.0
What’s New in ScyllaDB Open Source 5.0What’s New in ScyllaDB Open Source 5.0
What’s New in ScyllaDB Open Source 5.0ScyllaDB
 
The Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open SourceThe Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open SourceDataWorks Summit/Hadoop Summit
 
Leveraging CI/CD to improve open stack operation
Leveraging CI/CD to improve open stack operationLeveraging CI/CD to improve open stack operation
Leveraging CI/CD to improve open stack operationMaría Angélica Bracho
 
CloudStack News, Berlin 16 june 2016
CloudStack News, Berlin 16 june 2016CloudStack News, Berlin 16 june 2016
CloudStack News, Berlin 16 june 2016ShapeBlue
 

Similar to How to Build a High-Performance VM for Squeak/Smalltalk in Your Spare Time: An Experience Report of Using the RPython Toolchain (20)

How to lock a Python in a cage? Managing Python environment inside an R project
How to lock a Python in a cage?  Managing Python environment inside an R projectHow to lock a Python in a cage?  Managing Python environment inside an R project
How to lock a Python in a cage? Managing Python environment inside an R project
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
 
2014 04-17 Applied SCAP, Red Hat Summit 2014
2014 04-17 Applied SCAP, Red Hat Summit 20142014 04-17 Applied SCAP, Red Hat Summit 2014
2014 04-17 Applied SCAP, Red Hat Summit 2014
 
SDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's StampedeSDVIs and In-Situ Visualization on TACC's Stampede
SDVIs and In-Situ Visualization on TACC's Stampede
 
OpenStack Ottawa Meetup - October 2018
OpenStack Ottawa Meetup - October 2018OpenStack Ottawa Meetup - October 2018
OpenStack Ottawa Meetup - October 2018
 
Ephemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived SystemsEphemeral DevOps: Adventures in Managing Short-Lived Systems
Ephemeral DevOps: Adventures in Managing Short-Lived Systems
 
Apache Beam (incubating)
Apache Beam (incubating)Apache Beam (incubating)
Apache Beam (incubating)
 
2014-07-31 customer convergence applied scap
2014-07-31 customer convergence applied scap2014-07-31 customer convergence applied scap
2014-07-31 customer convergence applied scap
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentation
 
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...
Automated ML Workflow for Distributed Big Data Using Analytics Zoo (CVPR2020 ...
 
OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)OpenSCAP Overview(security scanning for docker image and container)
OpenSCAP Overview(security scanning for docker image and container)
 
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015
Rolando Santamaría Masó - Simplicity meets scalability - code.talks 2015
 
PTK 1.0 official presentation
PTK 1.0 official presentationPTK 1.0 official presentation
PTK 1.0 official presentation
 
Introduction Apache Kafka
Introduction Apache KafkaIntroduction Apache Kafka
Introduction Apache Kafka
 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
 
What’s New in ScyllaDB Open Source 5.0
What’s New in ScyllaDB Open Source 5.0What’s New in ScyllaDB Open Source 5.0
What’s New in ScyllaDB Open Source 5.0
 
The Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open SourceThe Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open Source
 
Leveraging CI/CD to improve open stack operation
Leveraging CI/CD to improve open stack operationLeveraging CI/CD to improve open stack operation
Leveraging CI/CD to improve open stack operation
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
 
CloudStack News, Berlin 16 june 2016
CloudStack News, Berlin 16 june 2016CloudStack News, Berlin 16 june 2016
CloudStack News, Berlin 16 june 2016
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Copilot para Microsoft 365 y Power Platform Copilot
Copilot para Microsoft 365 y Power Platform CopilotCopilot para Microsoft 365 y Power Platform Copilot
Copilot para Microsoft 365 y Power Platform CopilotEdgard Alejos
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfkalichargn70th171
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 

Recently uploaded (20)

Copilot para Microsoft 365 y Power Platform Copilot
Copilot para Microsoft 365 y Power Platform CopilotCopilot para Microsoft 365 y Power Platform Copilot
Copilot para Microsoft 365 y Power Platform Copilot
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 

How to Build a High-Performance VM for Squeak/Smalltalk in Your Spare Time: An Experience Report of Using the RPython Toolchain

  • 1. RSqueak/VM Building a fast, malleable VM with students Hasso-Plattner-Institut Potsdam Software Architecture Group Tim Felgentreff, Tobias Pape, Patrick Rein, Robert Hirschfeld http://www.hpi.uni-potsdam.de/swa/
  • 2. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Goals 2 • No C or assembler – Useful for teaching • Good performance – Think about abstractions and how to lower them • Small codebase – Easy to introduce new students • Lots of tests – Experiments can rely on tests to catch errors
  • 3. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present A VM WITHOUT LL CODE 3
  • 4. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Background: the RPython Toolchain 4
  • 5. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2008: Back to the Future in 1 Week • Spy VM – a Smalltalk-80 VM in RPython • Interpreter-only • 1 week • Mostly people with no prior RPython and little Python experience 5 VM HLL-Code Squeak VM 8900 Spy VM 2600
  • 6. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present • . • Fast enough to run many primitives from Slang 2013: Tracing Algorithmic Primitives • Lars Wassermann for his Master’s thesis transforms Spy VM into RSqueak/VM • Adds an FFI interface to native Squeak plugins • Adds JIT annotations • Supports Closures 6
  • 7. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 7
  • 8. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2014: Software Transactional Memory • 5 students, 3 months 8
  • 9. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2014: Software Transactional Memory – Threads see different memory until they commit – Automatically re-execute conflicts 9
  • 10. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present • 3 students, 3 months 2014: Tagged vs Boxed Integers 10
  • 11. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present • 3 students, 3 months 2015: Objects as Methods 11
  • 12. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2015: Allocation Removal Strategies • 1 student, 6 months • adds a generic interface in RPython (and uses it in RSqueak) to avoid allocations of special objects in homogeneous objects 12 BitBlt benchmark in C in Smalltalk Interpreter VM 650ms 389,660ms 1 x C 599 x C Cog JIT VM 790ms 336,490ms 1 x C 423 x C R/SqueakVM 880ms 20,310ms 1 x C 23 x C
  • 13. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Slot 0 Slot 1 Slot 3 Slot 4 Slot 2 SmallInteger value: 456 SmallInteger value: 789 ... ... SmallInteger value: 123 value: 123 value: 456 ... ... value: 789 Collection Collection <SmallIntegers> Optimization Storage Strategies
  • 14. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Slot 0 Slot 1 Slot 3 Slot 4 Slot 2 ... ... SmallInteger value: 123 value: 123 value: 456 ... ... value: 789 Collection Collection <SmallIntegers> Deoptimizatio nPoint x y ... ... SmallInteger value: 456 col at: 3 put: 1@2 Storage Strategies
  • 15. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Collection storage ... ... ... ... read write Storage Strategies
  • 16. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Collection storage ... ... ... ... StorageStrategy read write StorageStrategyA Storage Strategies
  • 17. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Increment size of OrderedCollection i215 = int_add_ovf(i213, 1) p227 = new_with_vtable(ConstClass(W_SmallInteger)) setfield_gc(p227, i215, W_SmallInteger.inst_value) setarrayitem_gc(p147, 2, p227) Store new value in Array i204 = int_add_ovf(i189, 2) i219 = int_ne(i204, 2147483647) guard_true(i219) setarrayitem_gc(p211, i213, i204) Store new value in Array i207 = int_add_ovf(i194, 2) p231 = new_with_vtable(ConstClass(W_SmallIntege r)) setfield_gc(p231, i207, W_SmallInteger.inst_value) setarrayitem_gc(p220, i222, p231) Without Strategie s With Strategie s
  • 18. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Strategy Transitions (Big picture) Scenario: ● Open image ● Use browser ● Close image
  • 19. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Evaluation: Performance
  • 20. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present rstrategies: Architecture AbstractStrategy SingleValueStrategy EmptyStrategy GenericStrategy SingleTypeStrategy TaggedStrategy StrategyFactory StrategyLogger LogParser Logfil e jpg pdf svg
  • 21. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present rstrategies: Usage SingleValueStrategy AllNilStrategy SingleValueStrategy value = nil SmallIntegerStrategy SingleTypeStrategy type = SmallInteger SingleTypeStrategy StrategyFactory RSqueakStrategyFact ory create_strategy()... switch_strategy()...
  • 22. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present rstrategies: Usage @rstrat.strategy(generalize=[ SmallIntegerOrNilStrategy, FloatOrNilStrategy, ListStrategy]) class AllNilStrategy(AbstractStrategy): repr_classname = "AllNilStrategy" import_from_mixin(rstrat.SingleValueStrategy) def value(self): return self.space.w_nil
  • 23. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present SIDETRACK The tracing JIT optimizations from up high 23
  • 24. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present BitBlt 24
  • 25. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Algorithm Structure 25
  • 26. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Type Specialization 26
  • 27. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Type Specialization 27
  • 28. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Inlining 28
  • 29. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Folding 29
  • 30. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Loops 30
  • 31. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Loops 31
  • 32. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Branch Pruning 32
  • 33. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Branch Pruning 33
  • 34. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2016: RSqueak + SQLite • Joint-execution JIT and shared object space for SQLite and RSqueak • 5 students, 3 months • ~25% speed-up 34 JIT RSqueak + SqPyte
  • 35. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 2016: RSqueak + Topaz Ruby • Joint-execution JIT and shared object space for Topaz and RSqueak • me, 2 days 35 JIT RSqueak + Topaz
  • 36. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present THE (SMALL-ISH) CODEBASE 36
  • 37. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Absolute Size of Codebases 37 0 100 200 300 400 500 600 OST-VM RSqueak/VM x1000 VMs including Translation Toolchains HLL-Code LL-Code Test-Code
  • 38. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Code of VMs without Translation bits 38 0 50 100 150 200 250 300 350 400 450 500 OST-VM RSqueak/VM x1000 VMs without Toolchains HLL-Code LL-Code Test-Code
  • 39. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Code of VMs without Translation bits 39 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% OST-VM RSqueak/VM VMs without Toolchains HLL-Code LL-Code Test-Code
  • 40. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Code of VMs without Translation bits 40 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% OST-VM RSqueak/VM VMs without Toolchains HLL-Code LL-Code Test-Code 35% Tests =>
  • 41. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Performance Tests 41
  • 42. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Performance Tests 42
  • 43. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present IMPRESSIONS FROM STUDENTS 43
  • 44. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present  Taking advantage of the (R)Python standard library is enjoyable (compared to C-based projects)  PyPy source documentation very helpful Feedback 44
  • 45. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Feedback 45
  • 46. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Feedback 46 DETAILS ON THE PROJECT SETUP From a non-technical perspective, a problem we encountered was the huge roundtrip times (on our machines up to 600s, 900s with JIT enabled). This led to a tendency of bigger code changes ("Before we compile, let's also add this"), lost flow ("What where we doing before?") and different compiled interpreters in parallel testing ("How is this version different from the others?") As a consequence it was harder to test and correct errors. While this is not as much of a problem for other RPython VMs, RSqueakVM needs to execute the entire image, which makes running it untranslated even slower.
  • 47. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 47
  • 48.
  • 49. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 49
  • 50. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 50 INT TAGGING ALLOCATION REMOVAL
  • 51. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 51 FLOAT WORDS ALLOCATION REMOVAL
  • 52. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 52 BITBLT PLUGIN AGGRESSIVE INLINING
  • 53. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present BitBlt>>benchmark Rule Depth VM copy 1x1warp 2x2warp 3x3warp Rule 25 8 C 10 11 37 59 R 455 763 2703 2831 16 C 15 19 42 56 R 736 719 2223 2525 32 C 4 7 26 44 R 624 640 2191 2669 Rule 3 8 C 4 5 23 40 R 70 95 1650 2518 16 C 6 6 27 49 R 115 108 1497 1799 32 C 1 6 22 48 R 18 92 1586 2029 53
  • 54. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Rule Depth VM copy 1x1warp 2x2warp 3x3warp Rule 25 8 C 10 11 37 59 R 455 763 2703 2831 16 C 15 19 42 56 R 736 719 2223 2525 32 C 4 7 26 44 R 624 640 2191 2669 Rule 3 8 C 4 5 23 40 R 70 95 1650 2518 16 C 6 6 27 49 R 115 108 1497 1799 32 C 1 6 22 48 R 18 92 1586 2029 54 ~ Factor <50
  • 55. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Rule Depth VM copy 1x1warp 2x2warp 3x3warp Rule 25 8 C 10 11 37 59 R 455 763 2703 2831 16 C 15 19 42 56 R 736 719 2223 2525 32 C 4 7 26 44 R 624 640 2191 2669 Rule 3 8 C 4 5 23 40 R 70 95 1650 2518 16 C 6 6 27 49 R 115 108 1497 1799 32 C 1 6 22 48 R 18 92 1586 2029 55 ~ Factor <50 Factor 100+
  • 56. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Growing the method dictionary copies 56
  • 57. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Removing methods creates copies 57
  • 58. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Points to Consider • No interrupts in VM-level primitives • Performance critical code may still have to be optimized • GC interaction with user code, but not primitives • Simulating C semantics impacts results 58
  • 59. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Array filling | index repOff | repOff := repStart - start. index := start - 1. [(index := index + 1) <= stop] whileTrue: [ self at: index put: (replacement at: repOff + index)] 59
  • 60. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Array filling | index repOff | repOff := repStart - start. index := start - 1. [(index := index + 1) <= stop] whileTrue: [ self at: index put: (replacement at: repOff + index)] Needs bounds checks – interrupting threads may modify the replacement array 60
  • 61. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Mandala self isDefined: 'ENABLE_FAST_BLT' inSmalltalk: [false "there is no current fast path specialisation code in-image"] ifTrue:[self copyBitsFastPathSpecialised] ifFalse: [self copyBitsLockedAndClipped]. No Slang code for this – just plain C. Optimization on Smalltalk level required. 61
  • 62. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Secure Hash Algorithm self primHasSecureHashPrimitive ifTrue: [ ^ self processBufferUsingPrimitives: aByteArray] ifFalse: [totals := nil]. "... 26 lines of code using instances of ThirtyTwoBitRegister" 62
  • 63. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Secure Hash Algorithm self primHasSecureHashPrimitive ifTrue: [ ^ self processBufferUsingPrimitives: aByteArray] ifFalse: [totals := nil]. "... 26 lines of code using instances of ThirtyTwoBitRegister" OO-Abstraction of words (with high and low parts stored separately). Instances escape loops and cause GCs 63
  • 64. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 64
  • 65. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Rendering Fonts 65
  • 66. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Rendering Fonts 66 Simulating C pointer arithmetic, casts, …
  • 67. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 67
  • 68. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present Our Takeaway • Useable Performance reduces the need for primitives • Debugging in practical applications feasible • Writing new primitives in Smalltalk from the start is an option 68
  • 69. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 69 (#('VMMaker-Translation to C' 'VMMaker-Building' 'VMMaker- InterpreterSimulation' 'VMMaker-JITSimulation' 'VMMaker-SpurMemoryManagerSimulation' 'VMMaker- PostProcessing') gather: [:cat | (Smalltalk organization listAtCategoryNamed: cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum 22171 (#('VMMaker-Interpreter' 'VMMaker-JIT' 'VMMaker-Multithreading' 'VMMaker- Plugins' 'VMMaker-Plugins-FFI' 'VMMaker-SmartSyntaxPlugins' 'VMMaker-SpurMemoryManager' 'VMMaker-Support') gather: [:cat | (Smalltalk organization listAtCategoryNamed: cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum 118738 sloccount platforms/ ansic: 263736 cpp: 46791 objc: 13036 asm: 9753 ------------------------- (#('VMMaker-Tests') gather: [:cat | (Smalltalk organization listAtCategoryNamed: cat) collect: [:s | (Smalltalk at: s) linesOfCode]]) sum 3837
  • 70. Software Architecture Group (www.hpi.uni-potsdam.de/swa) 2006-present 70 find rpython/ -not -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' ' | xargs sloccount python: 345405 ansic: 8090 asm: 213 sloccount rsdl/ python: 822 find rsqueakvm/ -type f -not -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' ' | xargs sloccount python: 11823 ------------------------- find rpython -type f -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' ' | xargs sloccount python: 134942 asm: 4956 ansic: 574 sloccount rsdl/test python: 513 find rsqueakvm/ -type f -path "*test*" -not -path "*_cache*" -not -name "*.pyc" | tr 'n' ' ' | xargs sloccount python: 6786
  • 71. Software Architecture Group - Anton Gulenko - 23.02.2015 Storage Strategies • A kind of Allocation Removal Optimization – Less overhead due to memory management – Less pressure on garbage collector (less GCs, shorter GCs) – Smaller memory footprint of application • Based on heuristics/speculations – Slow deoptimizations possible
  • 72. Software Architecture Group - Anton Gulenko - 23.02.2015 Storage Strategies Slot 0 Slot 1 Slot 3 Slot 4 Slot 2 SmallInteger value: 456 SmallInteger value: 789 ... ... SmallInteger value: 123 value: 123 value: 456 ... ... value: 789 Collection Collection <SmallIntegers> Optimization
  • 73. Software Architecture Group - Anton Gulenko - 23.02.2015 Storage Strategies Slot 0 Slot 1 Slot 3 Slot 4 Slot 2 ... ... SmallInteger value: 123 value: 123 value: 456 ... ... value: 789 Collection Collection <SmallIntegers> Deoptimizatio nPoint x y ... ... SmallInteger value: 456 col at: 3 put: 1@2
  • 74. Software Architecture Group - Anton Gulenko - 23.02.2015 Storage Strategies Collection storage ... ... ... ... read write
  • 75. Software Architecture Group - Anton Gulenko - 23.02.2015 Storage Strategies Collection storage ... ... ... ... StorageStrategy read write StorageStrategyA
  • 76. Software Architecture Group - Anton Gulenko - 23.02.2015 Increment size of OrderedCollection i215 = int_add_ovf(i213, 1) p227 = new_with_vtable(ConstClass(W_SmallInteger)) setfield_gc(p227, i215, W_SmallInteger.inst_value) setarrayitem_gc(p147, 2, p227) Store new value in Array i204 = int_add_ovf(i189, 2) i219 = int_ne(i204, 2147483647) guard_true(i219) setarrayitem_gc(p211, i213, i204) Store new value in Array i207 = int_add_ovf(i194, 2) p231 = new_with_vtable(ConstClass(W_SmallIntege r)) setfield_gc(p231, i207, W_SmallInteger.inst_value) setarrayitem_gc(p220, i222, p231) Without Strategie s With Strategie s
  • 77. Software Architecture Group - Anton Gulenko - 23.02.2015 Strategy Transitions (Big picture) Scenario: ● Open image ● Use browser ● Close image
  • 78. Software Architecture Group - Anton Gulenko - 23.02.2015 Evaluation: Performance
  • 79. Software Architecture Group - Anton Gulenko - 23.02.2015 rstrategies: Architecture AbstractStrategy SingleValueStrategy EmptyStrategy GenericStrategy SingleTypeStrategy TaggedStrategy StrategyFactory StrategyLogger LogParser Logfil e jpg pdf svg
  • 80. Software Architecture Group - Anton Gulenko - 23.02.2015 rstrategies: Usage SingleValueStrategy AllNilStrategy SingleValueStrategy value = nil SmallIntegerStrategy SingleTypeStrategy type = SmallInteger SingleTypeStrategy StrategyFactory RSqueakStrategyFact ory create_strategy()... switch_strategy()...
  • 81. Software Architecture Group - Anton Gulenko - 23.02.2015 Example: RSqueak VM @rstrat.strategy(generalize=[ SmallIntegerOrNilStrategy, FloatOrNilStrategy, ListStrategy]) class AllNilStrategy(AbstractStrategy): repr_classname = "AllNilStrategy" import_from_mixin(rstrat.SingleValueStrategy) def value(self): return self.space.w_nil