pkg/ownership/cachesource/manager_bench_test.go
Rama main · réplica de lectura del repositorio original.
package cachesource
import (
"fmt"
"runtime"
"testing"
"github.com/skyhook-io/radar/pkg/ownership"
"github.com/skyhook-io/radar/pkg/ownership/ownershiptest"
"github.com/skyhook-io/radar/pkg/resourceid"
)
func BenchmarkAgentOwnershipBatch(b *testing.B) {
for _, scenario := range []string{"omitted-claims", "listed-members", "unreadable-managers", "shared-controller", "many-namespaces"} {
b.Run(scenario, func(b *testing.B) {
world := ownershiptest.NewBuilder()
var rows, members []resourceid.Ref
deployment := world.Add("apps", "Deployment", "shop", "web")
for i := range 5000 {
name := fmt.Sprint("row-", i)
switch scenario {
case "shared-controller", "many-namespaces":
if scenario == "many-namespaces" {
deployment = world.Add("apps", "Deployment", fmt.Sprint("ns-", i%100), name)
}
rows = append(rows, world.Add("", "Pod", deployment.Ref.Namespace, name, deployment.OwnerRef(true)).Ref)
default:
row := world.Add("", "ConfigMap", "shop", name)
if scenario == "omitted-claims" {
world.Meta(row, nil, map[string]string{"argocd.argoproj.io/tracking-id": "argocd_app:/ConfigMap:shop/" + name})
members = append(members, world.Add("", "ConfigMap", "shop", "listed-"+name).Ref)
}
rows = append(rows, row.Ref)
if scenario == "listed-members" {
members = append(members, row.Ref)
}
}
}
if scenario == "omitted-claims" || scenario == "listed-members" {
world.Manager(ownership.ArgoApplication, "argocd", "app", ownership.MembersRecorded, "shop", members...)
}
if scenario == "unreadable-managers" {
for i := range 100 {
world.Manager(ownership.ArgoApplication, "argocd", fmt.Sprint("app-", i), ownership.MembersUnreadable, "shop")
}
}
cache := render(b, world.World())
b.ReportAllocs()
b.ResetTimer()
for range b.N {
b.StopTimer()
runtime.GC()
var before, after runtime.MemStats
runtime.ReadMemStats(&before)
b.StartTimer()
session := begin(b, cache.source())
view := ownership.NewView(session, ownership.Unrestricted())
for _, row := range rows {
if scenario == "shared-controller" || scenario == "many-namespaces" {
view.ControllerChain(row)
} else {
view.Manager(row)
}
}
b.StopTimer()
runtime.GC()
runtime.ReadMemStats(&after)
runtime.KeepAlive(view)
if after.HeapAlloc > before.HeapAlloc {
b.ReportMetric(float64(after.HeapAlloc-before.HeapAlloc), "retained_B")
}
b.StartTimer()
if err := session.ValidateCaches(); err != nil {
b.Fatal(err)
}
}
})
}
}