84 lines
2.9 KiB
Markdown
84 lines
2.9 KiB
Markdown
## Requirements
|
|
|
|
### Running
|
|
Due to its dependency on `dmsetup`, executing the snapshotter process in an environment where a udev
|
|
daemon is not accessible (such as a container) may result in unexpected behavior. In this case, try executing the
|
|
snapshotter with the `DM_DISABLE_UDEV=1` environment variable, which tells `dmsetup` to ignore udev and manage devices
|
|
itself. See [lvm(8)](http://man7.org/linux/man-pages/man8/lvm.8.html) and
|
|
[dmsetup(8)](http://man7.org/linux/man-pages/man8/dmsetup.8.html) for more information.
|
|
|
|
## How to run snapshotters benchmark
|
|
|
|
- `containerd` project contains AWS CloudFormation template to run an EC2 instance suitable for benchmarking.
|
|
It installs dependencies, prepares EBS volumes with same performance characteristics, and creates thin-pool device.
|
|
You can make stack with the following command (note: there is a charge for using AWS resources):
|
|
|
|
```bash
|
|
aws cloudformation create-stack \
|
|
--stack-name benchmark-instance \
|
|
--template-body file://benchmark_aws.yml \
|
|
--parameters \
|
|
ParameterKey=Key,ParameterValue=SSH_KEY \
|
|
ParameterKey=SecurityGroups,ParameterValue=sg-XXXXXXXX \
|
|
ParameterKey=VolumesSize,ParameterValue=20 \
|
|
ParameterKey=VolumesIOPS,ParameterValue=1000
|
|
```
|
|
|
|
- You can find an IP address of newly created EC2 instance in AWS Console or via AWS CLI:
|
|
|
|
```bash
|
|
$ aws ec2 describe-instances \
|
|
--instance-ids $(aws cloudformation describe-stack-resources --stack-name benchmark-instance --query 'StackResources[*].PhysicalResourceId' --output text) \
|
|
--query 'Reservations[*].Instances[*].PublicIpAddress' \
|
|
--output text
|
|
```
|
|
|
|
- SSH to an instance and prepare `containerd`:
|
|
|
|
```bash
|
|
ssh -i SSH_KEY ec2-user@IP
|
|
mkdir /mnt/disk1/data /mnt/disk2/data /mnt/disk3/data
|
|
go get github.com/containerd/containerd
|
|
cd $(go env GOPATH)/src/github.com/containerd/containerd
|
|
make
|
|
```
|
|
|
|
- Now you're ready to run the benchmark:
|
|
|
|
```bash
|
|
sudo su -
|
|
cd snapshots/benchsuite/
|
|
go test -bench . \
|
|
-dm.thinPoolDev=bench-docker--pool \
|
|
-dm.rootPath=/mnt/disk1/data \
|
|
-overlay.rootPath=/mnt/disk2/data \
|
|
-native.rootPath=/mnt/disk3/data
|
|
```
|
|
|
|
- The output will look like:
|
|
|
|
```bash
|
|
goos: linux
|
|
goarch: amd64
|
|
pkg: github.com/containerd/containerd/snapshots/testsuite
|
|
|
|
BenchmarkOverlay/run-4 1 1019730210 ns/op 164.53 MB/s
|
|
BenchmarkOverlay/prepare 1 26799447 ns/op
|
|
BenchmarkOverlay/write 1 968200363 ns/op
|
|
BenchmarkOverlay/commit 1 24582560 ns/op
|
|
|
|
BenchmarkDeviceMapper/run-4 1 3139232730 ns/op 53.44 MB/s
|
|
BenchmarkDeviceMapper/prepare 1 1758640440 ns/op
|
|
BenchmarkDeviceMapper/write 1 1356705388 ns/op
|
|
BenchmarkDeviceMapper/commit 1 23720367 ns/op
|
|
|
|
PASS
|
|
ok github.com/containerd/containerd/snapshots/testsuite 185.204s
|
|
```
|
|
|
|
- Don't forget to tear down the stack so it does not continue to incur charges:
|
|
|
|
```bash
|
|
aws cloudformation delete-stack --stack-name benchmark-instance
|
|
```
|