From 5597020a608f32fc6a5f1c081585bb8c9516d627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Tue, 31 May 2022 10:46:49 +0100 Subject: [PATCH] Use github.com/klauspost/compress for gzip and zlib MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit klauspost/compress is a high quality drop-in replacement for common Go compression libraries. Since Prometheus sends out a lot of HTTP requests that often return compressed output having improved compression libraries helps to save cpu & memory resources. On a test Prometheus server I was able to see cpu reduction from 31 to 30 cores. Benchmark results: name old time/op new time/op delta TargetScraperGzip/metrics=1-8 69.4µs ± 4% 69.2µs ± 3% ~ (p=0.122 n=50+50) TargetScraperGzip/metrics=100-8 84.3µs ± 2% 80.9µs ± 2% -4.02% (p=0.000 n=48+46) TargetScraperGzip/metrics=1000-8 296µs ± 1% 274µs ±14% -7.35% (p=0.000 n=47+45) TargetScraperGzip/metrics=10000-8 2.06ms ± 1% 1.66ms ± 2% -19.34% (p=0.000 n=47+45) TargetScraperGzip/metrics=100000-8 20.9ms ± 2% 17.5ms ± 3% -16.50% (p=0.000 n=49+50) name old alloc/op new alloc/op delta TargetScraperGzip/metrics=1-8 6.06kB ± 0% 6.07kB ± 0% +0.24% (p=0.000 n=48+48) TargetScraperGzip/metrics=100-8 7.04kB ± 0% 6.89kB ± 0% -2.17% (p=0.000 n=49+50) TargetScraperGzip/metrics=1000-8 9.02kB ± 0% 8.35kB ± 1% -7.49% (p=0.000 n=50+50) TargetScraperGzip/metrics=10000-8 18.1kB ± 1% 16.1kB ± 2% -10.87% (p=0.000 n=47+47) TargetScraperGzip/metrics=100000-8 1.21MB ± 0% 1.01MB ± 2% -16.69% (p=0.000 n=36+50) name old allocs/op new allocs/op delta TargetScraperGzip/metrics=1-8 71.0 ± 0% 72.0 ± 0% +1.41% (p=0.000 n=50+50) TargetScraperGzip/metrics=100-8 81.0 ± 0% 76.0 ± 0% -6.17% (p=0.000 n=50+50) TargetScraperGzip/metrics=1000-8 92.0 ± 0% 83.0 ± 0% -9.78% (p=0.000 n=50+50) TargetScraperGzip/metrics=10000-8 93.0 ± 0% 91.0 ± 0% -2.15% (p=0.000 n=50+50) TargetScraperGzip/metrics=100000-8 111 ± 0% 135 ± 1% +21.89% (p=0.000 n=40+50) Signed-off-by: Łukasz Mierzwa --- cmd/promtool/archive.go | 3 ++- model/textparse/promparse_test.go | 5 +++-- scrape/scrape.go | 2 +- util/httputil/compression.go | 5 +++-- util/httputil/compression_test.go | 4 ++-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cmd/promtool/archive.go b/cmd/promtool/archive.go index 6edb741ac..7b565c57c 100644 --- a/cmd/promtool/archive.go +++ b/cmd/promtool/archive.go @@ -15,9 +15,10 @@ package main import ( "archive/tar" - "compress/gzip" "fmt" "os" + + "github.com/klauspost/compress/gzip" ) const filePerm = 0o666 diff --git a/model/textparse/promparse_test.go b/model/textparse/promparse_test.go index d82bfe598..cbfc8aa6c 100644 --- a/model/textparse/promparse_test.go +++ b/model/textparse/promparse_test.go @@ -15,15 +15,16 @@ package textparse import ( "bytes" - "compress/gzip" "errors" "io" "os" "testing" + "github.com/klauspost/compress/gzip" + "github.com/stretchr/testify/require" + "github.com/prometheus/common/expfmt" "github.com/prometheus/common/model" - "github.com/stretchr/testify/require" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/util/testutil" diff --git a/scrape/scrape.go b/scrape/scrape.go index dfa945852..de35b9e40 100644 --- a/scrape/scrape.go +++ b/scrape/scrape.go @@ -16,7 +16,6 @@ package scrape import ( "bufio" "bytes" - "compress/gzip" "context" "errors" "fmt" @@ -31,6 +30,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/klauspost/compress/gzip" config_util "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/version" diff --git a/util/httputil/compression.go b/util/httputil/compression.go index b96c088cb..9a8a66645 100644 --- a/util/httputil/compression.go +++ b/util/httputil/compression.go @@ -14,11 +14,12 @@ package httputil import ( - "compress/gzip" - "compress/zlib" "io" "net/http" "strings" + + "github.com/klauspost/compress/gzip" + "github.com/klauspost/compress/zlib" ) const ( diff --git a/util/httputil/compression_test.go b/util/httputil/compression_test.go index 851279761..2db6810bd 100644 --- a/util/httputil/compression_test.go +++ b/util/httputil/compression_test.go @@ -15,13 +15,13 @@ package httputil import ( "bytes" - "compress/gzip" - "compress/zlib" "io" "net/http" "net/http/httptest" "testing" + "github.com/klauspost/compress/gzip" + "github.com/klauspost/compress/zlib" "github.com/stretchr/testify/require" )