-
Notifications
You must be signed in to change notification settings - Fork 37.7k
refactor: Improve CRollingBloomFilter::reset by using std::fill #16073
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: Improve CRollingBloomFilter::reset by using std::fill #16073
Conversation
I was going to use |
Seems okay to me, but why are we resetting a big rolling bloom filter this often? It may be better to use a generation counter. (this isn't a reason not to take this improvement, but maybe an area for bigger improvement). |
Any intuition why this is faster? Could add a trivial benchmark as first commit? |
@MarcoFalke one reason may be a specialized version of fill for uint64_t. Will add the benchmark. |
Well spotted! |
49f3560
to
8d774bb
Compare
@MarcoFalke benchmark added. |
IIRC |
@gmaxwell maybe open an issue and throw some suggestions? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK a47b560
Nice find.
What compiler and hardware are you using? utACK 8d774bb Couldn't find a performance difference on my system, but the code looks cleaner. Show signature and timestampSignature:
Timestamp of file with hash |
@MarcoFalke Apple LLVM version 10.0.1 (clang-1001.0.46.4) with |
Please mention that in the OP. Performance improvements when run with a sanitizer are completely meaningless to non-developers. |
Also, always benchmark in release mode. |
8d774bb
to
df9e15f
Compare
After all in release mode I have the same result as @MarcoFalke. Updated OP. |
re-utACK df9e15f Show signature and timestampSignature:
Timestamp of file with hash |
re-utACK df9e15f |
utACK d2dbc7d |
1 similar comment
utACK d2dbc7d |
…td::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
@sipa, @practicalswift Just FYI, you reviewed an incorrect commit and your ACKs haven't been recorded in the merge. |
Sort by date FTW. |
@MarcoFalke Oh sorry about that and thanks for the notification! |
…td::fill Summary: df9e15f092c18a8047f09307576c2b77b9c8d01c refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7da26e1ca40200521c05a0b1ca75578acd2 bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f092 jamesob: re-utACK bitcoin/bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a Backport of Core [[bitcoin/bitcoin#16073 | PR16073]] Test Plan: `ninja check bench-bitcoin` Reviewers: #bitcoin_abc, majcosta Reviewed By: #bitcoin_abc, majcosta Differential Revision: https://reviews.bitcoinabc.org/D6485
…td::fill Summary: df9e15f092c18a8047f09307576c2b77b9c8d01c refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7da26e1ca40200521c05a0b1ca75578acd2 bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f092 jamesob: re-utACK bitcoin/bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a Backport of Core [[bitcoin/bitcoin#16073 | PR16073]] Test Plan: `ninja check bench-bitcoin` Reviewers: #bitcoin_abc, majcosta Reviewed By: #bitcoin_abc, majcosta Differential Revision: https://reviews.bitcoinabc.org/D6485
Backport bloom filter improvements Cherry-picked from the following upstream PRs: - bitcoin/bitcoin#7113 - bitcoin/bitcoin#7818 - Only the second commit (to resolve conflicts). - bitcoin/bitcoin#7934 - bitcoin/bitcoin#8655 - Partial backport to help resolve conflicts. - bitcoin/bitcoin#9060 - bitcoin/bitcoin#9223 - bitcoin/bitcoin#9644 - Partial backport to help resolve conflicts. - bitcoin/bitcoin#9916 - bitcoin/bitcoin#9750 - bitcoin/bitcoin#13176 - bitcoin/bitcoin#13948 - bitcoin/bitcoin#16073 - bitcoin/bitcoin#18670 - bitcoin/bitcoin#18806 - Reveals upstream's covert fix for CVE-2013-5700. - bitcoin/bitcoin#19968
Backport bloom filter improvements Cherry-picked from the following upstream PRs: - bitcoin/bitcoin#7113 - bitcoin/bitcoin#7818 - Only the second commit (to resolve conflicts). - bitcoin/bitcoin#7934 - bitcoin/bitcoin#8655 - Partial backport to help resolve conflicts. - bitcoin/bitcoin#9060 - bitcoin/bitcoin#9223 - bitcoin/bitcoin#9644 - Partial backport to help resolve conflicts. - bitcoin/bitcoin#9916 - bitcoin/bitcoin#9750 - bitcoin/bitcoin#13176 - bitcoin/bitcoin#13948 - bitcoin/bitcoin#16073 - bitcoin/bitcoin#18670 - bitcoin/bitcoin#18806 - Reveals upstream's covert fix for CVE-2013-5700. - bitcoin/bitcoin#19968
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
…using std::fill df9e15f refactor: Improve CRollingBloomFilter::reset by using std::fill (João Barbosa) d2dbc7d bench: Add benchmark for CRollingBloomFilter::reset (João Barbosa) Pull request description: Cleaner code. Also improves performance with `--enable-debug` (which is meaningless to non-developers). Before: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 19.3008, 0.0254917, 0.0259195, 0.0257395 ``` After: ``` # Benchmark, evals, iterations, total, min, max, median RollingBloomReset, 5, 150, 5.43269, 0.00720651, 0.00729697, 0.00724854 ``` ACKs for commit df9e15: MarcoFalke: re-utACK df9e15f jamesob: re-utACK bitcoin@df9e15f Tree-SHA512: 22038411dfd41afad77b17a3da9ee04476ffbd4d215dcf47bdd9f14588759bc328a55d958dcebc2036b52ce4c56f79b1284eae11e56ddfaf21f0b2ee1c6a914a
Cleaner code. Also improves performance with
--enable-debug
(which is meaningless to non-developers).Before:
After: