1Samsung Open Source Group
JerryScript on RIOT
An ultra-lightweight JavaScript engine for the Internet of Things
Tilmann Scheller
Principal Compiler Engineer
t.scheller@samsung.com
Samsung Open Source Group
Samsung Research UK
RIOT Summit 2016
Berlin, Germany, July 15 – 16, 2016
2Samsung Open Source Group
Overview
● Introduction
● JerryScript
● Memory consumption/Performance
● JerryScript on RIOT
● Demo
● Future work
● Summary
3Samsung Open Source Group
Introduction
4Samsung Open Source Group
What is JerryScript?
● A really lightweight JavaScript engine
● Has a base footprint of ~3KB of RAM
● Optimized for microcontrollers
● Developed from scratch by Samsung
● Actively developed on GitHub
● JerryScript is an open source project released under the
Apache License 2.0
5Samsung Open Source Group
Why JavaScript on microcontrollers?
● There's a huge pool of JavaScript developers
● Opens up the possibility for web developers to easily write
software for embedded devices
● Performance overhead of JavaScript less of an issue for
control tasks
● Increased productivity, shorter time to market
● Ability to load code dynamically over the network
● Security: Executing JavaScript code is safer than executing
arbitrary native code
6Samsung Open Source Group
JerryScript
7Samsung Open Source Group
JerryScript History
● Development started in June 2014
● Released as open source in June 2015
● JerryScript passed 100% of the test262 conformance test
suite in August 2015
● Rewritten compact byte code implementation landed in
January 2016
● Current focus on performance optimization
8Samsung Open Source Group
JerryScript
● Heavily optimized for a low memory footprint
● Interpreter-only
● Compact object representation
● Compressed pointers
● No AST, directly creating byte code
● Compact byte code heavily optimized for low memory
consumption
9Samsung Open Source Group
JerryScript Portability
● Extremely portable
● Self-contained
● Small C library
● Can run bare-metal
● Supports the STM32F4, ESP8266, Arduino 101, FRDM-
K64F boards
● OS support: NuttX, Zephyr, mbed, RIOT
● Runs on Linux/macOS as well
10Samsung Open Source Group
Target hardware
● STM32F4 developer board
● Cortex-M4F clocked at 168 MHz
● 192KB of RAM
● 1MB of flash memory
11Samsung Open Source Group
JerryScript
● Written in C99
● About 82KLOC
● Code size 156KB when compiled with GCC in LTO mode
for ARM Thumb-2
● Implements the entire ECMAScript 5.1 standard, passes
100% of the test262 conformance test suite
● C API for embedding JerryScript
● Byte code snapshot feature
12Samsung Open Source Group
Memory consumption/
Performance
13Samsung Open Source Group
SunSpider 1.0.2 - Memory consumption
3d-cube
3d-raytrace
access-binary-treesl
access-fannkuch
access-nbody
bitops-3bit-bits-in-byte
bitops-bits-in-byte
bitops-bitwise-and
bitops-nsieve-bits
controlflow-recursive
crypto-aes
crypto-md5
crypto-sha1
date-format-tofte
date-format-xparb
math-cordic
math-partial-sums
math-spectral-norm
string-base64
string-fasta
0 50 100 150 200 250 300 350 400
36
186
38
12
11
5
5
4
139
80
57
142
92
21
21
6
5
12
139
28
138
339
160
101
106
98
97
97
207
135
180
210
169
352
147
102
101
102
267
107
JerryScript
Duktape 1.5
Max RSS in KB (lower is better) Measured on a Raspberry Pi 2
14Samsung Open Source Group
SunSpider 1.0.2 - Performance
3d-cube
3d-raytrace
access-binary-trees
access-fannkuch
access-nbody
bitops-3bit-bits-in-byte
bitops-bits-in-byte
bitops-bitwise-and
bitops-nsieve-bits
controlflow-recursive
crypto-aes
crypto-md5
crypto-sha1
date-format-tofte
date-format-xparb
math-cordic
math-partial-sums
math-spectral-norm
string-base64
string-fasta
0 1 2 3 4 5 6 7 8
0.95
1.11
0.58
2.56
1.07
0.57
0.84
1.19
1.82
0.4
1.14
0.75
0.7
0.88
0.48
1.35
0.74
0.59
2.08
1.85
0.96
1.5
1.17
2.12
1.55
1.48
1.69
7.56
2.78
1.05
1.66
1.34
1.25
2.98
1.54
2.42
2.54
0.79
3.93
4.35
JerryScript
Duktape 1.5
Execution time in seconds (lower is better) Measured on a Raspberry Pi 2 (-Os -flto)
15Samsung Open Source Group
JerryScript on RIOT
16Samsung Open Source Group
JerryScript on RIOT
● Ported JerryScript over to RIOT
● Without any prior knowledge of RIOT the port took only a
couple of days to complete
● Running RIOT on the STM32F4 board
● Ran into issue #4488 which causes crashes when writing
to the serial console
● RIOT now officially supported as a target OS in upstream
JerryScript
17Samsung Open Source Group
Demo
18Samsung Open Source Group
Tetris Demo
● Implementation of the
classic Tetris game
● An LED matrix is used as
a display
● Written in JavaScript STM32F4 board
(192KB RAM, 1MB Flash)
Tetris
JerryScript
RIOT
LED Matrix
I2C
Switches via GPIO
19Samsung Open Source Group
Tetris Demo
20Samsung Open Source Group
Future work
21Samsung Open Source Group
Future work
● Further performance and memory optimizations
● 1.0 release of JerryScript in the coming weeks
● Debugging support
● Memory profiling
● Support for more boards
22Samsung Open Source Group
Summary
23Samsung Open Source Group
Summary
● Significantly lowers barrier of entry for JavaScript
development targeting heavily constrained embedded
devices
● Speeds up development
● Active community
● More information on http://samsung.github.io/jerryscript
● Looking for bug reports and feedback
Thank you.
24Samsung Open Source Group
25Samsung Open Source Group
Contact Information:
Tilmann Scheller
t.scheller@samsung.com
Samsung Open Source Group
Samsung Research UK

