Skip to content

Commit

Permalink
Merge pull request containers#14009 from vrothberg/add-benchmarks
Browse files Browse the repository at this point in the history
benchmarks: add more image benchmarks
  • Loading branch information
openshift-merge-robot authored Apr 26, 2022
2 parents d504c3c + facc009 commit 5ac00a7
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 18 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down
24 changes: 12 additions & 12 deletions hack/podman-registry-go/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down
79 changes: 74 additions & 5 deletions test/e2e/benchmarks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -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)
}
Expand Down Expand Up @@ -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.
Expand All @@ -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)
Expand All @@ -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
// --------------------------------------------------------------------------
Expand Down

0 comments on commit 5ac00a7

Please sign in to comment.