jerryscript on riot - riot summit...

25
1 Samsung Open Source Group JerryScript on RIOT An ultra-lightweight JavaScript engine for the Internet of Things Tilmann Scheller Principal Compiler Engineer [email protected] Samsung Open Source Group Samsung Research UK RIOT Summit 2016 Berlin, Germany, July 15 – 16, 2016

Upload: others

Post on 06-Jun-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

1Samsung Open Source Group

JerryScript on RIOTAn ultra-lightweight JavaScript engine for the Internet of Things

Tilmann SchellerPrincipal Compiler Engineer

[email protected]

Samsung Open Source GroupSamsung Research UK

RIOT Summit 2016Berlin, Germany, July 15 – 16, 2016

Page 2: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

2Samsung Open Source Group

Overview

● Introduction

● JerryScript

● Memory consumption/Performance

● JerryScript on RIOT

● Demo

● Future work

● Summary

Page 3: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

3Samsung Open Source Group

Introduction

Page 4: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 5: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 6: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

6Samsung Open Source Group

JerryScript

Page 7: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 8: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 9: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 10: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

10Samsung Open Source Group

Target hardware

● STM32F4 developer board

● Cortex-M4F clocked at 168 MHz

● 192KB of RAM

● 1MB of flash memory

Page 11: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 12: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

12Samsung Open Source Group

Memory consumption/Performance

Page 13: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 14: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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)

Page 15: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

15Samsung Open Source Group

JerryScript on RIOT

Page 16: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 17: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

17Samsung Open Source Group

Demo

Page 18: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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)

TetrisJerryScript

RIOT

LED Matrix

I2C

Switches via GPIO

Page 19: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

19Samsung Open Source Group

Tetris Demo

Page 20: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

20Samsung Open Source Group

Future work

Page 21: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 22: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

22Samsung Open Source Group

Summary

Page 23: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

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

Page 24: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

Thank you.

24Samsung Open Source Group

Page 25: JerryScript on RIOT - RIOT Summit 2019summit.riot-os.org/.../6-Future-Session-JerryScript-Samsung-Tilmann… · JerryScript on RIOT An ultra-lightweight JavaScript engine for the

25Samsung Open Source Group

Contact Information:

Tilmann [email protected]

Samsung Open Source GroupSamsung Research UK