JerryScript on RIOT

  • 1.
    1Samsung Open SourceGroup JerryScript on RIOT An ultra-lightweight JavaScript engine for the Internet of Things Tilmann Scheller Principal Compiler Engineer t.scheller@samsung.com Samsung Open Source Group Samsung Research UK RIOT Summit 2016 Berlin, Germany, July 15 – 16, 2016
  • 2.
    2Samsung Open SourceGroup Overview ● Introduction ● JerryScript ● Memory consumption/Performance ● JerryScript on RIOT ● Demo ● Future work ● Summary
  • 3.
    3Samsung Open SourceGroup Introduction
  • 4.
    4Samsung Open SourceGroup What is JerryScript? ● A really lightweight JavaScript engine ● Has a base footprint of ~3KB of RAM ● Optimized for microcontrollers ● Developed from scratch by Samsung ● Actively developed on GitHub ● JerryScript is an open source project released under the Apache License 2.0
  • 5.
    5Samsung Open SourceGroup Why JavaScript on microcontrollers? ● There's a huge pool of JavaScript developers ● Opens up the possibility for web developers to easily write software for embedded devices ● Performance overhead of JavaScript less of an issue for control tasks ● Increased productivity, shorter time to market ● Ability to load code dynamically over the network ● Security: Executing JavaScript code is safer than executing arbitrary native code
  • 6.
    6Samsung Open SourceGroup JerryScript
  • 7.
    7Samsung Open SourceGroup JerryScript History ● Development started in June 2014 ● Released as open source in June 2015 ● JerryScript passed 100% of the test262 conformance test suite in August 2015 ● Rewritten compact byte code implementation landed in January 2016 ● Current focus on performance optimization
  • 8.
    8Samsung Open SourceGroup JerryScript ● Heavily optimized for a low memory footprint ● Interpreter-only ● Compact object representation ● Compressed pointers ● No AST, directly creating byte code ● Compact byte code heavily optimized for low memory consumption
  • 9.
    9Samsung Open SourceGroup JerryScript Portability ● Extremely portable ● Self-contained ● Small C library ● Can run bare-metal ● Supports the STM32F4, ESP8266, Arduino 101, FRDM- K64F boards ● OS support: NuttX, Zephyr, mbed, RIOT ● Runs on Linux/macOS as well
  • 10.
    10Samsung Open SourceGroup Target hardware ● STM32F4 developer board ● Cortex-M4F clocked at 168 MHz ● 192KB of RAM ● 1MB of flash memory
  • 11.
    11Samsung Open SourceGroup JerryScript ● Written in C99 ● About 82KLOC ● Code size 156KB when compiled with GCC in LTO mode for ARM Thumb-2 ● Implements the entire ECMAScript 5.1 standard, passes 100% of the test262 conformance test suite ● C API for embedding JerryScript ● Byte code snapshot feature
  • 12.
    12Samsung Open SourceGroup Memory consumption/ Performance
  • 13.
    13Samsung Open SourceGroup SunSpider 1.0.2 - Memory consumption 3d-cube 3d-raytrace access-binary-treesl access-fannkuch access-nbody bitops-3bit-bits-in-byte bitops-bits-in-byte bitops-bitwise-and bitops-nsieve-bits controlflow-recursive crypto-aes crypto-md5 crypto-sha1 date-format-tofte date-format-xparb math-cordic math-partial-sums math-spectral-norm string-base64 string-fasta 0 50 100 150 200 250 300 350 400 36 186 38 12 11 5 5 4 139 80 57 142 92 21 21 6 5 12 139 28 138 339 160 101 106 98 97 97 207 135 180 210 169 352 147 102 101 102 267 107 JerryScript Duktape 1.5 Max RSS in KB (lower is better) Measured on a Raspberry Pi 2
  • 14.
    14Samsung Open SourceGroup SunSpider 1.0.2 - Performance 3d-cube 3d-raytrace access-binary-trees access-fannkuch access-nbody bitops-3bit-bits-in-byte bitops-bits-in-byte bitops-bitwise-and bitops-nsieve-bits controlflow-recursive crypto-aes crypto-md5 crypto-sha1 date-format-tofte date-format-xparb math-cordic math-partial-sums math-spectral-norm string-base64 string-fasta 0 1 2 3 4 5 6 7 8 0.95 1.11 0.58 2.56 1.07 0.57 0.84 1.19 1.82 0.4 1.14 0.75 0.7 0.88 0.48 1.35 0.74 0.59 2.08 1.85 0.96 1.5 1.17 2.12 1.55 1.48 1.69 7.56 2.78 1.05 1.66 1.34 1.25 2.98 1.54 2.42 2.54 0.79 3.93 4.35 JerryScript Duktape 1.5 Execution time in seconds (lower is better) Measured on a Raspberry Pi 2 (-Os -flto)
  • 15.
    15Samsung Open SourceGroup JerryScript on RIOT
  • 16.
    16Samsung Open SourceGroup JerryScript on RIOT ● Ported JerryScript over to RIOT ● Without any prior knowledge of RIOT the port took only a couple of days to complete ● Running RIOT on the STM32F4 board ● Ran into issue #4488 which causes crashes when writing to the serial console ● RIOT now officially supported as a target OS in upstream JerryScript
  • 17.
  • 18.
    18Samsung Open SourceGroup Tetris Demo ● Implementation of the classic Tetris game ● An LED matrix is used as a display ● Written in JavaScript STM32F4 board (192KB RAM, 1MB Flash) Tetris JerryScript RIOT LED Matrix I2C Switches via GPIO
  • 19.
    19Samsung Open SourceGroup Tetris Demo
  • 20.
    20Samsung Open SourceGroup Future work
  • 21.
    21Samsung Open SourceGroup Future work ● Further performance and memory optimizations ● 1.0 release of JerryScript in the coming weeks ● Debugging support ● Memory profiling ● Support for more boards
  • 22.
    22Samsung Open SourceGroup Summary
  • 23.
    23Samsung Open SourceGroup Summary ● Significantly lowers barrier of entry for JavaScript development targeting heavily constrained embedded devices ● Speeds up development ● Active community ● More information on http://samsung.github.io/jerryscript ● Looking for bug reports and feedback
  • 24.
  • 25.
    25Samsung Open SourceGroup Contact Information: Tilmann Scheller t.scheller@samsung.com Samsung Open Source Group Samsung Research UK