aboutsummaryrefslogtreecommitdiff
path: root/src/bench
diff options
context:
space:
mode:
authorCalvin Kim <calvin@kcalvinalvin.info>2022-05-22 14:17:15 +0900
committerCalvin Kim <calvin@kcalvinalvin.info>2022-05-22 14:17:15 +0900
commite734228d8585c0870c71ce8ba8c037f8cf8b249a (patch)
treeb0dd6a4d8cf9c031ab30134b234927ef313d23ae /src/bench
parentaee9a8140b3a58b744766f9e89572f1d953a808b (diff)
downloadbitcoin-e734228d8585c0870c71ce8ba8c037f8cf8b249a.tar.xz
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.
Diffstat (limited to 'src/bench')
-rw-r--r--src/bench/gcs_filter.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/bench/gcs_filter.cpp b/src/bench/gcs_filter.cpp
index 0b43652453..80babb213b 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<unsigned char>(i);
element[1] = static_cast<unsigned char>(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++;