diff options
author | Valentin Rothberg <vrothberg@redhat.com> | 2022-04-26 13:31:10 +0200 |
---|---|---|
committer | Valentin Rothberg <vrothberg@redhat.com> | 2022-04-26 14:25:17 +0200 |
commit | facc009ca070085bb1c32f146f77c2a0a62090b0 (patch) | |
tree | 6ebb7b822f1c8b9f12a6ec2440ed7af18e76afd7 | |
parent | 913a3a813c168b47f982bb6851a0968858946f85 (diff) | |
download | podman-facc009ca070085bb1c32f146f77c2a0a62090b0.tar.gz podman-facc009ca070085bb1c32f146f77c2a0a62090b0.tar.bz2 podman-facc009ca070085bb1c32f146f77c2a0a62090b0.zip |
benchmarks: add more image benchmarks
Add more benchmarks for the most common and performance-critical image
commands. Benchmarks for `podman build` should go into a separate
section.
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | hack/podman-registry-go/registry.go | 24 | ||||
-rw-r--r-- | test/e2e/benchmarks_test.go | 79 |
3 files changed, 87 insertions, 18 deletions
@@ -134,7 +134,7 @@ ifeq ($(GOBIN),) GOBIN := $(FIRST_GOPATH)/bin endif -export PATH := $(PATH):$(GOBIN) +export PATH := $(PATH):$(GOBIN):$(CURDIR)/hack GOMD2MAN ?= $(shell command -v go-md2man || echo '$(GOBIN)/go-md2man') diff --git a/hack/podman-registry-go/registry.go b/hack/podman-registry-go/registry.go index 143a83fa1..095f6fb18 100644 --- a/hack/podman-registry-go/registry.go +++ b/hack/podman-registry-go/registry.go @@ -9,10 +9,10 @@ import ( ) const ( - imageKey = "PODMAN_REGISTRY_IMAGE" - userKey = "PODMAN_REGISTRY_USER" - passKey = "PODMAN_REGISTRY_PASS" - portKey = "PODMAN_REGISTRY_PORT" + ImageKey = "PODMAN_REGISTRY_IMAGE" + UserKey = "PODMAN_REGISTRY_USER" + PassKey = "PODMAN_REGISTRY_PASS" + PortKey = "PODMAN_REGISTRY_PORT" ) var binary = "podman-registry" @@ -52,13 +52,13 @@ func Start() (*Registry, error) { key := spl[0] val := strings.TrimSuffix(strings.TrimPrefix(spl[1], "\""), "\"") switch key { - case imageKey: + case ImageKey: registry.Image = val - case userKey: + case UserKey: registry.User = val - case passKey: + case PassKey: registry.Password = val - case portKey: + case PortKey: registry.Port = val default: logrus.Errorf("Unexpected podman-registry output: %q", s) @@ -67,16 +67,16 @@ func Start() (*Registry, error) { // Extra sanity check. if registry.Image == "" { - return nil, errors.Errorf("unexpected output %q: %q missing", out, imageKey) + return nil, errors.Errorf("unexpected output %q: %q missing", out, ImageKey) } if registry.User == "" { - return nil, errors.Errorf("unexpected output %q: %q missing", out, userKey) + return nil, errors.Errorf("unexpected output %q: %q missing", out, UserKey) } if registry.Password == "" { - return nil, errors.Errorf("unexpected output %q: %q missing", out, passKey) + return nil, errors.Errorf("unexpected output %q: %q missing", out, PassKey) } if registry.Port == "" { - return nil, errors.Errorf("unexpected output %q: %q missing", out, portKey) + return nil, errors.Errorf("unexpected output %q: %q missing", out, PortKey) } registry.running = true diff --git a/test/e2e/benchmarks_test.go b/test/e2e/benchmarks_test.go index c631b06ee..9653cee3b 100644 --- a/test/e2e/benchmarks_test.go +++ b/test/e2e/benchmarks_test.go @@ -11,10 +11,12 @@ import ( "strconv" "strings" + podmanRegistry "github.com/containers/podman/v4/hack/podman-registry-go" . "github.com/containers/podman/v4/test/utils" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/onsi/gomega/gexec" + "github.com/sirupsen/logrus" ) var ( @@ -30,21 +32,23 @@ type benchmark struct { name string // The function to execute. main func() - // Function is run before `main`. - init func() + // Allows for extending a benchmark. + options newBenchmarkOptions } // Allows for customizing the benchnmark in an easy to extend way. type newBenchmarkOptions struct { // Sets the benchmark's init function. init func() + // Run a local registry for this benchmark. + needsRegistry bool } // Queue a new benchmark. func newBenchmark(name string, main func(), options *newBenchmarkOptions) { bm := benchmark{name: name, main: main} if options != nil { - bm.init = options.init + bm.options = *options } allBenchmarks = append(allBenchmarks, bm) } @@ -109,8 +113,23 @@ var _ = Describe("Podman Benchmark Suite", func() { for i := range allBenchmarks { setup() bm := allBenchmarks[i] - if bm.init != nil { - bm.init() + + // Start a local registry if requested. + var registry *podmanRegistry.Registry + if bm.options.needsRegistry { + reg, err := podmanRegistry.Start() + if err != nil { + logrus.Errorf("Error starting registry: %v", err) + os.Exit(1) + } + registry = reg + os.Setenv(podmanRegistry.UserKey, reg.User) + os.Setenv(podmanRegistry.PassKey, reg.Password) + os.Setenv(podmanRegistry.PortKey, reg.Port) + } + + if bm.options.init != nil { + bm.options.init() } // Set the time dir only for the main() function. @@ -120,6 +139,18 @@ var _ = Describe("Podman Benchmark Suite", func() { mem := totalMemoryInKb() b.RecordValueWithPrecision("[MEM] "+bm.name, float64(mem), "KB", 1) + + // Stop the local registry. + if bm.options.needsRegistry { + os.Unsetenv(podmanRegistry.UserKey) + os.Unsetenv(podmanRegistry.PassKey) + os.Unsetenv(podmanRegistry.PortKey) + if err := registry.Stop(); err != nil { + logrus.Errorf("Error stopping registry: %v", err) + os.Exit(1) + } + } + cleanup() } }, numBenchmarkSamples) @@ -142,6 +173,44 @@ var _ = Describe("Podman Benchmark Suite", func() { Expect(session).Should(Exit(0)) }, nil) + newBenchmark("podman load [docker]", func() { + session := podmanTest.Podman([]string{"load", "-i", "./testdata/docker-two-images.tar.xz"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }, nil) + + newBenchmark("podman load [oci]", func() { + session := podmanTest.Podman([]string{"load", "-i", "./testdata/oci-registry-name.tar.gz"}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }, nil) + + newBenchmark("podman save", func() { + session := podmanTest.Podman([]string{"save", ALPINE, "-o", path.Join(podmanTest.TempDir, "alpine.tar")}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }, nil) + + newBenchmark("podman image inspect", func() { + session := podmanTest.Podman([]string{"inspect", ALPINE}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }, nil) + + newBenchmark("podman login + logout", func() { + user := os.Getenv(podmanRegistry.UserKey) + pass := os.Getenv(podmanRegistry.PassKey) + port := os.Getenv(podmanRegistry.PortKey) + + session := podmanTest.Podman([]string{"login", "-u", user, "-p", pass, "--tls-verify=false", "localhost:" + port}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + + session = podmanTest.Podman([]string{"logout", "localhost:" + port}) + session.WaitWithDefaultTimeout() + Expect(session).Should(Exit(0)) + }, &newBenchmarkOptions{needsRegistry: true}) + // -------------------------------------------------------------------------- // CONTAINER BENCHMARKS // -------------------------------------------------------------------------- |