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.
- Build Firecracker:
- Clone https://github.com/ucsdsysnet/faasnap-firecracker
tools/devtool build- The built executable will be in
build/cargo_target/x86_64-unknown-linux-musl/debug/firecracker
- Build guest kernels:
- Clone https://github.com/ucsdsysnet/faasnap-kernel
- See faasnap-kernel/README.md
- Build function rootfs.
- Build rootfs image.
pushd rootfs && make debian-rootfs.ext4 && popd - Copy
rootfs/debian-rootfs.ext4to a directory on local SSD.
- Build rootfs image.
- 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
- Build API.
- Download ResNet model resnet50-19c8e357.pth to
resources/recognition. - Start a local Redis instance on the default port 6379.
- Populate Redis with files in
resourcesdirectory and its subdirectory. The keys should be the last parts of filenames (basename).
- Run
prep.sh.
-
Configure
test-2inputs.json.- In "faasnap"
base_pathis where snapshot files location. Choose a directory in a local SSD.kernelsare the locations of vanilla and sanpage kernels.imagesis the rootfs location.executablesis the Firecracker binary for both vanilla and uffd.- specify
redis_hostandredis_passwdaccordingly.
home_diris the current faasnap directory.test_diris where snapshot files location. Choose a directory in a local SSD.- Specify
hostandtrace_api.
- In "faasnap"
-
Run tests:
sudo ./test.py test-2inputs.json- After the tests finish, go to
http://<ip>:9411, and use traceIDs to find trace results.
-
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.
-
Configure
test-2inputs.json.- Same as E1, except for
parallelismandpar_snapshots. - For same snapshot tests, set
parallelismto the target parallelism andpar_snapshotsto 1. - For different snapshot tests, set both
parallelismandpar_snapshotsto the target parallelism.
- Same as E1, except for
-
Run tests:
sudo ./test.py test-2inputs.json- After the tests finish, go to
http://<ip>:9411, and use traceIDs to find trace results.
- After the tests finish, go to
-
Configure
test-2inputs.json.- Same as E1, except set
faasnap.base_pathandtest_dirto a directory on remote storage. - Set
settings.faasnap.record_regions.interval_thresholdandsettings.faasnap.patch_mincore.interval_thresholdto 0 for the increased latency of remote storage.
- Same as E1, except set
-
Run tests:
sudo ./test.py test-2inputs.json- After the tests finish, go to
http://<ip>:9411, and use traceIDs to find trace results.
- After the tests finish, go to