Faasm

Faasm is a high-performance stateful serverless runtime.

Faasm provides multi-tenant isolation, but also lets functions share regions of memory.These shared memory regions give low-latency concurrent access to data, and are synchronisedglobally to support large-scale parallelism.

Faasm defines a custom which lets functions performserverless-specific tasks (e.g. invoking other functions and managing state), as well as interactingwith the underlying host (e.g. using the filesystem and networking). The Faasm host interface achievesthe same goal as WASI, but in a serverless-specific context.

A preprint of our paper on Faasm can be found .

Quick start

Then run the Faasm CLI, from which you can build, deploy and invoke functions:

  1. # Start the CLI
  2. ./bin/cli.sh
  3.  
  4. # Upload the demo "hello" function
  5. inv upload demo hello
  6. # Invoke the function
  7. inv invoke demo hello

Note that the first time you run the local set-up it will generate some machine code specificto your host. This is stored in the machine-code directory in the root of the project and reusedon subsequent runs.

  • Usage and set-up - using the CLI and other features.
  • - writing and deploying Faasm functions in C/C++.
  • Python functions - isolating and executing functions in Python.
  • - links and resources for writing Faasm Rust functions.
  • Distributed state - sharing state between functions.
  • - deploying Faasm as part of a full serverless platform.
  • Bare metal/ VM deployment - deploying Faasm on bare metal or VMs as a stand-alone system.
  • - performing inference in Faasm functions with TF Lite.
  • API - invoking and managing functions and state through Faasm's HTTP API.
  • and OpenMP - executing existing MPI and OpenMP applications in Faasm.
  • - developing and modifying Faasm.
  • Faasm.js - executing Faasm functions in the browser and on the server.
  • - snapshot-and-restore to reduce cold starts.