From e0c1fa120f2816a625ffae11c8b8ccb8f08f929d Mon Sep 17 00:00:00 2001 From: Nikhita Raghunath Date: Tue, 4 Jun 2019 17:37:42 +0530 Subject: [PATCH] Add benchmarks for yaml marshaling and unmarshaling --- pkg/api/testing/BUILD | 1 + pkg/api/testing/serialization_test.go | 38 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/pkg/api/testing/BUILD b/pkg/api/testing/BUILD index 7d133a326f0..973629ddff1 100644 --- a/pkg/api/testing/BUILD +++ b/pkg/api/testing/BUILD @@ -111,5 +111,6 @@ go_test( "//vendor/github.com/gogo/protobuf/proto:go_default_library", "//vendor/github.com/google/gofuzz:go_default_library", "//vendor/github.com/json-iterator/go:go_default_library", + "//vendor/sigs.k8s.io/yaml:go_default_library", ], ) diff --git a/pkg/api/testing/serialization_test.go b/pkg/api/testing/serialization_test.go index 6d7bfc89997..51f29f5d31a 100644 --- a/pkg/api/testing/serialization_test.go +++ b/pkg/api/testing/serialization_test.go @@ -47,6 +47,7 @@ import ( k8s_apps_v1 "k8s.io/kubernetes/pkg/apis/apps/v1" api "k8s.io/kubernetes/pkg/apis/core" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" + "sigs.k8s.io/yaml" ) // fuzzInternalObject fuzzes an arbitrary runtime object using the appropriate @@ -615,3 +616,40 @@ func BenchmarkDecodeIntoJSONCodecGenConfigCompatibleWithStandardLibrary(b *testi } b.StopTimer() } + +// BenchmarkEncodeYAMLMarshal provides a baseline for regular YAML encode performance +func BenchmarkEncodeYAMLMarshal(b *testing.B) { + items := benchmarkItems(b) + width := len(items) + b.ResetTimer() + for i := 0; i < b.N; i++ { + if _, err := yaml.Marshal(&items[i%width]); err != nil { + b.Fatal(err) + } + } + b.StopTimer() +} + +// BenchmarkDecodeYAML provides a baseline for regular YAML decode performance +func BenchmarkDecodeIntoYAML(b *testing.B) { + codec := testapi.Default.Codec() + items := benchmarkItems(b) + width := len(items) + encoded := make([][]byte, width) + for i := range items { + data, err := runtime.Encode(codec, &items[i]) + if err != nil { + b.Fatal(err) + } + encoded[i] = data + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + obj := v1.Pod{} + if err := yaml.Unmarshal(encoded[i%width], &obj); err != nil { + b.Fatal(err) + } + } + b.StopTimer() +}