mirror of https://github.com/k3s-io/k3s
Merge pull request #24906 from smarterclayton/better_benchmark
Automatic merge from submit-queue Slightly more effective conversion test (better variety) Exercises more code paths for debugging memory allocations.pull/6/head
commit
8f9bff5b25
|
@ -18,14 +18,23 @@ package api_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"math/rand"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
apitesting "k8s.io/kubernetes/pkg/api/testing"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func BenchmarkPodConversion(b *testing.B) {
|
func BenchmarkPodConversion(b *testing.B) {
|
||||||
|
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
|
||||||
|
items := make([]api.Pod, 4)
|
||||||
|
for i := range items {
|
||||||
|
apiObjectFuzzer.Fuzz(&items[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
// add a fixed item
|
||||||
data, err := ioutil.ReadFile("pod_example.json")
|
data, err := ioutil.ReadFile("pod_example.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Unexpected error while reading file: %v", err)
|
b.Fatalf("Unexpected error while reading file: %v", err)
|
||||||
|
@ -34,11 +43,14 @@ func BenchmarkPodConversion(b *testing.B) {
|
||||||
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil {
|
if err := runtime.DecodeInto(testapi.Default.Codec(), data, &pod); err != nil {
|
||||||
b.Fatalf("Unexpected error decoding pod: %v", err)
|
b.Fatalf("Unexpected error decoding pod: %v", err)
|
||||||
}
|
}
|
||||||
|
items = append(items, pod)
|
||||||
|
width := len(items)
|
||||||
|
|
||||||
scheme := api.Scheme
|
scheme := api.Scheme
|
||||||
var result *api.Pod
|
var result *api.Pod
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
versionedObj, err := scheme.ConvertToVersion(&pod, testapi.Default.GroupVersion().String())
|
pod := &items[i%width]
|
||||||
|
versionedObj, err := scheme.ConvertToVersion(pod, testapi.Default.GroupVersion().String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.Fatalf("Conversion error: %v", err)
|
b.Fatalf("Conversion error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -48,9 +60,7 @@ func BenchmarkPodConversion(b *testing.B) {
|
||||||
}
|
}
|
||||||
result = obj.(*api.Pod)
|
result = obj.(*api.Pod)
|
||||||
}
|
}
|
||||||
if !api.Semantic.DeepDerivative(pod, *result) {
|
b.Log(result)
|
||||||
b.Fatalf("Incorrect conversion: expected %v, got %v", pod, *result)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkNodeConversion(b *testing.B) {
|
func BenchmarkNodeConversion(b *testing.B) {
|
||||||
|
|
|
@ -275,7 +275,13 @@ func benchmarkItems() []v1.Pod {
|
||||||
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
|
apiObjectFuzzer := apitesting.FuzzerFor(nil, api.SchemeGroupVersion, rand.NewSource(benchmarkSeed))
|
||||||
items := make([]v1.Pod, 2)
|
items := make([]v1.Pod, 2)
|
||||||
for i := range items {
|
for i := range items {
|
||||||
apiObjectFuzzer.Fuzz(&items[i])
|
var pod api.Pod
|
||||||
|
apiObjectFuzzer.Fuzz(&pod)
|
||||||
|
out, err := api.Scheme.ConvertToVersion(&pod, "v1")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
items[i] = *out.(*v1.Pod)
|
||||||
}
|
}
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue