From 618fc6def212370bfa33747c1554c9c0aea943a3 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Fri, 20 Mar 2020 00:13:38 -0300 Subject: [PATCH 01/22] compressor filter: add benchmark I am debugging a case of slow responses possibly due to compression, so throwing in some benchmarks to get some perf data about this filter. ``` $ ./bazel-bin/test/extensions/filters/http/common/compressor/compressor_filter_speed_test 2020-03-20 00:15:07 Running ./bazel-bin/test/extensions/filters/http/common/compressor/compressor_filter_speed_test Run on (8 X 2300 MHz CPU s) CPU Caches: L1 Data 32K (x4) L1 Instruction 32K (x4) L2 Unified 262K (x4) L3 Unified 6291K (x1) Load Average: 2.17, 2.14, 2.00 ***WARNING*** Library was built as DEBUG. Timings may be affected. --------------------------------------------------------- Benchmark Time CPU Iterations --------------------------------------------------------- FilterCompress 24674140 ns 24616586 ns 29 ``` Signed-off-by: Raul Gutierrez Segales --- .../filters/http/common/compressor/BUILD | 21 +++++ .../compressor_filter_speed_test.cc | 90 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc diff --git a/test/extensions/filters/http/common/compressor/BUILD b/test/extensions/filters/http/common/compressor/BUILD index b03a3cf39122..688f9164d800 100644 --- a/test/extensions/filters/http/common/compressor/BUILD +++ b/test/extensions/filters/http/common/compressor/BUILD @@ -3,6 +3,7 @@ licenses(["notice"]) # Apache 2 load( "//bazel:envoy_build_system.bzl", "envoy_cc_test", + "envoy_cc_test_binary", "envoy_package", ) @@ -21,3 +22,23 @@ envoy_cc_test( "@envoy_api//envoy/extensions/filters/http/compressor/v3:pkg_cc_proto", ], ) + +envoy_cc_test_binary( + name = "compressor_filter_speed_test", + srcs = ["compressor_filter_speed_test.cc"], + external_deps = [ + "benchmark", + "googletest", + ], + deps = [ + "//source/common/compressor:compressor_lib", + "//source/common/protobuf:utility_lib", + "//source/extensions/filters/http/common/compressor:compressor_lib", + "//test/mocks/http:http_mocks", + "//test/mocks/protobuf:protobuf_mocks", + "//test/mocks/runtime:runtime_mocks", + "//test/test_common:printers_lib", + "//test/test_common:utility_lib", + "@envoy_api//envoy/extensions/filters/http/compressor/v3:pkg_cc_proto", + ], +) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc new file mode 100644 index 000000000000..573ca5aada8a --- /dev/null +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -0,0 +1,90 @@ +#include "envoy/extensions/filters/http/compressor/v3/compressor.pb.h" + +#include "common/compressor/zlib_compressor_impl.h" +#include "extensions/filters/http/common/compressor/compressor.h" + +#include "test/mocks/http/mocks.h" +#include "test/mocks/runtime/mocks.h" +#include "test/mocks/stats/mocks.h" + +#include "benchmark/benchmark.h" + +#include "gmock/gmock.h" + +using testing::Return; + +namespace Envoy { +namespace Extensions { +namespace HttpFilters { +namespace Common { +namespace Compressors { + +class MockCompressorFilterConfig : public CompressorFilterConfig { +public: + MockCompressorFilterConfig( + const envoy::extensions::filters::http::compressor::v3::Compressor& compressor, + const std::string& stats_prefix, Stats::Scope& scope, Runtime::Loader& runtime, + const std::string& compressor_name) + : CompressorFilterConfig(compressor, stats_prefix + compressor_name + ".", scope, runtime, + compressor_name) {} + + std::unique_ptr makeCompressor() override { + auto compressor = std::make_unique(); + compressor->init(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9); + return compressor; + } +}; + +// Measure basic compression. +static void FilterCompress(benchmark::State& state) { + for (auto _ : state) { + CompressorFilterConfigSharedPtr config; + Stats::IsolatedStoreImpl stats; + testing::NiceMock runtime; + envoy::extensions::filters::http::compressor::v3::Compressor compressor; + NiceMock decoder_callbacks; + Buffer::OwnedImpl data; + + TestUtility::feedBufferWithRandomCharacters(data, 122880); + + config.reset(new MockCompressorFilterConfig(compressor, "test.", stats, runtime, "gzip")); + + ON_CALL(runtime.snapshot_, featureEnabled("test.filter_enabled", 100)) + .WillByDefault(Return(true)); + + auto filter = std::make_unique(config); + filter->setDecoderFilterCallbacks(decoder_callbacks); + + Http::TestRequestHeaderMapImpl headers = {{":method", "get"}, {"accept-encoding", "gzip"}}; + filter->decodeHeaders(headers, false); + + Http::TestResponseHeaderMapImpl response_headers = { + {":method", "get"}, + {"content-length", "122880"}, + {"content-type", "application/json;charset=utf-8"}}; + filter->encodeHeaders(response_headers, false); + filter->encodeData(data, true); + + EXPECT_EQ(122880, stats.counter("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(data.length(), stats.counter("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); + } +} +BENCHMARK(FilterCompress); + +} // namespace Compressors +} // namespace Common +} // namespace HttpFilters +} // namespace Extensions +} // namespace Envoy + +// Boilerplate main(). +int main(int argc, char** argv) { + benchmark::Initialize(&argc, argv); + + if (benchmark::ReportUnrecognizedArguments(argc, argv)) { + return 1; + } + benchmark::RunSpecifiedBenchmarks(); +} From 25524ce8134613b57ea9af2e4efbd2b9812bf7c3 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Fri, 20 Mar 2020 12:04:09 -0300 Subject: [PATCH 02/22] Fix format Signed-off-by: Raul Gutierrez Segales --- .../http/common/compressor/compressor_filter_speed_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 573ca5aada8a..cf5db67a74fd 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -1,6 +1,7 @@ #include "envoy/extensions/filters/http/compressor/v3/compressor.pb.h" #include "common/compressor/zlib_compressor_impl.h" + #include "extensions/filters/http/common/compressor/compressor.h" #include "test/mocks/http/mocks.h" @@ -8,7 +9,6 @@ #include "test/mocks/stats/mocks.h" #include "benchmark/benchmark.h" - #include "gmock/gmock.h" using testing::Return; From 8b8826548812d200535285727d0528ae2dc29c4d Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Fri, 20 Mar 2020 16:32:25 -0300 Subject: [PATCH 03/22] Replace boiler plate with macro Signed-off-by: Raul Gutierrez Segales --- .../common/compressor/compressor_filter_speed_test.cc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index cf5db67a74fd..1f5457bdf017 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -79,12 +79,4 @@ BENCHMARK(FilterCompress); } // namespace Extensions } // namespace Envoy -// Boilerplate main(). -int main(int argc, char** argv) { - benchmark::Initialize(&argc, argv); - - if (benchmark::ReportUnrecognizedArguments(argc, argv)) { - return 1; - } - benchmark::RunSpecifiedBenchmarks(); -} +BENCHMARK_MAIN(); From a2f322bc3707b3af52ea97d931102f5c4f75017c Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Sat, 21 Mar 2020 19:45:57 -0300 Subject: [PATCH 04/22] Test a broader combination of params Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 216 +++++++++++++++--- 1 file changed, 180 insertions(+), 36 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 1f5457bdf017..b0b9cc032bd5 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -24,54 +24,198 @@ class MockCompressorFilterConfig : public CompressorFilterConfig { MockCompressorFilterConfig( const envoy::extensions::filters::http::compressor::v3::Compressor& compressor, const std::string& stats_prefix, Stats::Scope& scope, Runtime::Loader& runtime, - const std::string& compressor_name) + const std::string& compressor_name, + Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy, int64_t window_bits, + uint64_t memory_level) : CompressorFilterConfig(compressor, stats_prefix + compressor_name + ".", scope, runtime, - compressor_name) {} + compressor_name), + level_(level), strategy_(strategy), window_bits_(window_bits), memory_level_(memory_level) { + } std::unique_ptr makeCompressor() override { auto compressor = std::make_unique(); - compressor->init(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9); + compressor->init(level_, strategy_, window_bits_, memory_level_); return compressor; } -}; - -// Measure basic compression. -static void FilterCompress(benchmark::State& state) { - for (auto _ : state) { - CompressorFilterConfigSharedPtr config; - Stats::IsolatedStoreImpl stats; - testing::NiceMock runtime; - envoy::extensions::filters::http::compressor::v3::Compressor compressor; - NiceMock decoder_callbacks; - Buffer::OwnedImpl data; - - TestUtility::feedBufferWithRandomCharacters(data, 122880); - config.reset(new MockCompressorFilterConfig(compressor, "test.", stats, runtime, "gzip")); - - ON_CALL(runtime.snapshot_, featureEnabled("test.filter_enabled", 100)) - .WillByDefault(Return(true)); - - auto filter = std::make_unique(config); - filter->setDecoderFilterCallbacks(decoder_callbacks); + Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level_; + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy_; + int64_t window_bits_; + uint64_t memory_level_; +}; - Http::TestRequestHeaderMapImpl headers = {{":method", "get"}, {"accept-encoding", "gzip"}}; - filter->decodeHeaders(headers, false); +static void compressWith(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy, + int64_t window_bits, uint64_t memory_level) { + Stats::IsolatedStoreImpl stats; + testing::NiceMock runtime; + envoy::extensions::filters::http::compressor::v3::Compressor compressor; + CompressorFilterConfigSharedPtr config = std::make_shared( + compressor, "test.", stats, runtime, "gzip", level, strategy, window_bits, memory_level); + Buffer::OwnedImpl data; + TestUtility::feedBufferWithRandomCharacters(data, 122880); + + ON_CALL(runtime.snapshot_, featureEnabled("test.filter_enabled", 100)) + .WillByDefault(Return(true)); + + auto filter = std::make_unique(config); + NiceMock decoder_callbacks; + filter->setDecoderFilterCallbacks(decoder_callbacks); + + Http::TestRequestHeaderMapImpl headers = {{":method", "get"}, {"accept-encoding", "gzip"}}; + filter->decodeHeaders(headers, false); + + Http::TestResponseHeaderMapImpl response_headers = { + {":method", "get"}, + {"content-length", "122880"}, + {"content-type", "application/json;charset=utf-8"}}; + filter->encodeHeaders(response_headers, false); + filter->encodeData(data, true); + + EXPECT_EQ(122880, stats.counter("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(data.length(), stats.counter("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); +} - Http::TestResponseHeaderMapImpl response_headers = { - {":method", "get"}, - {"content-length", "122880"}, - {"content-type", "application/json;charset=utf-8"}}; - filter->encodeHeaders(response_headers, false); - filter->encodeData(data, true); +/* +Running ./bazel-bin/test/extensions/filters/http/common/compressor/compressor_filter_speed_test +Run on (8 X 2300 MHz CPU s) +CPU Caches: +L1 Data 32K (x4) +L1 Instruction 32K (x4) +L2 Unified 262K (x4) +L3 Unified 6291K (x1) +Load Average: 1.82, 1.72, 1.74 +***WARNING*** Library was built as DEBUG. Timings may be affected. +------------------------------------------------------------ +Benchmark Time CPU Iterations +------------------------------------------------------------ +Compress/0 32358062 ns 32338955 ns 22 +Compress/0 31778249 ns 31761636 ns 22 +Compress/0 32731151 ns 32559273 ns 22 +Compress/0 32162121 ns 32094000 ns 22 +Compress/0 31838115 ns 31827091 ns 22 +Compress/0_mean 32173540 ns 32116191 ns 5 +Compress/0_median 32162121 ns 32094000 ns 5 +Compress/0_stddev 391750 ns 337537 ns 5 +Compress/1 25973147 ns 25959880 ns 25 +Compress/1 25694425 ns 25647480 ns 25 +Compress/1 25471416 ns 25428160 ns 25 +Compress/1 26939314 ns 26772800 ns 25 +Compress/1 26003532 ns 25902160 ns 25 +Compress/1_mean 26016367 ns 25942096 ns 5 +Compress/1_median 25973147 ns 25902160 ns 5 +Compress/1_stddev 560018 ns 510615 ns 5 +Compress/2 25198150 ns 25057345 ns 29 +Compress/2 24647784 ns 24569862 ns 29 +Compress/2 24051937 ns 24041379 ns 29 +Compress/2 24163591 ns 24124310 ns 29 +Compress/2 24264160 ns 24227103 ns 29 +Compress/2_mean 24465124 ns 24404000 ns 5 +Compress/2_median 24264160 ns 24227103 ns 5 +Compress/2_stddev 467098 ns 416948 ns 5 +Compress/3 33208504 ns 33158286 ns 21 +Compress/3 33045705 ns 32999524 ns 21 +Compress/3 32968974 ns 32942952 ns 21 +Compress/3 33151030 ns 33117810 ns 21 +Compress/3 33145734 ns 33080429 ns 21 +Compress/3_mean 33103989 ns 33059800 ns 5 +Compress/3_median 33145734 ns 33080429 ns 5 +Compress/3_stddev 95531 ns 87716 ns 5 +Compress/4 28887816 ns 28849560 ns 25 +Compress/4 28655442 ns 28631800 ns 25 +Compress/4 28357271 ns 28328480 ns 25 +Compress/4 28638322 ns 28609480 ns 25 +Compress/4 28472287 ns 28426120 ns 25 +Compress/4_mean 28602227 ns 28569088 ns 5 +Compress/4_median 28638322 ns 28609480 ns 5 +Compress/4_stddev 201608 ns 201594 ns 5 +Compress/5 34508363 ns 34294333 ns 21 +Compress/5 35917562 ns 35903190 ns 21 +Compress/5 36917294 ns 36859429 ns 21 +Compress/5 36721353 ns 36688286 ns 21 +Compress/5 36689713 ns 36636571 ns 21 +Compress/5_mean 36150857 ns 36076362 ns 5 +Compress/5_median 36689713 ns 36636571 ns 5 +Compress/5_stddev 994418 ns 1061496 ns 5 +Compress/6 33070916 ns 32995700 ns 20 +Compress/6 32491178 ns 32477400 ns 20 +Compress/6 32957946 ns 32878450 ns 20 +Compress/6 34205187 ns 34135600 ns 20 +Compress/6 33364057 ns 33343950 ns 20 +Compress/6_mean 33217857 ns 33166220 ns 5 +Compress/6_median 33070916 ns 32995700 ns 5 +Compress/6_stddev 635099 ns 624029 ns 5 +Compress/7 28629389 ns 28615250 ns 24 +Compress/7 29117726 ns 29049417 ns 24 +Compress/7 28957688 ns 28901708 ns 24 +Compress/7 28865586 ns 28819458 ns 24 +Compress/7 28954294 ns 28911250 ns 24 +Compress/7_mean 28904937 ns 28859417 ns 5 +Compress/7_median 28954294 ns 28901708 ns 5 +Compress/7_stddev 178867 ns 159522 ns 5 +Compress/8 34586577 ns 34565300 ns 20 +Compress/8 35307657 ns 35196450 ns 20 +Compress/8 35069861 ns 35007600 ns 20 +Compress/8 34858071 ns 34830350 ns 20 +Compress/8 34895321 ns 34816050 ns 20 +Compress/8_mean 34943497 ns 34883150 ns 5 +Compress/8_median 34895321 ns 34830350 ns 5 +Compress/8_stddev 267204 ns 235565 ns 5 +*/ + +static std::vector< + std::tuple> + compression_params = { + // Speed + Standard + Small Window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + + // Speed + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + + // Speed + Standard + Big window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, + + // Standard + Standard + Small window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + + // Standard + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + + // Standard + Standard + High window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, + + // Best + Standard + Small window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + + // Best + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + + // Best + Standard + High window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; + +static void Compress(benchmark::State& state) { + const auto idx = state.range(0); + const auto& params = compression_params[idx]; - EXPECT_EQ(122880, stats.counter("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(data.length(), stats.counter("test.gzip.total_compressed_bytes").value()); - EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); + for (auto _ : state) { + compressWith(std::get<0>(params), std::get<1>(params), std::get<2>(params), + std::get<3>(params)); } } -BENCHMARK(FilterCompress); +BENCHMARK(Compress)->DenseRange(0, 8, 1); +; } // namespace Compressors } // namespace Common From 4e38c4bb913487c75d9d5e56f4a003162330275c Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Sat, 21 Mar 2020 19:51:28 -0300 Subject: [PATCH 05/22] Trailing semi colon Signed-off-by: Raul Gutierrez Segales --- .../http/common/compressor/compressor_filter_speed_test.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index b0b9cc032bd5..d4887f369533 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -215,7 +215,6 @@ static void Compress(benchmark::State& state) { } } BENCHMARK(Compress)->DenseRange(0, 8, 1); -; } // namespace Compressors } // namespace Common From 36e85425a5f77ba26292b43456f40ac86cc481bc Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Sat, 21 Mar 2020 22:12:41 -0300 Subject: [PATCH 06/22] Fixes * spelling * const-ness Signed-off-by: Raul Gutierrez Segales --- .../common/compressor/compressor_filter_speed_test.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index d4887f369533..9981a9b79ac5 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -39,10 +39,10 @@ class MockCompressorFilterConfig : public CompressorFilterConfig { return compressor; } - Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level_; - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy_; - int64_t window_bits_; - uint64_t memory_level_; + const Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level_; + const Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy_; + const int64_t window_bits_; + const uint64_t memory_level_; }; static void compressWith(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level, @@ -78,6 +78,7 @@ static void compressWith(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); } +// SPELLCHECKER(off) /* Running ./bazel-bin/test/extensions/filters/http/common/compressor/compressor_filter_speed_test Run on (8 X 2300 MHz CPU s) @@ -164,6 +165,7 @@ Compress/8_mean 34943497 ns 34883150 ns 5 Compress/8_median 34895321 ns 34830350 ns 5 Compress/8_stddev 267204 ns 235565 ns 5 */ +// SPELLCHECKER(on) static std::vector< std::tuple Date: Mon, 23 Mar 2020 13:51:43 -0400 Subject: [PATCH 07/22] Test different chunk sizes (8k, 1k) Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 192 ++++++++---------- 1 file changed, 85 insertions(+), 107 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 9981a9b79ac5..47a0fd74b1e5 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -45,16 +45,22 @@ class MockCompressorFilterConfig : public CompressorFilterConfig { const uint64_t memory_level_; }; -static void compressWith(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel level, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy strategy, - int64_t window_bits, uint64_t memory_level) { +using CompressionParams = + std::tuple; + +static void compressWith(CompressionParams params, uint64_t payload_size = 122880, + uint64_t chunks = 1) { Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; envoy::extensions::filters::http::compressor::v3::Compressor compressor; + + const auto level = std::get<0>(params); + const auto strategy = std::get<1>(params); + const auto window_bits = std::get<2>(params); + const auto memory_level = std::get<3>(params); CompressorFilterConfigSharedPtr config = std::make_shared( compressor, "test.", stats, runtime, "gzip", level, strategy, window_bits, memory_level); - Buffer::OwnedImpl data; - TestUtility::feedBufferWithRandomCharacters(data, 122880); ON_CALL(runtime.snapshot_, featureEnabled("test.filter_enabled", 100)) .WillByDefault(Return(true)); @@ -71,10 +77,26 @@ static void compressWith(Envoy::Compressor::ZlibCompressorImpl::CompressionLevel {"content-length", "122880"}, {"content-type", "application/json;charset=utf-8"}}; filter->encodeHeaders(response_headers, false); - filter->encodeData(data, true); - EXPECT_EQ(122880, stats.counter("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(data.length(), stats.counter("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(0, 122880 % chunks); + const auto chunk_size = payload_size / chunks; + Buffer::OwnedImpl total_compressed_data; + for (auto i = 0u; i < chunks; ++i) { + Buffer::OwnedImpl data; + TestUtility::feedBufferWithRandomCharacters(data, chunk_size); + + if (i == (chunks - 1)) { + filter->encodeData(data, true); + } else { + filter->encodeData(data, false); + } + + total_compressed_data.add(data); + } + + EXPECT_EQ(payload_size, stats.counter("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(total_compressed_data.length(), + stats.counter("test.gzip.total_compressed_bytes").value()); EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); } @@ -92,22 +114,8 @@ Load Average: 1.82, 1.72, 1.74 ------------------------------------------------------------ Benchmark Time CPU Iterations ------------------------------------------------------------ -Compress/0 32358062 ns 32338955 ns 22 -Compress/0 31778249 ns 31761636 ns 22 -Compress/0 32731151 ns 32559273 ns 22 -Compress/0 32162121 ns 32094000 ns 22 -Compress/0 31838115 ns 31827091 ns 22 -Compress/0_mean 32173540 ns 32116191 ns 5 -Compress/0_median 32162121 ns 32094000 ns 5 -Compress/0_stddev 391750 ns 337537 ns 5 -Compress/1 25973147 ns 25959880 ns 25 -Compress/1 25694425 ns 25647480 ns 25 -Compress/1 25471416 ns 25428160 ns 25 -Compress/1 26939314 ns 26772800 ns 25 -Compress/1 26003532 ns 25902160 ns 25 -Compress/1_mean 26016367 ns 25942096 ns 5 -Compress/1_median 25973147 ns 25902160 ns 5 -Compress/1_stddev 560018 ns 510615 ns 5 +.... + Compress/2 25198150 ns 25057345 ns 29 Compress/2 24647784 ns 24569862 ns 29 Compress/2 24051937 ns 24041379 ns 29 @@ -116,107 +124,77 @@ Compress/2 24264160 ns 24227103 ns 29 Compress/2_mean 24465124 ns 24404000 ns 5 Compress/2_median 24264160 ns 24227103 ns 5 Compress/2_stddev 467098 ns 416948 ns 5 -Compress/3 33208504 ns 33158286 ns 21 -Compress/3 33045705 ns 32999524 ns 21 -Compress/3 32968974 ns 32942952 ns 21 -Compress/3 33151030 ns 33117810 ns 21 -Compress/3 33145734 ns 33080429 ns 21 -Compress/3_mean 33103989 ns 33059800 ns 5 -Compress/3_median 33145734 ns 33080429 ns 5 -Compress/3_stddev 95531 ns 87716 ns 5 -Compress/4 28887816 ns 28849560 ns 25 -Compress/4 28655442 ns 28631800 ns 25 -Compress/4 28357271 ns 28328480 ns 25 -Compress/4 28638322 ns 28609480 ns 25 -Compress/4 28472287 ns 28426120 ns 25 -Compress/4_mean 28602227 ns 28569088 ns 5 -Compress/4_median 28638322 ns 28609480 ns 5 -Compress/4_stddev 201608 ns 201594 ns 5 -Compress/5 34508363 ns 34294333 ns 21 -Compress/5 35917562 ns 35903190 ns 21 -Compress/5 36917294 ns 36859429 ns 21 -Compress/5 36721353 ns 36688286 ns 21 -Compress/5 36689713 ns 36636571 ns 21 -Compress/5_mean 36150857 ns 36076362 ns 5 -Compress/5_median 36689713 ns 36636571 ns 5 -Compress/5_stddev 994418 ns 1061496 ns 5 -Compress/6 33070916 ns 32995700 ns 20 -Compress/6 32491178 ns 32477400 ns 20 -Compress/6 32957946 ns 32878450 ns 20 -Compress/6 34205187 ns 34135600 ns 20 -Compress/6 33364057 ns 33343950 ns 20 -Compress/6_mean 33217857 ns 33166220 ns 5 -Compress/6_median 33070916 ns 32995700 ns 5 -Compress/6_stddev 635099 ns 624029 ns 5 -Compress/7 28629389 ns 28615250 ns 24 -Compress/7 29117726 ns 29049417 ns 24 -Compress/7 28957688 ns 28901708 ns 24 -Compress/7 28865586 ns 28819458 ns 24 -Compress/7 28954294 ns 28911250 ns 24 -Compress/7_mean 28904937 ns 28859417 ns 5 -Compress/7_median 28954294 ns 28901708 ns 5 -Compress/7_stddev 178867 ns 159522 ns 5 -Compress/8 34586577 ns 34565300 ns 20 -Compress/8 35307657 ns 35196450 ns 20 -Compress/8 35069861 ns 35007600 ns 20 -Compress/8 34858071 ns 34830350 ns 20 -Compress/8 34895321 ns 34816050 ns 20 -Compress/8_mean 34943497 ns 34883150 ns 5 -Compress/8_median 34895321 ns 34830350 ns 5 -Compress/8_stddev 267204 ns 235565 ns 5 + +.... */ // SPELLCHECKER(on) -static std::vector< - std::tuple> - compression_params = { - // Speed + Standard + Small Window + Low mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, +static std::vector compression_params = { + // Speed + Standard + Small Window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + + // Speed + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + + // Speed + Standard + Big window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, - // Speed + Standard + Med window + Med mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + // Standard + Standard + Small window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, - // Speed + Standard + Big window + High mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Speed, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, + // Standard + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, - // Standard + Standard + Small window + Low mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + // Standard + Standard + High window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, - // Standard + Standard + Med window + Med mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, + // Best + Standard + Small window + Low mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, - // Standard + Standard + High window + High mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Standard, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}, + // Best + Standard + Med window + Med mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, - // Best + Standard + Small window + Low mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 9, 1}, + // Best + Standard + High window + High mem level + {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, + Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; - // Best + Standard + Med window + Med mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 12, 5}, +static void CompressFull(benchmark::State& state) { + const auto idx = state.range(0); + const auto& params = compression_params[idx]; + + for (auto _ : state) { + compressWith(params); + } +} +BENCHMARK(CompressFull)->DenseRange(0, 8, 1); - // Best + Standard + High window + High mem level - {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, - Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; +static void CompressChunks8192(benchmark::State& state) { + const auto idx = state.range(0); + const auto& params = compression_params[idx]; + + for (auto _ : state) { + compressWith(params, 122880, 15); + } +} +BENCHMARK(CompressChunks8192)->DenseRange(0, 8, 1); -static void Compress(benchmark::State& state) { +static void CompressChunks1024(benchmark::State& state) { const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(std::get<0>(params), std::get<1>(params), std::get<2>(params), - std::get<3>(params)); + compressWith(params, 122880, 120); } } -BENCHMARK(Compress)->DenseRange(0, 8, 1); +BENCHMARK(CompressChunks1024)->DenseRange(0, 8, 1); } // namespace Compressors } // namespace Common From 826284b62a475dd18da69bface29173f18bb65d1 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 14:13:23 -0400 Subject: [PATCH 08/22] Add test for 4k Signed-off-by: Raul Gutierrez Segales --- .../common/compressor/compressor_filter_speed_test.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 47a0fd74b1e5..7a2049be4471 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -186,6 +186,16 @@ static void CompressChunks8192(benchmark::State& state) { } BENCHMARK(CompressChunks8192)->DenseRange(0, 8, 1); +static void CompressChunks4096(benchmark::State& state) { + const auto idx = state.range(0); + const auto& params = compression_params[idx]; + + for (auto _ : state) { + compressWith(params, 122880, 30); + } +} +BENCHMARK(CompressChunks4096)->DenseRange(0, 8, 1); + static void CompressChunks1024(benchmark::State& state) { const auto idx = state.range(0); const auto& params = compression_params[idx]; From db99a497812fe6a880c27d669c1128e62fa63dce Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 16:23:04 -0400 Subject: [PATCH 09/22] Reuse MockStreamDecoderFilterCallbacks Turns out, instantiating this Mock takes ~6ms (!!). Signed-off-by: Raul Gutierrez Segales --- .../compressor/compressor_filter_speed_test.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 7a2049be4471..fec0a2b28b6e 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -49,7 +49,8 @@ using CompressionParams = std::tuple; -static void compressWith(CompressionParams params, uint64_t payload_size = 122880, +static void compressWith(CompressionParams params, NiceMock& decoder_callbacks, + uint64_t payload_size = 122880, uint64_t chunks = 1) { Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; @@ -66,7 +67,6 @@ static void compressWith(CompressionParams params, uint64_t payload_size = 12288 .WillByDefault(Return(true)); auto filter = std::make_unique(config); - NiceMock decoder_callbacks; filter->setDecoderFilterCallbacks(decoder_callbacks); Http::TestRequestHeaderMapImpl headers = {{":method", "get"}, {"accept-encoding", "gzip"}}; @@ -167,41 +167,45 @@ static std::vector compression_params = { Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; static void CompressFull(benchmark::State& state) { + NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params); + compressWith(params, decoder_callbacks); } } BENCHMARK(CompressFull)->DenseRange(0, 8, 1); static void CompressChunks8192(benchmark::State& state) { + NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, 122880, 15); + compressWith(params, decoder_callbacks, 122880, 15); } } BENCHMARK(CompressChunks8192)->DenseRange(0, 8, 1); static void CompressChunks4096(benchmark::State& state) { + NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, 122880, 30); + compressWith(params, decoder_callbacks, 122880, 30); } } BENCHMARK(CompressChunks4096)->DenseRange(0, 8, 1); static void CompressChunks1024(benchmark::State& state) { + NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, 122880, 120); + compressWith(params, decoder_callbacks, 122880, 120); } } BENCHMARK(CompressChunks1024)->DenseRange(0, 8, 1); From 1c642a503d79b542707797afee99279db7804ded Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 16:24:17 -0400 Subject: [PATCH 10/22] Update benchmark output comment Signed-off-by: Raul Gutierrez Segales --- .../compressor/compressor_filter_speed_test.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index fec0a2b28b6e..905209a56529 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -116,14 +116,14 @@ Benchmark Time CPU Iterations ------------------------------------------------------------ .... -Compress/2 25198150 ns 25057345 ns 29 -Compress/2 24647784 ns 24569862 ns 29 -Compress/2 24051937 ns 24041379 ns 29 -Compress/2 24163591 ns 24124310 ns 29 -Compress/2 24264160 ns 24227103 ns 29 -Compress/2_mean 24465124 ns 24404000 ns 5 -Compress/2_median 24264160 ns 24227103 ns 5 -Compress/2_stddev 467098 ns 416948 ns 5 +CompressFull/2 18887569 ns 18783730 ns 37 +CompressFull/2 19108998 ns 19004000 ns 37 +CompressFull/2 18984786 ns 18897703 ns 37 +CompressFull/2 18617854 ns 18543027 ns 37 +CompressFull/2 18555731 ns 18485811 ns 37 +CompressFull/2_mean 18830988 ns 18742854 ns 5 +CompressFull/2_median 18887569 ns 18783730 ns 5 +CompressFull/2_stddev 237348 ns 223522 ns 5 .... */ From 6461dfa7770bd1a106c191ba7111f92fb3491eed Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 17:12:16 -0400 Subject: [PATCH 11/22] Move 8k chunks test to the top Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 905209a56529..239e5c7f8b46 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -166,17 +166,6 @@ static std::vector compression_params = { {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; -static void CompressFull(benchmark::State& state) { - NiceMock decoder_callbacks; - const auto idx = state.range(0); - const auto& params = compression_params[idx]; - - for (auto _ : state) { - compressWith(params, decoder_callbacks); - } -} -BENCHMARK(CompressFull)->DenseRange(0, 8, 1); - static void CompressChunks8192(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); @@ -210,6 +199,17 @@ static void CompressChunks1024(benchmark::State& state) { } BENCHMARK(CompressChunks1024)->DenseRange(0, 8, 1); +static void CompressFull(benchmark::State& state) { + NiceMock decoder_callbacks; + const auto idx = state.range(0); + const auto& params = compression_params[idx]; + + for (auto _ : state) { + compressWith(params, decoder_callbacks); + } +} +BENCHMARK(CompressFull)->DenseRange(0, 8, 1); + } // namespace Compressors } // namespace Common } // namespace HttpFilters From 93a566483878306c12c50c03edd1e5e67cf15912 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 17:13:31 -0400 Subject: [PATCH 12/22] Update comment with 8k result Signed-off-by: Raul Gutierrez Segales --- .../compressor/compressor_filter_speed_test.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 239e5c7f8b46..329f98f312ca 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -116,14 +116,14 @@ Benchmark Time CPU Iterations ------------------------------------------------------------ .... -CompressFull/2 18887569 ns 18783730 ns 37 -CompressFull/2 19108998 ns 19004000 ns 37 -CompressFull/2 18984786 ns 18897703 ns 37 -CompressFull/2 18617854 ns 18543027 ns 37 -CompressFull/2 18555731 ns 18485811 ns 37 -CompressFull/2_mean 18830988 ns 18742854 ns 5 -CompressFull/2_median 18887569 ns 18783730 ns 5 -CompressFull/2_stddev 237348 ns 223522 ns 5 +CompressChunks8192/2 14881254 ns 14861000 ns 46 +CompressChunks8192/2 14956146 ns 14907478 ns 46 +CompressChunks8192/2 15446768 ns 15396283 ns 46 +CompressChunks8192/2 15363712 ns 15323761 ns 46 +CompressChunks8192/2 15265096 ns 15213652 ns 46 +CompressChunks8192/2_mean 15182595 ns 15140435 ns 5 +CompressChunks8192/2_median 15265096 ns 15213652 ns 5 +CompressChunks8192/2_stddev 250740 ns 243300 ns 5 .... */ From 25628866b407cfae7920bfe368ce54fe146b437f Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Mon, 23 Mar 2020 19:41:38 -0400 Subject: [PATCH 13/22] Move test buffers creation out of hot path This brings time down to < 5ms (way better!). Turns we were using a lot of time calling TestUtility::feedBufferWithRandomCharacters(). Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 72 ++++++++++++------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 329f98f312ca..92d8cce8e74b 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -49,9 +49,25 @@ using CompressionParams = std::tuple; -static void compressWith(CompressionParams params, NiceMock& decoder_callbacks, - uint64_t payload_size = 122880, - uint64_t chunks = 1) { +static std::vector generateChunks(const uint64_t chunk_count, + const uint64_t chunk_size) { + std::vector vec; + vec.reserve(chunk_count); + + Buffer::OwnedImpl data; + TestUtility::feedBufferWithRandomCharacters(data, chunk_size); + + for (uint64_t i = 0; i < chunk_count; ++i) { + Buffer::OwnedImpl chunk; + chunk.add(data); + vec.push_back(std::move(chunk)); + } + + return vec; +} + +static void compressWith(std::vector chunks, CompressionParams params, + NiceMock& decoder_callbacks) { Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; envoy::extensions::filters::http::compressor::v3::Compressor compressor; @@ -78,25 +94,24 @@ static void compressWith(CompressionParams params, NiceMockencodeHeaders(response_headers, false); - EXPECT_EQ(0, 122880 % chunks); - const auto chunk_size = payload_size / chunks; - Buffer::OwnedImpl total_compressed_data; - for (auto i = 0u; i < chunks; ++i) { - Buffer::OwnedImpl data; - TestUtility::feedBufferWithRandomCharacters(data, chunk_size); + uint64_t idx = 0; + uint64_t total_uncompressed_bytes = 0; + uint64_t total_compressed_bytes = 0; + for (auto& data : chunks) { + total_uncompressed_bytes += data.length(); - if (i == (chunks - 1)) { + if (idx == (chunks.size() - 1)) { filter->encodeData(data, true); } else { filter->encodeData(data, false); } - total_compressed_data.add(data); + total_compressed_bytes += data.length(); + ++idx; } - EXPECT_EQ(payload_size, stats.counter("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(total_compressed_data.length(), - stats.counter("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(total_uncompressed_bytes, stats.counter("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(total_compressed_bytes, stats.counter("test.gzip.total_compressed_bytes").value()); EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); } @@ -116,15 +131,14 @@ Benchmark Time CPU Iterations ------------------------------------------------------------ .... -CompressChunks8192/2 14881254 ns 14861000 ns 46 -CompressChunks8192/2 14956146 ns 14907478 ns 46 -CompressChunks8192/2 15446768 ns 15396283 ns 46 -CompressChunks8192/2 15363712 ns 15323761 ns 46 -CompressChunks8192/2 15265096 ns 15213652 ns 46 -CompressChunks8192/2_mean 15182595 ns 15140435 ns 5 -CompressChunks8192/2_median 15265096 ns 15213652 ns 5 -CompressChunks8192/2_stddev 250740 ns 243300 ns 5 - +CompressChunks8192/2 2971499 ns 2967258 ns 248 +CompressChunks8192/2 3015538 ns 3008694 ns 248 +CompressChunks8192/2 2919954 ns 2907698 ns 248 +CompressChunks8192/2 2838894 ns 2831851 ns 248 +CompressChunks8192/2 2867619 ns 2865883 ns 248 +CompressChunks8192/2_mean 2922701 ns 2916277 ns 5 +CompressChunks8192/2_median 2919954 ns 2907698 ns 5 +CompressChunks8192/2_stddev 72569 ns 72251 ns 5 .... */ // SPELLCHECKER(on) @@ -172,7 +186,8 @@ static void CompressChunks8192(benchmark::State& state) { const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, decoder_callbacks, 122880, 15); + std::vector chunks = generateChunks(15, 8192); + compressWith(std::move(chunks), params, decoder_callbacks); } } BENCHMARK(CompressChunks8192)->DenseRange(0, 8, 1); @@ -183,7 +198,8 @@ static void CompressChunks4096(benchmark::State& state) { const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, decoder_callbacks, 122880, 30); + std::vector chunks = generateChunks(30, 4096); + compressWith(std::move(chunks), params, decoder_callbacks); } } BENCHMARK(CompressChunks4096)->DenseRange(0, 8, 1); @@ -194,7 +210,8 @@ static void CompressChunks1024(benchmark::State& state) { const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, decoder_callbacks, 122880, 120); + std::vector chunks = generateChunks(120, 1024); + compressWith(std::move(chunks), params, decoder_callbacks); } } BENCHMARK(CompressChunks1024)->DenseRange(0, 8, 1); @@ -205,7 +222,8 @@ static void CompressFull(benchmark::State& state) { const auto& params = compression_params[idx]; for (auto _ : state) { - compressWith(params, decoder_callbacks); + std::vector chunks = generateChunks(1, 122880); + compressWith(std::move(chunks), params, decoder_callbacks); } } BENCHMARK(CompressFull)->DenseRange(0, 8, 1); From 13fcda1080f7e9468d527f758ff31f108a0fedf7 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Thu, 2 Apr 2020 10:30:31 -0400 Subject: [PATCH 14/22] Properly move chunks Signed-off-by: Raul Gutierrez Segales --- .../http/common/compressor/compressor_filter_speed_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 92d8cce8e74b..c328727ef1f7 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -66,7 +66,7 @@ static std::vector generateChunks(const uint64_t chunk_count, return vec; } -static void compressWith(std::vector chunks, CompressionParams params, +static void compressWith(const std::vector&& chunks, CompressionParams params, NiceMock& decoder_callbacks) { Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; From a4c43fdee7319eed97f72143fbdd6333cca053b3 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Thu, 2 Apr 2020 10:44:28 -0400 Subject: [PATCH 15/22] Fixes Signed-off-by: Raul Gutierrez Segales --- .../common/compressor/compressor_filter_speed_test.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index c328727ef1f7..54603ada6ca1 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -66,7 +66,7 @@ static std::vector generateChunks(const uint64_t chunk_count, return vec; } -static void compressWith(const std::vector&& chunks, CompressionParams params, +static void compressWith(std::vector&& chunks, CompressionParams params, NiceMock& decoder_callbacks) { Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; @@ -110,9 +110,9 @@ static void compressWith(const std::vector&& chunks, Compress ++idx; } - EXPECT_EQ(total_uncompressed_bytes, stats.counter("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(total_compressed_bytes, stats.counter("test.gzip.total_compressed_bytes").value()); - EXPECT_EQ(1U, stats.counter("test.gzip.compressed").value()); + EXPECT_EQ(total_uncompressed_bytes, stats.counterFromString("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(total_compressed_bytes, stats.counterFromString("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(1U, stats.counterFromString("test.gzip.compressed").value()); } // SPELLCHECKER(off) From b459ca525ac7ba479ec89b44b8d22eb4840a4f9f Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Thu, 2 Apr 2020 11:06:29 -0400 Subject: [PATCH 16/22] Format Signed-off-by: Raul Gutierrez Segales --- .../http/common/compressor/compressor_filter_speed_test.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 54603ada6ca1..00b17773588d 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -110,8 +110,10 @@ static void compressWith(std::vector&& chunks, CompressionPar ++idx; } - EXPECT_EQ(total_uncompressed_bytes, stats.counterFromString("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(total_compressed_bytes, stats.counterFromString("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(total_uncompressed_bytes, + stats.counterFromString("test.gzip.total_uncompressed_bytes").value()); + EXPECT_EQ(total_compressed_bytes, + stats.counterFromString("test.gzip.total_compressed_bytes").value()); EXPECT_EQ(1U, stats.counterFromString("test.gzip.compressed").value()); } From d9c397e1ff11807a4198b58949e8dee352f8c1c9 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Thu, 2 Apr 2020 12:43:05 -0400 Subject: [PATCH 17/22] clang-tidy Signed-off-by: Raul Gutierrez Segales --- .../compressor/compressor_filter_speed_test.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 00b17773588d..e485363848cd 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -182,7 +182,7 @@ static std::vector compression_params = { {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; -static void CompressChunks8192(benchmark::State& state) { +static void compressChunks8192(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; @@ -192,9 +192,9 @@ static void CompressChunks8192(benchmark::State& state) { compressWith(std::move(chunks), params, decoder_callbacks); } } -BENCHMARK(CompressChunks8192)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks8192)->DenseRange(0, 8, 1); -static void CompressChunks4096(benchmark::State& state) { +static void compressChunks4096(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; @@ -204,9 +204,9 @@ static void CompressChunks4096(benchmark::State& state) { compressWith(std::move(chunks), params, decoder_callbacks); } } -BENCHMARK(CompressChunks4096)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks4096)->DenseRange(0, 8, 1); -static void CompressChunks1024(benchmark::State& state) { +static void compressChunks1024(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; @@ -216,9 +216,9 @@ static void CompressChunks1024(benchmark::State& state) { compressWith(std::move(chunks), params, decoder_callbacks); } } -BENCHMARK(CompressChunks1024)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks1024)->DenseRange(0, 8, 1); -static void CompressFull(benchmark::State& state) { +static void compressFull(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; @@ -228,7 +228,7 @@ static void CompressFull(benchmark::State& state) { compressWith(std::move(chunks), params, decoder_callbacks); } } -BENCHMARK(CompressFull)->DenseRange(0, 8, 1); +BENCHMARK(compressFull)->DenseRange(0, 8, 1); } // namespace Compressors } // namespace Common From 63f77b7bb9aab900681d5cd5234738f692a39a66 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Tue, 7 Apr 2020 16:29:53 -0400 Subject: [PATCH 18/22] Add test for 16kb sized chunk Per: https://github.com/envoyproxy/envoy/blob/master/source/common/network/raw_buffer_socket.cc#L21 Envoy reads 16kb at a time from upstream. Signed-off-by: Raul Gutierrez Segales --- .../compressor/compressor_filter_speed_test.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index e485363848cd..2d2c3f00e61c 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -182,6 +182,18 @@ static std::vector compression_params = { {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; +static void compressChunks16384(benchmark::State& state) { + NiceMock decoder_callbacks; + const auto idx = state.range(0); + const auto& params = compression_params[idx]; + + for (auto _ : state) { + std::vector chunks = generateChunks(7, 16384); + compressWith(std::move(chunks), params, decoder_callbacks); + } +} +BENCHMARK(compressChunks16384)->DenseRange(0, 8, 1); + static void compressChunks8192(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); From 23ec0503d90e6b64b57b9baac819cb14d4ff1483 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Wed, 8 Apr 2020 13:02:45 -0400 Subject: [PATCH 19/22] Use manual timings to skip random data generation Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 2d2c3f00e61c..3683668263d5 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -67,7 +67,9 @@ static std::vector generateChunks(const uint64_t chunk_count, } static void compressWith(std::vector&& chunks, CompressionParams params, - NiceMock& decoder_callbacks) { + NiceMock& decoder_callbacks, + benchmark::State& state) { + auto start = std::chrono::high_resolution_clock::now(); Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; envoy::extensions::filters::http::compressor::v3::Compressor compressor; @@ -115,6 +117,9 @@ static void compressWith(std::vector&& chunks, CompressionPar EXPECT_EQ(total_compressed_bytes, stats.counterFromString("test.gzip.total_compressed_bytes").value()); EXPECT_EQ(1U, stats.counterFromString("test.gzip.compressed").value()); + auto end = std::chrono::high_resolution_clock::now(); + const auto elapsed = std::chrono::duration_cast>(end - start); + state.SetIterationTime(elapsed.count()); } // SPELLCHECKER(off) @@ -182,65 +187,65 @@ static std::vector compression_params = { {Envoy::Compressor::ZlibCompressorImpl::CompressionLevel::Best, Envoy::Compressor::ZlibCompressorImpl::CompressionStrategy::Standard, 15, 9}}; -static void compressChunks16384(benchmark::State& state) { +static void compressFull(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - std::vector chunks = generateChunks(7, 16384); - compressWith(std::move(chunks), params, decoder_callbacks); + std::vector chunks = generateChunks(1, 122880); + compressWith(std::move(chunks), params, decoder_callbacks, state); } } -BENCHMARK(compressChunks16384)->DenseRange(0, 8, 1); +BENCHMARK(compressFull)->DenseRange(0, 8, 1)->UseManualTime()->Unit(benchmark::kMillisecond); -static void compressChunks8192(benchmark::State& state) { +static void compressChunks16384(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - std::vector chunks = generateChunks(15, 8192); - compressWith(std::move(chunks), params, decoder_callbacks); + std::vector chunks = generateChunks(7, 16384); + compressWith(std::move(chunks), params, decoder_callbacks, state); } } -BENCHMARK(compressChunks8192)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks16384)->DenseRange(0, 8, 1)->UseManualTime()->Unit(benchmark::kMillisecond); -static void compressChunks4096(benchmark::State& state) { +static void compressChunks8192(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - std::vector chunks = generateChunks(30, 4096); - compressWith(std::move(chunks), params, decoder_callbacks); + std::vector chunks = generateChunks(15, 8192); + compressWith(std::move(chunks), params, decoder_callbacks, state); } } -BENCHMARK(compressChunks4096)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks8192)->DenseRange(0, 8, 1)->UseManualTime()->Unit(benchmark::kMillisecond); -static void compressChunks1024(benchmark::State& state) { +static void compressChunks4096(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - std::vector chunks = generateChunks(120, 1024); - compressWith(std::move(chunks), params, decoder_callbacks); + std::vector chunks = generateChunks(30, 4096); + compressWith(std::move(chunks), params, decoder_callbacks, state); } } -BENCHMARK(compressChunks1024)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks4096)->DenseRange(0, 8, 1)->UseManualTime()->Unit(benchmark::kMillisecond); -static void compressFull(benchmark::State& state) { +static void compressChunks1024(benchmark::State& state) { NiceMock decoder_callbacks; const auto idx = state.range(0); const auto& params = compression_params[idx]; for (auto _ : state) { - std::vector chunks = generateChunks(1, 122880); - compressWith(std::move(chunks), params, decoder_callbacks); + std::vector chunks = generateChunks(120, 1024); + compressWith(std::move(chunks), params, decoder_callbacks, state); } } -BENCHMARK(compressFull)->DenseRange(0, 8, 1); +BENCHMARK(compressChunks1024)->DenseRange(0, 8, 1)->UseManualTime()->Unit(benchmark::kMillisecond); } // namespace Compressors } // namespace Common From 0c9cd0de217b18a292f3ac004bf81d61d4e3d690 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Wed, 8 Apr 2020 16:09:24 -0400 Subject: [PATCH 20/22] Save resuls, useful for debugging Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 3683668263d5..f51f40bee5fb 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -66,9 +66,14 @@ static std::vector generateChunks(const uint64_t chunk_count, return vec; } -static void compressWith(std::vector&& chunks, CompressionParams params, - NiceMock& decoder_callbacks, - benchmark::State& state) { +struct Result { + uint64_t total_uncompressed_bytes = 0; + uint64_t total_compressed_bytes = 0; +}; + +static Result compressWith(std::vector&& chunks, CompressionParams params, + NiceMock& decoder_callbacks, + benchmark::State& state) { auto start = std::chrono::high_resolution_clock::now(); Stats::IsolatedStoreImpl stats; testing::NiceMock runtime; @@ -97,10 +102,9 @@ static void compressWith(std::vector&& chunks, CompressionPar filter->encodeHeaders(response_headers, false); uint64_t idx = 0; - uint64_t total_uncompressed_bytes = 0; - uint64_t total_compressed_bytes = 0; + Result res; for (auto& data : chunks) { - total_uncompressed_bytes += data.length(); + res.total_uncompressed_bytes += data.length(); if (idx == (chunks.size() - 1)) { filter->encodeData(data, true); @@ -108,18 +112,21 @@ static void compressWith(std::vector&& chunks, CompressionPar filter->encodeData(data, false); } - total_compressed_bytes += data.length(); + res.total_compressed_bytes += data.length(); ++idx; } - EXPECT_EQ(total_uncompressed_bytes, + EXPECT_EQ(res.total_uncompressed_bytes, stats.counterFromString("test.gzip.total_uncompressed_bytes").value()); - EXPECT_EQ(total_compressed_bytes, + EXPECT_EQ(res.total_compressed_bytes, stats.counterFromString("test.gzip.total_compressed_bytes").value()); + EXPECT_EQ(1U, stats.counterFromString("test.gzip.compressed").value()); auto end = std::chrono::high_resolution_clock::now(); const auto elapsed = std::chrono::duration_cast>(end - start); state.SetIterationTime(elapsed.count()); + + return res; } // SPELLCHECKER(off) From 7b5a38ae41afdda2d7f24cf0e5ea3662aa5739c2 Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Tue, 14 Apr 2020 10:23:33 -0400 Subject: [PATCH 21/22] Use the same input for all tests This actually makes the difference between different chunk size mostly dissapear. I suspect the previous differences were due to chunks being the same, since the seed for the random data isn't changing. Signed-off-by: Raul Gutierrez Segales --- .../compressor_filter_speed_test.cc | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index f51f40bee5fb..528c69673b2f 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -49,18 +49,33 @@ using CompressionParams = std::tuple; +static constexpr uint64_t TestDataSize = 122880; + +Buffer::OwnedImpl generateTestData() { + Buffer::OwnedImpl data; + TestUtility::feedBufferWithRandomCharacters(data, TestDataSize); + return data; +} + +const Buffer::OwnedImpl& testData() { CONSTRUCT_ON_FIRST_USE(Buffer::OwnedImpl, generateTestData()); } + static std::vector generateChunks(const uint64_t chunk_count, const uint64_t chunk_size) { std::vector vec; vec.reserve(chunk_count); - Buffer::OwnedImpl data; - TestUtility::feedBufferWithRandomCharacters(data, chunk_size); + const auto& test_data = testData(); + uint64_t added = 0; for (uint64_t i = 0; i < chunk_count; ++i) { Buffer::OwnedImpl chunk; - chunk.add(data); + std::unique_ptr data(new char[chunk_size]); + + test_data.copyOut(added, chunk_size, data.get()); + chunk.add(absl::string_view(data.get(), chunk_size)); vec.push_back(std::move(chunk)); + + added += chunk_size; } return vec; @@ -144,15 +159,30 @@ Load Average: 1.82, 1.72, 1.74 Benchmark Time CPU Iterations ------------------------------------------------------------ .... - -CompressChunks8192/2 2971499 ns 2967258 ns 248 -CompressChunks8192/2 3015538 ns 3008694 ns 248 -CompressChunks8192/2 2919954 ns 2907698 ns 248 -CompressChunks8192/2 2838894 ns 2831851 ns 248 -CompressChunks8192/2 2867619 ns 2865883 ns 248 -CompressChunks8192/2_mean 2922701 ns 2916277 ns 5 -CompressChunks8192/2_median 2919954 ns 2907698 ns 5 -CompressChunks8192/2_stddev 72569 ns 72251 ns 5 +compressFull/0/manual_time 14.1 ms 14.3 ms 48 +compressFull/1/manual_time 7.06 ms 7.22 ms 104 +compressFull/2/manual_time 5.17 ms 5.33 ms 123 +compressFull/3/manual_time 15.4 ms 15.5 ms 45 +compressFull/4/manual_time 10.1 ms 10.3 ms 69 +compressFull/5/manual_time 15.8 ms 16.0 ms 40 +compressFull/6/manual_time 15.3 ms 15.5 ms 42 +compressFull/7/manual_time 9.91 ms 10.1 ms 71 +compressFull/8/manual_time 15.8 ms 16.0 ms 45 +compressChunks16384/0/manual_time 13.4 ms 13.5 ms 52 +compressChunks16384/1/manual_time 6.33 ms 6.48 ms 111 +compressChunks16384/2/manual_time 5.09 ms 5.27 ms 147 +compressChunks16384/3/manual_time 15.1 ms 15.3 ms 46 +compressChunks16384/4/manual_time 9.61 ms 9.78 ms 71 +compressChunks16384/5/manual_time 14.5 ms 14.6 ms 47 +compressChunks16384/6/manual_time 14.0 ms 14.1 ms 48 +compressChunks16384/7/manual_time 9.20 ms 9.36 ms 76 +compressChunks16384/8/manual_time 14.5 ms 14.6 ms 48 +compressChunks8192/0/manual_time 14.3 ms 14.5 ms 50 +compressChunks8192/1/manual_time 6.80 ms 6.96 ms 100 +compressChunks8192/2/manual_time 5.21 ms 5.36 ms 135 +compressChunks8192/3/manual_time 14.9 ms 15.0 ms 47 +compressChunks8192/4/manual_time 9.71 ms 9.87 ms 68 +compressChunks8192/5/manual_time 15.9 ms 16.1 ms 45 .... */ // SPELLCHECKER(on) From 4b712562a31a93e0af3097a65d8c584f130d3f1b Mon Sep 17 00:00:00 2001 From: Raul Gutierrez Segales Date: Wed, 15 Apr 2020 18:33:12 -0400 Subject: [PATCH 22/22] Fix format Signed-off-by: Raul Gutierrez Segales --- .../http/common/compressor/compressor_filter_speed_test.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc index 528c69673b2f..54103190e308 100644 --- a/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc +++ b/test/extensions/filters/http/common/compressor/compressor_filter_speed_test.cc @@ -57,7 +57,9 @@ Buffer::OwnedImpl generateTestData() { return data; } -const Buffer::OwnedImpl& testData() { CONSTRUCT_ON_FIRST_USE(Buffer::OwnedImpl, generateTestData()); } +const Buffer::OwnedImpl& testData() { + CONSTRUCT_ON_FIRST_USE(Buffer::OwnedImpl, generateTestData()); +} static std::vector generateChunks(const uint64_t chunk_count, const uint64_t chunk_size) {