From 4597473c3dd1c81c288569f95d74363cde799ec8 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Fri, 26 Sep 2025 11:03:06 +0200 Subject: [PATCH 1/2] [chore][confighttp] use sync.Pool When profiling some environments excessive calls to bytes.NewBuffer() and consequently additional GC workload was noticed. Use sync.Pool to reduce this overhead. Signed-off-by: Florian Lehner --- config/confighttp/compression.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/config/confighttp/compression.go b/config/confighttp/compression.go index 48898a6279c..3794873d86c 100644 --- a/config/confighttp/compression.go +++ b/config/confighttp/compression.go @@ -44,6 +44,7 @@ type compressRoundTripper struct { compressionType configcompression.Type compressionParams configcompression.CompressionParams compressor *compressor + bufferPool *sync.Pool } var zstdReaderPool sync.Pool @@ -179,6 +180,11 @@ func newCompressRoundTripper(rt http.RoundTripper, compressionType configcompres compressionType: compressionType, compressionParams: compressionParams, compressor: encoder, + bufferPool: &sync.Pool{ + New: func() interface{} { + return &bytes.Buffer{} + }, + }, }, nil } @@ -192,7 +198,12 @@ func (r *compressRoundTripper) RoundTrip(req *http.Request) (*http.Response, err } // Compress the body. - buf := bytes.NewBuffer([]byte{}) + buf := r.bufferPool.Get().(*bytes.Buffer) + defer func() { + buf.Reset() + r.bufferPool.Put(buf) + }() + if err := r.compressor.compress(buf, req.Body); err != nil { return nil, err } From 2782d525b6168b93893ac7fc6b39ea4be008d37c Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Fri, 26 Sep 2025 11:38:21 +0200 Subject: [PATCH 2/2] fixup linter Signed-off-by: Florian Lehner --- config/confighttp/compression.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/confighttp/compression.go b/config/confighttp/compression.go index 3794873d86c..4efc6cf22eb 100644 --- a/config/confighttp/compression.go +++ b/config/confighttp/compression.go @@ -181,7 +181,7 @@ func newCompressRoundTripper(rt http.RoundTripper, compressionType configcompres compressionParams: compressionParams, compressor: encoder, bufferPool: &sync.Pool{ - New: func() interface{} { + New: func() any { return &bytes.Buffer{} }, },