diff --git a/libcontainer/integration/bench_test.go b/libcontainer/integration/bench_test.go new file mode 100644 index 00000000000..da95b20b0b7 --- /dev/null +++ b/libcontainer/integration/bench_test.go @@ -0,0 +1,51 @@ +package integration + +import ( + "os" + "testing" + + "github.com/opencontainers/runc/libcontainer" +) + +func BenchmarkExecTrue(b *testing.B) { + config := newTemplateConfig(b, nil) + container, err := newContainer(b, config) + ok(b, err) + defer destroyContainer(container) + + // Execute a first process in the container + stdinR, stdinW, err := os.Pipe() + ok(b, err) + process := &libcontainer.Process{ + Cwd: "/", + Args: []string{"cat"}, + Env: standardEnvironment, + Stdin: stdinR, + Init: true, + } + err = container.Run(process) + _ = stdinR.Close() + defer func() { + _ = stdinW.Close() + if _, err := process.Wait(); err != nil { + b.Log(err) + } + }() + ok(b, err) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + exec := &libcontainer.Process{ + Cwd: "/", + Args: []string{"/bin/true"}, + Env: standardEnvironment, + LogLevel: "0", // Minimize forwardChildLogs involvement. + } + err := container.Run(exec) + if err != nil { + b.Fatal("exec failed:", err) + } + waitProcess(exec, b) + } + b.StopTimer() +}