From 5db04f038017eb8033cf853de91d80f76a9c11d2 Mon Sep 17 00:00:00 2001 From: Mark Rushakoff Date: Thu, 13 Apr 2023 09:38:01 -0400 Subject: [PATCH 1/3] perf: skip debug work when not in debug mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MergedFileDescriptors was unconditionally checking import paths and file descriptor differences, then conditionally returning the differences as an error. There is no need to check the differences if we will never return them. This made a measurable difference in running simd q: $ hyperfine --warmup 4 -r 50 '/tmp/simd-dodebugwork q' '/tmp/simd-skipdebugwork q' Benchmark 1: /tmp/simd-dodebugwork q Time (mean ± σ): 121.6 ms ± 6.5 ms [User: 173.6 ms, System: 23.7 ms] Range (min … max): 117.0 ms … 162.7 ms 50 runs Warning: Statistical outliers were detected. ... Benchmark 2: /tmp/simd-skipdebugwork q Time (mean ± σ): 113.6 ms ± 6.5 ms [User: 158.5 ms, System: 23.1 ms] Range (min … max): 109.3 ms … 139.7 ms 50 runs Warning: Statistical outliers were detected. ... Summary '/tmp/simd-skipdebugwork q' ran 1.07 ± 0.08 times faster than '/tmp/simd-dodebugwork q' And on two single runs of TestAppStateDeterminism, this optimization reduced local runtime from 20.9 seconds to 19.7, an anecdotal ~6% speedup. --- proto/merge.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/proto/merge.go b/proto/merge.go index 760da85d..8451b72e 100644 --- a/proto/merge.go +++ b/proto/merge.go @@ -45,7 +45,8 @@ func mergedFileDescriptors(debug bool) (*descriptorpb.FileDescriptorSet, error) } // While combing through the file descriptors, we'll also log any errors - // we encounter. + // we encounter -- only if debug is true. Otherwise, we will skip the work + // to check import path or file descriptor differences. var ( checkImportErr []string diffErr []string @@ -53,9 +54,11 @@ func mergedFileDescriptors(debug bool) (*descriptorpb.FileDescriptorSet, error) // Add protoregistry file descriptors to our final file descriptor set. protoregistry.GlobalFiles.RangeFiles(func(fileDescriptor protoreflect.FileDescriptor) bool { - fd := protodesc.ToFileDescriptorProto(fileDescriptor) - if err := CheckImportPath(fd.GetName(), fd.GetPackage()); err != nil { - checkImportErr = append(checkImportErr, err.Error()) + if debug { + fd := protodesc.ToFileDescriptorProto(fileDescriptor) + if err := CheckImportPath(fd.GetName(), fd.GetPackage()); err != nil { + checkImportErr = append(checkImportErr, err.Error()) + } } fds.File = append(fds.File, protodesc.ToFileDescriptorProto(fileDescriptor)) @@ -92,9 +95,11 @@ func mergedFileDescriptors(debug bool) (*descriptorpb.FileDescriptorSet, error) return nil, err } - err := CheckImportPath(fd.GetName(), fd.GetPackage()) - if err != nil { - checkImportErr = append(checkImportErr, err.Error()) + if debug { + err := CheckImportPath(fd.GetName(), fd.GetPackage()) + if err != nil { + checkImportErr = append(checkImportErr, err.Error()) + } } // If it's not in the protoregistry file descriptors, add it. From b117cded3bf4ae4e730577aeed535f843a71a8ce Mon Sep 17 00:00:00 2001 From: Mark Rushakoff Date: Thu, 13 Apr 2023 09:46:01 -0400 Subject: [PATCH 2/3] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c83742dd..f854e46a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Improvements - [#59](https://github.com/cosmos/gogoproto/pull/59) Reuse buffers and gzip readers to reduce memory allocations during MergedFileDescriptors. +- [#60](https://github.com/cosmos/gogoproto/pull/60) Skip work to check import path and file descriptor differences during MergedFileDescriptors, when not in debug mode. ## [v1.4.7](https://github.com/cosmos/gogoproto/releases/tag/v1.4.7) - 2023-03-30 From c94756df957fce7cf4b6e5b5b6ba46f9fc9c88ff Mon Sep 17 00:00:00 2001 From: Mark Rushakoff Date: Thu, 13 Apr 2023 11:16:25 -0400 Subject: [PATCH 3/3] build: use latest transitive dependencies The outdated versions seem to be causing CI failures. --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 35d36e54..6d0755fa 100644 --- a/go.mod +++ b/go.mod @@ -11,8 +11,8 @@ require ( require ( github.com/golang/protobuf v1.5.3 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect ) diff --git a/go.sum b/go.sum index fc5e0db5..40e4ebe3 100644 --- a/go.sum +++ b/go.sum @@ -6,12 +6,12 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201 h1:BEABXpNXLEz0WxtA+6CQIz2xkg80e+1zrhWyMcq8VzE= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=