core/mount: add benchmark test for GetUsernsFD

```bash
$ go test -bench=.  -benchmem ./ -exec sudo
goos: linux
goarch: amd64
pkg: github.com/containerd/containerd/v2/core/mount
cpu: AMD Ryzen 7 5800H with Radeon Graphics
BenchmarkBatchRunGetUsernsFD_Concurrent1-16                 2398            532424 ns/op            1145 B/op         43 allocs/op
BenchmarkBatchRunGetUsernsFD_Concurrent10-16                 343           3701695 ns/op           11552 B/op        421 allocs/op
PASS
ok      github.com/containerd/containerd/v2/core/mount  2.978s
```

Signed-off-by: Wei Fu <fuweid89@gmail.com>
This commit is contained in:
Wei Fu 2024-08-19 18:49:58 +08:00
parent 0ecaec4dde
commit bcdf507363

View File

@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"sync"
"syscall" "syscall"
"testing" "testing"
@ -29,6 +30,34 @@ import (
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
func BenchmarkBatchRunGetUsernsFD_Concurrent1(b *testing.B) {
for range b.N {
benchmarkBatchRunGetUsernsFD(1)
}
}
func BenchmarkBatchRunGetUsernsFD_Concurrent10(b *testing.B) {
for range b.N {
benchmarkBatchRunGetUsernsFD(10)
}
}
func benchmarkBatchRunGetUsernsFD(n int) {
var wg sync.WaitGroup
wg.Add(n)
for i := 0; i < n; i++ {
go func() {
defer wg.Done()
fd, err := getUsernsFD(testUIDMaps, testGIDMaps)
if err != nil {
panic(err)
}
fd.Close()
}()
}
wg.Wait()
}
var ( var (
testUIDMaps = []syscall.SysProcIDMap{ testUIDMaps = []syscall.SysProcIDMap{
{ContainerID: 1000, HostID: 0, Size: 100}, {ContainerID: 1000, HostID: 0, Size: 100},