bench: make ObfuscationBench more representative

A previous PR already solved the tiny byte-array-xors during serialization, so it makes sense to keep focusing on the performance of bigger continuous chunks.

This also renames the file from `xor` to `obfuscation` to enable scripted diff name unification later.

> C++ compiler .......................... GNU 14.2.0

|             ns/byte |              byte/s |    err% |        ins/byte |        cyc/byte |    IPC |       bra/byte |   miss% |     total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
|                0.84 |    1,184,138,235.64 |    0.0% |            9.01 |            3.03 |  2.971 |           1.00 |    0.1% |      5.50 | `ObfuscationBench`

> C++ compiler .......................... Clang 20.1.7

|             ns/byte |              byte/s |    err% |        ins/byte |        cyc/byte |    IPC |       bra/byte |   miss% |     total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
|                0.89 |    1,124,087,330.23 |    0.1% |            6.52 |            3.20 |  2.041 |           0.50 |    0.2% |      5.50 | `ObfuscationBench`
This commit is contained in:
Lőrinc
2024-12-06 16:18:03 +01:00
parent 618a30e326
commit 972697976c
2 changed files with 7 additions and 6 deletions

View File

@@ -35,6 +35,7 @@ add_executable(bench_bitcoin
mempool_eviction.cpp mempool_eviction.cpp
mempool_stress.cpp mempool_stress.cpp
merkle_root.cpp merkle_root.cpp
obfuscation.cpp
parse_hex.cpp parse_hex.cpp
peer_eviction.cpp peer_eviction.cpp
poly1305.cpp poly1305.cpp
@@ -51,7 +52,6 @@ add_executable(bench_bitcoin
txgraph.cpp txgraph.cpp
util_time.cpp util_time.cpp
verify_script.cpp verify_script.cpp
xor.cpp
) )
include(TargetDataSources) include(TargetDataSources)

View File

@@ -4,22 +4,23 @@
#include <bench/bench.h> #include <bench/bench.h>
#include <random.h> #include <random.h>
#include <span.h>
#include <streams.h> #include <streams.h>
#include <util/obfuscation.h> #include <util/obfuscation.h>
#include <cstddef> #include <cstddef>
#include <vector> #include <vector>
static void Xor(benchmark::Bench& bench) static void ObfuscationBench(benchmark::Bench& bench)
{ {
FastRandomContext frc{/*fDeterministic=*/true}; FastRandomContext frc{/*fDeterministic=*/true};
auto data{frc.randbytes<std::byte>(1024)}; auto data{frc.randbytes<std::byte>(1024)};
auto key{frc.randbytes<std::byte>(Obfuscation::KEY_SIZE)}; const auto key{frc.randbytes<Obfuscation::KEY_SIZE>()};
size_t offset{0};
bench.batch(data.size()).unit("byte").run([&] { bench.batch(data.size()).unit("byte").run([&] {
util::Xor(data, key); util::Xor(data, key, offset++); // mutated differently each time
ankerl::nanobench::doNotOptimizeAway(data);
}); });
} }
BENCHMARK(Xor, benchmark::PriorityLevel::HIGH); BENCHMARK(ObfuscationBench, benchmark::PriorityLevel::HIGH);