Skip to content

Commit

Permalink
add bench test for byIndexes
Browse files Browse the repository at this point in the history
$ go test -run=XXX -count=5 -bench=.  sigs.k8s.io/controller-runtime/pkg/cache/internal
goos: linux
goarch: amd64
pkg: sigs.k8s.io/controller-runtime/pkg/cache/internal
cpu: Intel(R) Core(TM) i5-9600K CPU @ 3.70GHz
BenchmarkByIndexes1-4   	    1885	    579264 ns/op
BenchmarkByIndexes1-4   	    1977	    579334 ns/op
BenchmarkByIndexes1-4   	    1920	    583148 ns/op
BenchmarkByIndexes1-4   	    1958	    583714 ns/op
BenchmarkByIndexes1-4   	    1932	    592758 ns/op
BenchmarkByIndexes2-4   	     688	   1730501 ns/op
BenchmarkByIndexes2-4   	     706	   1693914 ns/op
BenchmarkByIndexes2-4   	     697	   1740027 ns/op
BenchmarkByIndexes2-4   	     686	   1669624 ns/op
BenchmarkByIndexes2-4   	     691	   1736906 ns/op
BenchmarkByIndexes3-4   	     562	   2007959 ns/op
BenchmarkByIndexes3-4   	     591	   1998279 ns/op
BenchmarkByIndexes3-4   	     576	   1992566 ns/op
BenchmarkByIndexes3-4   	     584	   2039316 ns/op
BenchmarkByIndexes3-4   	     588	   1981963 ns/op
BenchmarkByIndexes4-4   	     536	   2090786 ns/op
BenchmarkByIndexes4-4   	     565	   2084039 ns/op
BenchmarkByIndexes4-4   	     562	   2114272 ns/op
BenchmarkByIndexes4-4   	     514	   2095443 ns/op
BenchmarkByIndexes4-4   	     565	   2179949 ns/op
BenchmarkByIndexes5-4   	     555	   2162249 ns/op
BenchmarkByIndexes5-4   	     556	   2079339 ns/op
BenchmarkByIndexes5-4   	     544	   2108629 ns/op
BenchmarkByIndexes5-4   	     568	   2044934 ns/op
BenchmarkByIndexes5-4   	     568	   2097770 ns/op
PASS
ok  	sigs.k8s.io/controller-runtime/pkg/cache/internal	49.990s
  • Loading branch information
halfcrazy committed Oct 9, 2023
1 parent 2dae0b0 commit f9176e0
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions pkg/cache/internal/cache_reader_test.go
@@ -0,0 +1,77 @@
package internal

import (
"fmt"
"strconv"
"strings"
"testing"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/client-go/tools/cache"
)

func benchmarkByIndexes(sel fields.Selector, b *testing.B) {
requires := sel.Requirements()
indexFunc := func(val string) func(obj interface{}) ([]string, error) {
return func(obj interface{}) ([]string, error) {
pod := obj.(*corev1.Pod)
if strings.Contains(pod.Labels["foo"], val) {
return []string{KeyToNamespacedKey("", val)}, nil
}
return nil, nil
}
}

index := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{
FieldIndexName("idx1"): indexFunc("1"),
FieldIndexName("idx2"): indexFunc("2"),
FieldIndexName("idx3"): indexFunc("3"),
FieldIndexName("idx4"): indexFunc("4"),
FieldIndexName("idx5"): indexFunc("5"),
})

for i := 0; i < 15000; i++ {
err := index.Add(&corev1.Pod{ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("test-pod-%d", i), Labels: map[string]string{"foo": strconv.Itoa(i)}}})
if err != nil {
b.Fatal(err)
}
}

for i := 0; i < b.N; i++ {
objs, err := byIndexes(index, requires, "")
if err != nil {
b.Fatal(err)
}
if len(objs) == 0 {
b.Fatal("expect to match objs, got 0")
}
}
}

func BenchmarkByIndexes1(b *testing.B) {
sel := fields.ParseSelectorOrDie("idx1=1")
benchmarkByIndexes(sel, b)
}

func BenchmarkByIndexes2(b *testing.B) {
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2")
benchmarkByIndexes(sel, b)
}

func BenchmarkByIndexes3(b *testing.B) {
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3")
benchmarkByIndexes(sel, b)
}

func BenchmarkByIndexes4(b *testing.B) {
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3,idx4=4")
benchmarkByIndexes(sel, b)
}

func BenchmarkByIndexes5(b *testing.B) {
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3,idx4=4,idx5=5")
benchmarkByIndexes(sel, b)
}

0 comments on commit f9176e0

Please sign in to comment.