From e734228d8585c0870c71ce8ba8c037f8cf8b249a Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Sun, 22 May 2022 14:17:15 +0900 Subject: [PATCH] Update GCSFilter benchmarks Element count used in the GCSFilter benchmarks are increased to 100,000 from 10,000. Testing the benchmarks with different element counts showed that a filter with 100,000 elements resulted in the same ns/op. This this a desirable thing to have as it allows us to reason about how long a single filter element takes to process, letting us easily calculate how long a filter with N elements (where N > 100,000) would take to process. GCSFilterConstruct benchmark is now called without batch. This makes intra-bench results more intuitive as all benchmarks are in ns/op instead of a custom unit. There are no downsides to this change as testing showed that there is no observable difference in error rates in the benchmarks when calling without batch. --- src/bench/gcs_filter.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bench/gcs_filter.cpp b/src/bench/gcs_filter.cpp index 0b436524530..80babb213b3 100644 --- a/src/bench/gcs_filter.cpp +++ b/src/bench/gcs_filter.cpp @@ -8,7 +8,12 @@ static const GCSFilter::ElementSet GenerateGCSTestElements() { GCSFilter::ElementSet elements; - for (int i = 0; i < 10000; ++i) { + + // Testing the benchmarks with different number of elements show that a filter + // with at least 100,000 elements results in benchmarks that have the same + // ns/op. This makes it easy to reason about how long (in nanoseconds) a single + // filter element takes to process. + for (int i = 0; i < 100000; ++i) { GCSFilter::Element element(32); element[0] = static_cast(i); element[1] = static_cast(i >> 8); @@ -35,7 +40,7 @@ static void GCSFilterConstruct(benchmark::Bench& bench) auto elements = GenerateGCSTestElements(); uint64_t siphash_k0 = 0; - bench.batch(elements.size()).unit("elem").run([&] { + bench.run([&]{ GCSFilter filter({siphash_k0, 0, BASIC_FILTER_P, BASIC_FILTER_M}, elements); siphash_k0++;