-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathREADME.md
More file actions
84 lines (60 loc) · 3.37 KB
/
README.md
File metadata and controls
84 lines (60 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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.](https://doi.org/10.1145/3492321.3524270) 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:
- 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`
1. Build guest kernels:
- Clone <https://github.com/ucsdsysnet/faasnap-kernel>
- See faasnap-kernel/README.md
1. Build function rootfs.
- Build rootfs image. `pushd rootfs && make debian-rootfs && popd`
- Copy `rootfs/debian-*-rootfs.ext4` to a directory on local SSD.
2. 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](https://github.com/fregu856/deeplabv3/blob/master/pretrained_models/resnet/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`.
1. 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.
1. 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.
1. 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.
1. Run tests:
`sudo ./test.py test-2inputs.json`
- After the tests finish, go to `http://<ip>:9411`, and use traceIDs to find trace results.