• Stars
    star
    237
  • Rank 168,970 (Top 4 %)
  • Language
    C
  • Created almost 14 years ago
  • Updated over 11 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

RoarVM is a manycore Smalltalk Virtual Machine

RoarVM - The Manycore SqueakVM

https://github.com/smarr/RoarVM/raw/1591bb4e1c282f418231da77cf6d09ec31e2abe8/misc/RoarVM-logo-full.jpg

RoarVM, formerly known as the Renaissance Virtual Machine (RVM) is developed as part of a IBM Research project to investigate programming paradigms and languages for manycore systems of the future. Specifically, this VM is meant to support manycore systems with more than 1000 cores in the future.

The RVM was open sourced by IBM Research under the Eclipse Public License. Please see the open source announcement for further information.

Today, the RoarVM supports the parallel execution of Smalltalk programs on x86 compatible multicore systems and Tilera TILE64-based manycore systems. It is tested with standard Squeak 4.1 closure-enabled images, and with a stripped down version of a MVC-based Squeak 3.9 image.

The RoarVM provides parallel execution of Smalltalk processes and thus, the programming model is a typical shared-memory model similar to Java with its threads and classical Pthreads for C/C++.

Install and Use

Please see the INSTALL.rst file.

Features

The RoarVM is compatible with Squeak and its forks. However, the Smalltalk images needs a number of changes to enable it to utilize more than one core and to interact with the VM correctly.

  • compatible with Squeak 4.1 and Pharo 1.2
    • the RoarVM has full closure support
  • Smalltalk processes are executed in parallel
  • tested with 8 cores, 16 hyperthreads on Intel systems
  • tested with 56 cores on Tilera TILE64/TILEPro64 processors
  • tested with Linux and Mac OS X 10.6

Purpose

The source code of the RoarVM has been released as open source to enable the Smalltalk community to evaluate the ideas and possibly integrate them into their existing systems. The RoarVM provides the necessary functionality to experiment with Smalltalk systems on multi- and manycore machines, which we would like to encourage.

However, we also welcome all contributions to the RoarVM itself. Either to bring it up to the speed of the existing VMs or to extend it for further experiments.

Known Issues

The RoarVM is a research project and is not as optimized for performance as the standard Squeak VM. Thus, its sequential performance is slower. This is due to the fact that the RoarVM misses optimizations like using the GCC label as value extension to speed up the interpreter.

  • single core performance is slower than the Squeak VM
    • Squeak 4.2.4beta1U, MVC image, OS X 554,844,390 bytecodes/sec; 12,213,718 sends/sec
    • RoarVM, MVC image, OS X, 1 core 66,286,897 bytecodes/sec; 2,910,474 sends/sec
    • RoarVM, MVC image, OS X, 8 cores 470,588,235 bytecodes/sec; 19,825,677 sends/sec
  • idle process does not yield when the RoarVM is run on more than one core
    • the event processing is not adapted fully yet, thus, the idle process is busy-waiting for performance reasons
    • will drain your battery, on mobile devices
  • Garbage collector is as simple as possible
    • it is neither concurrent nor parallel
    • performance can be problematic
  • Graphical subsystem based on X11
    • in contrast to todays Squeak VM, especially the OS X version, the RoarVM uses solely X11 and does not integrate as well into the OS as Squeak does
  • Stability should be ok, however, crashes can happen occasionally

Technical Overview

The implementation details of the RoarVM are currently documented in:

[1] Hosting an Object Heap on Manycore Hardware: An Exploration,
by David Ungar, and Sam S. Adams, in Proceedings of the 5th Symposium on Dynamic Languages, ACM (2009), p. 99-110. http://portal.acm.org/citation.cfm?id=1640134.1640149

As well as an VEE submission which is currently under review.

Furthermore, the design is based on the following earlier work:

[2] Multiprocessor Smalltalk: A Case Study of a Multiprocessor-Based
Programming Environment by Joseph Pallas, and David Ungar, in Proceedings of the ACM SIGPLAN 1988 Conference on Programming Language Design and Implementation, ACM (1988), p. 268-277. http://portal.acm.org/citation.cfm?id=54017

The RoarVM resembles the Squeak VM which is written in Smalltalk/Slang, however, it is rewritten in C++ to facilitate the development on manycore architectures. The C source code of for instance plugins to the Squeak VM has been reused directly. This code is located in /src/from squeak/.

The support for x86 compatible multicore systems is currently based on POSIX threads. Thus, the RoarVM can be started with a number of threads which are executed on distinct processor cores. On Tilera TILE64-based systems, the iLib library is used and for each processor core a separate processes is started which executes an interpreter instance each. For both architectures, the VM provides the illusion of a single object heap, spanning all of the cores, to the Smalltalk user. Smalltalk processes are scheduled by a single scheduler on the available processor cores, and thus, the processes can execute in parallel. For synchronization, the standard Smalltalk mechanisms are available. Semaphores as well as mutexes work as in classical systems. Currently, the RoarVM uses a single central scheduler which is based on the design of Pallas[2]. Its data structures are accessible from the image and only require minimal modifications to the image, since the do not change the general model of execution.

A distinct feature of the RoarVM is its use of an object table. It was introduced to reduce the necessary complexity to enable object migration between heaps on manycore architectures.

TODO: add some remarks on the heap structure

License

Copyright (c) 2008 - 2010 IBM Corporation and others. All rights reserved. This RoarVM and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at:

http://www.eclipse.org/legal/epl-v10.html

All parts directly taken over from the original Squeak source code are licensed under their original licenses.

Credits

Since the RoarVM is based on the work which has been done for Squeak, we would like to acknowledge the Squeak community as a whole for its valuable work.

The RoarVM was designed and implemented as 'Renaissance VM' by
David Ungar and Sam Adams at IBM Research.
It was ported to x86 compatible multicore systems by
Stefan Marr at the Software Languages Lab, Vrije Universiteit Brussel.

Special thanks go to Max OrHai for designing our logo.

More Repositories

1

latex-to-html5

Scripts for Latex to HTML5 conversion
TeX
723
star
2

are-we-fast-yet

Are We Fast Yet? Comparing Language Implementations with Objects, Closures, and Arrays
Java
296
star
3

CLIPS

A Tool for Building Expert Systems
C
83
star
4

ReBench

Execute and document benchmarks reproducibly.
Python
74
star
5

SOMns

SOMns: A Newspeak for Concurrency Research
Java
65
star
6

googletest

Google C++ Testing Framework
C++
41
star
7

WritingStats

Track and Visualize Your Writing Progress
XSLT
37
star
8

TruffleSOM

A SOM Smalltalk implemented on top of Oracle's Truffle Framework
Java
31
star
9

SOM

SOM - Simple Object Machine
ANTLR
21
star
10

selfopt-interp-performance

A reporting project on the performance of self-optimizing interpreters
Shell
16
star
11

PySOM

PySOM - The Simple Object Machine Smalltalk implemented in Python
Python
15
star
12

SMark

Write Benchmarks like Tests
Smalltalk
13
star
13

effortless-language-servers

Framework for Effortless Language Servers with Language Servers for SOM, SOMns, and SimpleLanguage
Java
13
star
14

SOMpp

SOM++ - C++ implementation of the Simple Object Machine Smalltalk
C++
12
star
15

CSOM

CSOM - C implementation of the Simple Object Machine Smalltalk
C
11
star
16

graal

Clone of the OpenJDK Graal Project Mercurial repository
C++
10
star
17

ReBenchDB

ReBenchDB records benchmark results and provides customizable reporting to track and analyze run-time performance of software programs.
TypeScript
10
star
18

perf-latex-paper

Setup for a Paper with Performance Evaluation, Latex, ReBench, and KnitR
TeX
10
star
19

LibGit

A Smalltalk Binding for libgit2
Smalltalk
9
star
20

Classic-Benchmarks

A collection of classic object-oriented benchmarks
C
8
star
21

Snake

Snake - The Language Game
Clojure
6
star
22

truffle-notes

Notes on the Truffle Language Framework and Graal JIT Compiler
R
6
star
23

BenchR

R scripts to evaluate and visualize benchmarking results
Perl
6
star
24

OmniVM

A RoarVM fork with support for the Ownership-based Metaobject Protocol (OMOP) to facilitate the implementation of concurrent programming abstractions.
C
5
star
25

som-java

SOM - Simple Object Machine (plain Java implementation)
Java
5
star
26

collab.sty

A Latex Package for collaboration and editing
TeX
4
star
27

JsSOM

JsSOM - The SOM (Simple Object Machine) Smalltalk implemented in JavaScript
JavaScript
3
star
28

academic-notes

Notes on Supervising, Organizing, and other Academic things
3
star
29

eg

EasyGit is a wrapper for git, designed to make git easy to learn and use for former SVN and CVS users.
Shell
3
star
30

conf-twitter-bot

A Twitter Bot to post about academic papers
TypeScript
2
star
31

ruby-stats

Analyze Ruby code bases to get some basic structural statistics
Ruby
2
star
32

COLL-PX

Paper on Collections Design and Programming Experience
TeX
2
star
33

wp-bib2html

Wordpress bib2html Plugin
PHP
1
star
34

AmbientTalk

AmbientTalk development repository. It is the root project for the different AT repositories.
1
star
35

OldTruffle

Java
1
star
36

truffleruby-faststart

Setup and benchmarks for TruffleRuby, part of the FastStart project.
Ruby
1
star
37

PDFTitlePageRefQR

Generate PDF Title Page with Full Reference and QR Code
Python
1
star
38

continuous-perf-tracking

Material for the Talk: Continuous Performance Tracking for Better โ€œEverythingโ€!
Java
1
star
39

barriers

Automatically exported from code.google.com/p/barriers
C++
1
star
40

GraalBasic

A dummy project to checkout and build Graal for a specific revision
Shell
1
star
41

graal-jvmci-8

My personal mirror of http://hg.openjdk.java.net/graal/graal-jvmci-8
C++
1
star
42

morevms-author-kit

MoreVMs'17 Workshop Author Kit with adapted Latex template
TeX
1
star
43

artifacts-base

Generate VirtualBox base images for artifacts using packer.io
Shell
1
star
44

takikawa-paper

TeX
1
star