FaaSnap
This repo includes the artifact of paper:
Lixiang Ao, George Porter, and Geoffrey M. Voelker. 2022. FaaSnap: FaaS Made Fast Using Snapshot-based VMs. In Seventeenth European Conference on Computer Systems (EuroSys ’22), April 5–8, 2022, RENNES, France. ACM, New York, NY, USA, 17 pages.
The modified Firecracker VMM is in https://github.com/ucsdsysnet/faasnap-firecracker.
The guest kernels are in https://github.com/ucsdsysnet/faasnap-kernel.
Setup
Build
- Build Firecracker:
- Build guest kernels:
- Build function rootfs.
- Build rootfs image.
pushd rootfs && make debian-rootfs.ext4 && popd
- Copy
rootfs/debian-rootfs.ext4
to a directory on local SSD.
- Build the FaaSnap daemon.
- Build API.
swagger generate server -f api/swagger.yaml
.
- Compile the daemon.
go get -u ./... && go build cmd/faasnap-server/main.go
- Download ResNet model resnet50-19c8e357.pth to
resources/recognition
.
- Start a local Redis instance on the default port 6379.
- Populate Redis with files in
resources
directory and its subdirectory. The keys should be the last parts of filenames (basename
).
Prepare the environment
- Run
prep.sh
.
Evaluation workflow
Experiment E1
-
Configure test-2inputs.json
.
- In "faasnap"
base_path
is where snapshot files location. Choose a directory in a local SSD.
kernels
are the locations of vanilla and sanpage kernels.
images
is the rootfs location.
executables
is the Firecracker binary for both vanilla and uffd.
- specify
redis_host
and redis_passwd
accordingly.
home_dir
is the current faasnap directory.
test_dir
is where snapshot files location. Choose a directory in a local SSD.
- Specify
host
and trace_api
.
-
Run tests:
sudo ./test.py test-2inputs.json
- After the tests finish, go to
http://<ip>:9411
, and use traceIDs to find trace results.
Experiment E2
-
Configure test-6inputs.json
.
- Same as E1. Leave the input definitions unchanged.
-
Run tests:
sudo ./test.py test-6inputs.json
- After the tests finish, go to
http://<ip>:9411
, and use traceIDs to find trace results.
Experiment E3
-
Configure test-2inputs.json
.
- Same as E1, except for
parallelism
and par_snapshots
.
- For same snapshot tests, set
parallelism
to the target parallelism and par_snapshots
to 1.
- For different snapshot tests, set both
parallelism
and par_snapshots
to the target parallelism.
-
Run tests:
sudo ./test.py test-2inputs.json
- After the tests finish, go to
http://<ip>:9411
, and use traceIDs to find trace results.
Experiment E4
-
Configure test-2inputs.json
.
- Same as E1, except set
faasnap.base_path
and test_dir
to a directory on remote storage.
- Set
settings.faasnap.record_regions.interval_threshold
and settings.faasnap.patch_mincore.interval_threshold
to 0 for the increased latency of remote storage.
-
Run tests:
sudo ./test.py test-2inputs.json
- After the tests finish, go to
http://<ip>:9411
, and use traceIDs to find trace results.