From a52776fbfb305374d87bb553739f712e055b2206 Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Thu, 6 Feb 2020 09:25:52 -0800 Subject: [PATCH] Add UpdateTwice and UpdateApply benchmarks for fieldmanager I've also moved the deserialization of the object outside the benchmark since we're not trying to benchmark the yaml parser. --- .../fieldmanager/fieldmanager_test.go | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go index cf4d8b9417f..19bf43c3bc0 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager_test.go @@ -409,13 +409,28 @@ func BenchmarkNewObject(b *testing.B) { APIVersion: "v1", }, }) - + appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} + if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil { + b.Fatalf("Failed to parse yaml object: %v", err) + } b.Run("Update", func(b *testing.B) { b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { - err := f.Update(newObj, "fieldmanager_test") - if err != nil { + if err := f.Update(newObj, "fieldmanager_test"); err != nil { + b.Fatal(err) + } + f.Reset() + } + }) + b.Run("UpdateTwice", func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + if err := f.Update(newObj, "fieldmanager_test"); err != nil { + b.Fatal(err) + } + if err := f.Update(newObj, "fieldmanager_test_2"); err != nil { b.Fatal(err) } f.Reset() @@ -425,12 +440,20 @@ func BenchmarkNewObject(b *testing.B) { b.ReportAllocs() b.ResetTimer() for n := 0; n < b.N; n++ { - appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}} - if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil { - b.Fatalf("error decoding YAML: %v", err) + if err := f.Apply(appliedObj, "fieldmanager_test", false); err != nil { + b.Fatal(err) } - err := f.Apply(appliedObj, "fieldmanager_test", false) - if err != nil { + f.Reset() + } + }) + b.Run("UpdateApply", func(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + for n := 0; n < b.N; n++ { + if err := f.Update(newObj, "fieldmanager_test"); err != nil { + b.Fatal(err) + } + if err := f.Apply(appliedObj, "fieldmanager_test", false); err != nil { b.Fatal(err) } f.Reset()