Skip to content

switch-container/faasnap

Repository files navigation

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

  1. Build Firecracker:
  2. Build guest kernels:
  3. Build function rootfs.
    • Build rootfs image. pushd rootfs && make debian-rootfs && popd
    • Copy rootfs/debian-*-rootfs.ext4 to a directory on local SSD.
  4. 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

Prepare input data

Download ResNet model resnet50-19c8e357.pth to rootfs/guest/python/image_recognition/model/.

Prepare the environment

  1. Run prep.sh.

Evaluation workflow

Experiment E1

  1. 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.
  2. 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

  1. Configure test-6inputs.json.

    • Same as E1. Leave the input definitions unchanged.
  2. 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

  1. 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.
  2. 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

  1. 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.
  2. Run tests: sudo ./test.py test-2inputs.json

    • After the tests finish, go to http://<ip>:9411, and use traceIDs to find trace results.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages