From c442de66a23b7d2d6d769a5944235bf410167ba3 Mon Sep 17 00:00:00 2001 From: random-zebra Date: Sat, 16 Jan 2021 21:15:39 +0100 Subject: [PATCH 1/3] [Tests] Add benchmark for deserialize and accept block --- src/Makefile.bench.include | 22 ++++++++++++-- src/bench/checkblock.cpp | 51 ++++++++++++++++++++++++++++++++ src/bench/data/block2680960.raw | Bin 0 -> 1003 bytes 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 src/bench/checkblock.cpp create mode 100644 src/bench/data/block2680960.raw diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 480aa5c8d92c..52c38bc5fe4a 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -2,11 +2,16 @@ bin_PROGRAMS += bench/bench_pivx BENCH_SRCDIR = bench BENCH_BINARY = bench/bench_pivx$(EXEEXT) +RAW_TEST_FILES = \ + bench/data/block2680960.raw + +GENERATED_TEST_FILES = $(RAW_TEST_FILES:.raw=.raw.h) bench_bench_pivx_SOURCES = \ bench/bench_pivx.cpp \ bench/bench.cpp \ bench/bench.h \ + bench/checkblock.cpp \ bench/Examples.cpp \ bench/base58.cpp \ bench/checkqueue.cpp \ @@ -15,6 +20,8 @@ bench_bench_pivx_SOURCES = \ bench/perf.h \ bench/prevector.cpp +nodist_bench_bench_pivx_SOURCES = $(GENERATED_TEST_FILES) + bench_bench_pivx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/ bench_bench_pivx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) bench_bench_pivx_LDADD = \ @@ -41,15 +48,24 @@ endif bench_bench_pivx_LDADD += $(LIBBITCOIN_CONSENSUS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) bench_bench_pivx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) - -CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno +# !TODO: .raw.h generated test files are not removed with make clean +CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno $(GENERATED_TEST_FILES) CLEANFILES += $(CLEAN_BITCOIN_BENCH) +bench/checkblock.cpp: bench/data/block2680960.raw.h + bitcoin_bench: $(BENCH_BINARY) bench: $(BENCH_BINARY) FORCE $(BENCH_BINARY) bitcoin_bench_clean : FORCE - rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_pivx_OBJECTS) $(BENCH_BINARY) \ No newline at end of file + rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_pivx_OBJECTS) $(BENCH_BINARY) + +%.raw.h: %.raw + @$(MKDIR_P) $(@D) + @echo "static unsigned const char $(*F)[] = {" >> $@ + @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@ + @echo "};" >> $@ + @echo "Generated $@" \ No newline at end of file diff --git a/src/bench/checkblock.cpp b/src/bench/checkblock.cpp new file mode 100644 index 000000000000..393c09c7e338 --- /dev/null +++ b/src/bench/checkblock.cpp @@ -0,0 +1,51 @@ +// Copyright (c) 2016 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "bench.h" + +#include "validation.h" + +namespace block_bench { +#include "bench/data/block2680960.raw.h" +} + +// These are the two major time-sinks which happen after we have fully received +// a block off the wire, but before we can relay the block on to peers using +// compact block relay. + +static void DeserializeBlockTest(benchmark::State& state) +{ + CDataStream stream((const char*)block_bench::block2680960, + (const char*)&block_bench::block2680960[sizeof(block_bench::block2680960)], + SER_NETWORK, PROTOCOL_VERSION); + char a; + stream.write(&a, 1); // Prevent compaction + + while (state.KeepRunning()) { + CBlock block; + stream >> block; + assert(stream.Rewind(sizeof(block_bench::block2680960))); + } +} + +static void DeserializeAndCheckBlockTest(benchmark::State& state) +{ + CDataStream stream((const char*)block_bench::block2680960, + (const char*)&block_bench::block2680960[sizeof(block_bench::block2680960)], + SER_NETWORK, PROTOCOL_VERSION); + char a; + stream.write(&a, 1); // Prevent compaction + + while (state.KeepRunning()) { + CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here + stream >> block; + assert(stream.Rewind(sizeof(block_bench::block2680960))); + + CValidationState state; + assert(CheckBlock(block, state)); + } +} + +BENCHMARK(DeserializeBlockTest); +BENCHMARK(DeserializeAndCheckBlockTest); diff --git a/src/bench/data/block2680960.raw b/src/bench/data/block2680960.raw new file mode 100644 index 0000000000000000000000000000000000000000..fce0f1f2b453a3d8808079de0205d1a0901c288b GIT binary patch literal 1003 zcmZQ)U|?X|VPsJHd2VFj3W2w_qPv7OTXzSu95tx0{$=nmJMa4znZRSd8Y?b_8Z>*w zO=J?d#GG@emn(W+X86ezrI-6}B&Z!?O0bLIl?EEcz{&_DKo~Fh4+N~t4KFkpKrB?{ zU;~;A=WqEe@zF7*asp?0{JBPF5q}ZWRE6~Fm-nUiCd9u7Df09%aAi_tn6N={%PLR5 z>koYbea^H-7b+i#FRE2%OAkA?J}t!Djf&@M)-Wu7Cm6%AvS2T*5BN7l zTKs=xxa77dqX>1`7q8>vS6`eM&=R6};oIwfc1%Ep*$^*XlwqEelXf-ca@L9StoG*& zu11?&c-~(o?_Qd1{&u^45R#wmx0{ zj8T#KUb%~M^W(`+0vqMi;te)jJe0g)CGTO|Oer;q`oi_a4d9ShnuT!xx%I{OW@cS& zfBqvhN6FB;-{vLv6(si?bRGDqztCLuukpZ7gaKSap%G@WhRAqp5*U)#2(CEx`-|Q$azKK zIf*OO(~YwpA8sxWnCSfbAkh8SthREUTYR|t=ANXPV)k!lQ{amljYVew07MRNc5?}o>>9_02}ljziWzqM(JY?$YX&vEf4 zR_Zstsz!ai1ag0tyMYUnLjDHcrw4c(cJJGJdA_ZIz>lT%4J*De&v{+Tr@hvv^xhsO z1&3cRXRh7)-qB!*gXHfOj-e;S)_Fx8-~4&6ZU2(uZNLauWO7ONbZhz@^p$so*V^){ zx_p((Ki^yTS<2B+rv7()d}JMl^RKF3cxGa~#r>e!{k=EE^{-$0oAVapd^eDzlr@u{ z3%@AjzhOAj-N`Nd$gLN*x_hL27Va*$JO8#oQkO{~fz9)+?mw5wU&}Afa(LA6m~&?I S|CC*7N!OQt(adrAJOcnfa+<0D literal 0 HcmV?d00001 From 9170ac7b34d082440068c0d59edd8af4792c92e1 Mon Sep 17 00:00:00 2001 From: furszy Date: Mon, 18 Jan 2021 14:13:24 -0300 Subject: [PATCH 2/3] [Bench] fix missing dependencies libunivalue and libsapling Also fix checkblock test: add missing network params set. --- src/Makefile.bench.include | 7 +++---- src/bench/checkblock.cpp | 2 ++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 52c38bc5fe4a..4577e2d0ceee 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -26,6 +26,7 @@ bench_bench_pivx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) $ bench_bench_pivx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) bench_bench_pivx_LDADD = \ $(LIBBITCOIN_SERVER) \ + $(LIBBITCOIN_WALLET) \ $(LIBBITCOIN_COMMON) \ $(LIBBITCOIN_UNIVALUE) \ $(LIBBITCOIN_UTIL) \ @@ -33,7 +34,9 @@ bench_bench_pivx_LDADD = \ $(LIBLEVELDB) \ $(LIBMEMENV) \ $(LIBSECP256K1) \ + $(LIBUNIVALUE) \ $(LIBBITCOIN_ZEROCOIN) \ + $(LIBSAPLING) \ $(LIBRUSTZCASH) \ $(LIBZCASH_LIBS) @@ -41,10 +44,6 @@ if ENABLE_ZMQ bench_bench_pivx_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS) endif -if ENABLE_WALLET -bench_bench_pivx_LDADD += $(LIBBITCOIN_WALLET) -endif - bench_bench_pivx_LDADD += $(LIBBITCOIN_CONSENSUS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) bench_bench_pivx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) diff --git a/src/bench/checkblock.cpp b/src/bench/checkblock.cpp index 393c09c7e338..13f672bd21e7 100644 --- a/src/bench/checkblock.cpp +++ b/src/bench/checkblock.cpp @@ -37,6 +37,8 @@ static void DeserializeAndCheckBlockTest(benchmark::State& state) char a; stream.write(&a, 1); // Prevent compaction + SelectParams(CBaseChainParams::MAIN); + while (state.KeepRunning()) { CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here stream >> block; From 5bea77e6ddab2ceac9179b9d6b7031066da7bb64 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Sat, 12 Nov 2016 07:15:02 +0000 Subject: [PATCH 3/3] Bugfix: Correctly replace generated headers and fail cleanly --- src/Makefile.bench.include | 10 ++++++---- src/Makefile.test.include | 8 -------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 4577e2d0ceee..e55e80646146 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -64,7 +64,9 @@ bitcoin_bench_clean : FORCE %.raw.h: %.raw @$(MKDIR_P) $(@D) - @echo "static unsigned const char $(*F)[] = {" >> $@ - @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@ - @echo "};" >> $@ - @echo "Generated $@" \ No newline at end of file + @{ \ + echo "static unsigned const char $(*F)[] = {" && \ + $(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \ + echo "};"; \ + } > "$@.new" && mv -f "$@.new" "$@" + @echo "Generated $@" diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 152f6250fc78..8f17441f55dc 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -187,11 +187,3 @@ check-local: check-sapling check-standard echo "};};"; \ } > "$@.new" && mv -f "$@.new" "$@" @echo "Generated $@" - -%.raw.h: %.raw - @$(MKDIR_P) $(@D) - @echo "namespace alert_tests{" > $@ - @echo "static unsigned const char $(*F)[] = {" >> $@ - @$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@ - @echo "};};" >> $@ - @echo "Generated $@"