Skip to content
/ aurora Public

Single level store for persistence, application introspection, and more

License

Notifications You must be signed in to change notification settings

etsal/aurora

Repository files navigation

Aurora Single Level Store

The Aurora Single Level Store provides transparent persistence for applications based on lightning fast incremental checkpoints. Aurora checkpoints are either stored on-disk in a custom object store or in memory for debugging applications. Unlike older single level stores Aurora provides a file system namespace into the store to enable backwards compatibility.

Applications can use the single level store API provided libsls to achieve higher performance and control Aurora's behavior.

The file tree is the following:

Directories Contents
benchmarks/ Performance benchmarks
dtrace/ DTrace scripts for debugging and performance measurements
include/ Headers for userspace and the kernel
sls/ Single Level Store in memory module
libsls/ Userspace library implementing the API
scripts/ Bash utilities for using Aurora and performance benchmarks
slfs/ VFS filesystem for using files with Aurora
slos/ Object Store backing Aurora
tests/ Correctness tests for Aurora
tools/ Userspace tools

Installation

Dependencies:

  • FreeBSD 12.1 with Aurora patches
  • pidof (testbench)
  • python3 (testbench)

Before you begin you must install and configure FreeBSD 12.1 with the Aurora enabling patches that can be done from our tree or a provided iso image. The build depends on header changes to FreeBSD and one of four provided kernel configuration files: GENERIC, PERF, FASTDBG, SLOWDBG.

# make

Once complete you may install Aurora using the following commands. Remember that the newly installed commands newfs_sls and slsctl will not be in your path until you type rehash.

# mkdir -p /usr/lib/debug/boot/modules
# mkdir -p /usr/lib/debug/sbin
# mkdir -p /usr/aurora/tests
# make install

The basic test suite can be run to verify things are working:

# cd tests
# ./testbench

Getting Started

First you will want to load the kernel modules sls.ko and slos.ko that provide the single level store and object store/file system functionality.
This will recursively load all dependent kernel modules.

# kldload sls

Next you will want to create a SLS object store on a flash storage device, we use /dev/nvd0 the first NVMe disk as an example. You may specify any disk or partition available to you.

WARNING: This will destroy all data on the device /dev/nvd0.

# newfs_sls /dev/nvd0

Finally we can mount the file system in a directory /aurora for our example.
This is an important step as this both mounts the file system and opens the object store for use by the single level store. At the moment you may only have a single aurora file system attached.

# mkdir /aurora
# mount -t slfs /dev/nvd0 /aurora

To manage the single level store you can use the slsctl command to attach processes and create manual checkpoints. The system actually lets you create partitions that are a logical grouping of persistent processes that can be either memory backed or storage backed see the -m flag and -o flag. We will only cover the most basic usage here.

To make an existing process persistent you use the attach command.

# slsctl attach -p <Process PID>

You can manually checkpoint the application using checkpoint. The -r flag will recursively checkpoint all children of the parent process.

slsctl checkpoint [-r]

You can restore a process after a system crash using the restore command.

slsctl restore

About

Single level store for persistence, application introspection, and more

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published