Skip to content

Instantly share code, notes, and snippets.

@jimcadden
Created July 18, 2017 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jimcadden/dee4ace5782630588d482a83603e8891 to your computer and use it in GitHub Desktop.
Save jimcadden/dee4ace5782630588d482a83603e8891 to your computer and use it in GitHub Desktop.
title date reveal_theme reveal_transition reveal_transitionSpeed reveal_slideNumber
EbbRT+NodeJS (Unikernel 7/11/17)
2017-07-12
sky
slide
fast
false

Constructing Per-Application Operating Systems

James Cadden, PhD Candidate

Boston University


Elastic Building Block Runtime

EbbRT is a framework for building per-application library operating systems

==

Project Goal:

Reduce the effort to construct and maintain library operating systems without inhibiting specialization

==

==

==

==


Library Operating Systems

  • Lightweight execution environment

  • Deployed directly on (virtual) hardware interfaces

  • Single-application, single address space

==

Application with LibOS and hypervisor

==

Decompose the LibOS into a set of system components...

==

...that are customizable, extensible, swappable, removable

==

Set chosen to fit the needs of a particular application

==

Statically compiled components combined at linktime

==

Application + OS compiled into single bootable image


EbbRT Native Runtime

  • Per-core event-loop

  • Non-preemptive execution / cooperative scheduling

  • Identity mapped memory w/ large pages

==

0

Ebbs encapsulate major system component functionality

==

Building an Application

  • Application source compiled using modified GNU toolchain

  • x86_64-ebbrt build target

  • Includes libstdc++, libc (newlib), C++/BOOST libraries

  • Bootable .elf binary with kvm/qemu driver support

==

Elastic Building Blocks (Ebbs)

  • C++14 objects with EbbRef type
auto myEbb=EbbRef<MyEbbType>();

myEbb->foo(); 
  • Overload dereference operand to support specialized construction

==

Ebbs may have per-core representative instances

==

Instances are created lazily per-core

==

Instances are created lazily per-core

==

Instances are created lazily per-core

==

Or a single shared instance

==

EbbRT provides support for distributed Ebb invocation

==

Ebbs

  • Statically compiled, chosen at link time

  • Promote targeted customization

  • Promote reuse of specialized implementation


OpenWhisk

==

  • Invoke requests trigger a new action execution

  • Consider client request latency (service times) and platform throughput

==

Invoker nodes deploys actions in isolated containers

==

Specialized invoker OS for deploying actions

==

  • First-order design for runtime executions

  • Simplifications user access, resource provisioning, isolation, devices,


EbbRT-NodeJS

==

EbbRT-NodeJS

==

JavaScript files arrive via network

==

JavaScript files arrive via network

==

Scripts are compiled and executed by V8

==

Dependencies decomposed into per-core Ebb instances

==


Extending the LibOS

==

libuv: multi-platform system support library (asynchronous I/O)

==

libuv: multi-platform system support library (asynchronous I/O)


Hosted Runtime

==

==

==

==

==

==


Next Steps

  • Introduce multicore invoker to EbbRT-NodeJS

  • Determine limits of existing libuv support

  • Integrate EbbRT-Invoker into OpenWhisk


Thanks!

Questions?


Performance Results (OSDI)

==

V8 Benchmark Suite

==

EbbRT-Memcached Server Performance

==

Performance Advantages

  • Event-driven multicore TCP/IP network stack

  • Identity mapped memory w/ large pages

  • Zero-copy I/O paths, asynchronous primatives

==

==

2x throughput at SLA

==


That's All Folks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment