From 268ab7c0539e504f7f841a063f4675c3406f92c9 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Mon, 12 Jun 2017 09:23:50 -0700 Subject: [PATCH] Benchmark container create and task start Signed-off-by: Michael Crosby --- Makefile | 4 ++ benchmark_test.go | 111 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 benchmark_test.go diff --git a/Makefile b/Makefile index 8a1de7bed..fbe8b0b12 100644 --- a/Makefile +++ b/Makefile @@ -127,6 +127,10 @@ integration: ## run integration tests @echo "$(WHALE) $@" @go test ${TESTFLAGS} +benchmark: ## run benchmarks tests + @echo "$(WHALE) $@" + @go test ${TESTFLAGS} -bench . -run Benchmark + FORCE: # Build a binary from a cmd. diff --git a/benchmark_test.go b/benchmark_test.go new file mode 100644 index 000000000..e06c814de --- /dev/null +++ b/benchmark_test.go @@ -0,0 +1,111 @@ +package containerd + +import ( + "fmt" + "testing" +) + +func BenchmarkContainerCreate(b *testing.B) { + if testing.Short() { + b.Skip() + } + client, err := New(address) + if err != nil { + b.Fatal(err) + } + defer client.Close() + + ctx, cancel := testContext() + defer cancel() + + image, err := client.GetImage(ctx, testImage) + if err != nil { + b.Error(err) + return + } + spec, err := GenerateSpec(WithImageConfig(ctx, image), WithProcessArgs("true")) + if err != nil { + b.Error(err) + return + } + var containers []Container + defer func() { + for _, c := range containers { + if err := c.Delete(ctx); err != nil { + b.Error(err) + } + } + }() + + // reset the timer before creating containers + b.ResetTimer() + for i := 0; i < b.N; i++ { + id := fmt.Sprintf("%s-%d", b.Name(), i) + container, err := client.NewContainer(ctx, id, WithSpec(spec), WithImage(image), WithNewRootFS(id, image)) + if err != nil { + b.Error(err) + return + } + containers = append(containers, container) + } + b.StopTimer() +} + +func BenchmarkContainerStart(b *testing.B) { + if testing.Short() { + b.Skip() + } + client, err := New(address) + if err != nil { + b.Fatal(err) + } + defer client.Close() + + ctx, cancel := testContext() + defer cancel() + + image, err := client.GetImage(ctx, testImage) + if err != nil { + b.Error(err) + return + } + spec, err := GenerateSpec(WithImageConfig(ctx, image), WithProcessArgs("true")) + if err != nil { + b.Error(err) + return + } + var containers []Container + defer func() { + for _, c := range containers { + if err := c.Delete(ctx); err != nil { + b.Error(err) + } + } + }() + + for i := 0; i < b.N; i++ { + id := fmt.Sprintf("%s-%d", b.Name(), i) + container, err := client.NewContainer(ctx, id, WithSpec(spec), WithImage(image), WithNewRootFS(id, image)) + if err != nil { + b.Error(err) + return + } + containers = append(containers, container) + + } + // reset the timer before starting tasks + b.ResetTimer() + for _, c := range containers { + task, err := c.NewTask(ctx, empty()) + if err != nil { + b.Error(err) + return + } + defer task.Delete(ctx) + if err := task.Start(ctx); err != nil { + b.Error(err) + return + } + } + b.StopTimer() +}