Skip to content

Commit f9176e0

Browse files
committed
add bench test for byIndexes
$ 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
1 parent 2dae0b0 commit f9176e0

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package internal
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
"strings"
7+
"testing"
8+
9+
corev1 "k8s.io/api/core/v1"
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/fields"
12+
"k8s.io/client-go/tools/cache"
13+
)
14+
15+
func benchmarkByIndexes(sel fields.Selector, b *testing.B) {
16+
requires := sel.Requirements()
17+
indexFunc := func(val string) func(obj interface{}) ([]string, error) {
18+
return func(obj interface{}) ([]string, error) {
19+
pod := obj.(*corev1.Pod)
20+
if strings.Contains(pod.Labels["foo"], val) {
21+
return []string{KeyToNamespacedKey("", val)}, nil
22+
}
23+
return nil, nil
24+
}
25+
}
26+
27+
index := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{
28+
FieldIndexName("idx1"): indexFunc("1"),
29+
FieldIndexName("idx2"): indexFunc("2"),
30+
FieldIndexName("idx3"): indexFunc("3"),
31+
FieldIndexName("idx4"): indexFunc("4"),
32+
FieldIndexName("idx5"): indexFunc("5"),
33+
})
34+
35+
for i := 0; i < 15000; i++ {
36+
err := index.Add(&corev1.Pod{ObjectMeta: metav1.ObjectMeta{
37+
Name: fmt.Sprintf("test-pod-%d", i), Labels: map[string]string{"foo": strconv.Itoa(i)}}})
38+
if err != nil {
39+
b.Fatal(err)
40+
}
41+
}
42+
43+
for i := 0; i < b.N; i++ {
44+
objs, err := byIndexes(index, requires, "")
45+
if err != nil {
46+
b.Fatal(err)
47+
}
48+
if len(objs) == 0 {
49+
b.Fatal("expect to match objs, got 0")
50+
}
51+
}
52+
}
53+
54+
func BenchmarkByIndexes1(b *testing.B) {
55+
sel := fields.ParseSelectorOrDie("idx1=1")
56+
benchmarkByIndexes(sel, b)
57+
}
58+
59+
func BenchmarkByIndexes2(b *testing.B) {
60+
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2")
61+
benchmarkByIndexes(sel, b)
62+
}
63+
64+
func BenchmarkByIndexes3(b *testing.B) {
65+
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3")
66+
benchmarkByIndexes(sel, b)
67+
}
68+
69+
func BenchmarkByIndexes4(b *testing.B) {
70+
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3,idx4=4")
71+
benchmarkByIndexes(sel, b)
72+
}
73+
74+
func BenchmarkByIndexes5(b *testing.B) {
75+
sel := fields.ParseSelectorOrDie("idx1=1,idx2=2,idx3=3,idx4=4,idx5=5")
76+
benchmarkByIndexes(sel, b)
77+
}

0 commit comments

Comments
 (0)