Faasm Host Interface
To execute functions compiled to WebAssembly, Faasm must define an interfacethat allows these functions to interact with the underlying host and runtime.This interface must support a subset of standard POSIX-like syscalls, as wellas serverless-specific tasks such as state management, and invoking otherfunctions.
Function invocation and chaining
These cover interactions with serverless functions and their ability to invokeother functions ("chaining").
Function | Description |
---|---|
byte read_call_input() | Read input data as byte array |
void write_call_output(out_data) | Write output data for function |
int chain_call(name, args) | Call function and return call_id |
int await_call(call_id) | Await completion of call_id |
byte get_call_output(call_id) | Load the output data of call_id |
State
This section of the host interface covers management of state as outlined inthe state docs.
Function | Description |
---|---|
byte get_state(key, flags) | Read input data as byte array |
byte get_state_offset(key, off, flags) | Write output data for function |
void set_state(key, val) | Write output data for function |
void set_state_offset(key, val, len, off) | Write output data for function |
void push/pull_state(key) | Write output data for function |
void push/pull_state_offset(key, off) | Write output data for function |
void append_state(key, val) | Write output data for function |
void lock_state_read/write(key) | Write output data for function |
void lock_state_global_read/write(key) | Write output data for function |
POSIX-like system calls
This section covers "standard" POSIX-like system calls, some of which are also foundin WASI.
Category | Function | Description |
---|---|---|
Dynamic linking | void dlopen/dlsym(…) | Dynamic linking of libraries |
Dynamic linking | int dlclose(…) | As above |
Memory | void mmap(…), int munmap(…) | Memory grow/shrink only |
Memory | int brk(…), void* sbrk(…) | Memory grow/shrink only |
Network | int socket/connect/bind(…) | Client-side networking only |
Network | size_t send/recv(…) | Send/recv via virtual interface |
File I/O | int open/close/dup/stat(…) | Per-user virtual filesystem access |
File I/O | size_t read/write(…) | As above |
Timing | int gettime(…) | Per-user monotonic clock only |
Random | size_t getrandom(…) | Uses underlying host/dev/urandom |
Further extensions
The Faasm host interface also includes extentions and libraries appropriateto large-scale parallel applications: