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   	 4208028	       292.4 ns/op
BenchmarkByIndexes1-4   	 4045444	       286.0 ns/op
BenchmarkByIndexes1-4   	 4226229	       280.1 ns/op
BenchmarkByIndexes1-4   	 4239436	       280.1 ns/op
BenchmarkByIndexes1-4   	 4179435	       293.4 ns/op
BenchmarkByIndexes2-4   	 2602788	       486.0 ns/op
BenchmarkByIndexes2-4   	 2169660	       474.7 ns/op
BenchmarkByIndexes2-4   	 2575916	       478.9 ns/op
BenchmarkByIndexes2-4   	 2544490	       463.5 ns/op
BenchmarkByIndexes2-4   	 2524232	       484.2 ns/op
BenchmarkByIndexes3-4   	 2030055	       561.2 ns/op
BenchmarkByIndexes3-4   	 2113954	       580.8 ns/op
BenchmarkByIndexes3-4   	 1839356	       589.2 ns/op
BenchmarkByIndexes3-4   	 1685526	       610.7 ns/op
BenchmarkByIndexes3-4   	 1933444	       600.2 ns/op
BenchmarkByIndexes4-4   	 1813144	       681.9 ns/op
BenchmarkByIndexes4-4   	 1566775	       667.5 ns/op
BenchmarkByIndexes4-4   	 1807480	       658.5 ns/op
BenchmarkByIndexes4-4   	 1806310	       656.9 ns/op
BenchmarkByIndexes4-4   	 1539990	       673.1 ns/op
BenchmarkByIndexes5-4   	 1610383	       751.0 ns/op
BenchmarkByIndexes5-4   	 1344288	       774.8 ns/op
BenchmarkByIndexes5-4   	 1586659	       785.9 ns/op
BenchmarkByIndexes5-4   	 1574892	       770.8 ns/op
BenchmarkByIndexes5-4   	 1382383	       787.7 ns/op
PASS
ok  	sigs.k8s.io/controller-runtime/pkg/cache/internal	50.485s
  • Loading branch information
halfcrazy committed Oct 9, 2023
1 parent 2dae0b0 commit 8622a7e
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions pkg/cache/internal/cache_reader_test.go
@@ -0,0 +1,73 @@
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) {
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{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 < 10000; 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++ {
_, err := byIndexes(index, sel.Requirements(), "")
if err != nil {
b.Fatal(err)
}
}
}

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 8622a7e

Please sign in to comment.