blob: 23a3419fcae8fa474fa5066a17b506f2f68474d6 [file] [log] [blame] [edit]
package userns
import (
"os"
"testing"
"github.com/opencontainers/runc/libcontainer/configs"
)
func BenchmarkSpawnProc(b *testing.B) {
if os.Geteuid() != 0 {
b.Skip("spawning user namespaced processes requires root")
}
// We can reuse the mapping as we call spawnProc() directly.
mapping := Mapping{
UIDMappings: []configs.IDMap{
{ContainerID: 0, HostID: 1337, Size: 142},
{ContainerID: 150, HostID: 0, Size: 1},
{ContainerID: 442, HostID: 1111, Size: 12},
{ContainerID: 1000, HostID: 9999, Size: 92},
{ContainerID: 9999, HostID: 1000000, Size: 4},
// Newer kernels support more than 5 entries, but stick to 5 here.
},
GIDMappings: []configs.IDMap{
{ContainerID: 1, HostID: 2337, Size: 142},
{ContainerID: 145, HostID: 6, Size: 1},
{ContainerID: 200, HostID: 1000, Size: 12},
{ContainerID: 1000, HostID: 9888, Size: 92},
{ContainerID: 8999, HostID: 1000000, Size: 4},
// Newer kernels support more than 5 entries, but stick to 5 here.
},
}
procs := make([]*os.Process, 0, b.N)
b.Cleanup(func() {
for _, proc := range procs {
if proc != nil {
_ = proc.Kill()
_, _ = proc.Wait()
}
}
})
for i := 0; i < b.N; i++ {
proc, err := spawnProc(mapping)
if err != nil {
b.Error(err)
}
procs = append(procs, proc)
}
}