Skip to content

Commit 35117be

Browse files
committed
refactor: enhance readability of MKTree and MKMap benchmarks
1 parent 8f29cba commit 35117be

File tree

3 files changed

+40
-37
lines changed

3 files changed

+40
-37
lines changed

mithril-common/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ crate-type = ["lib", "cdylib", "staticlib"]
1515
[[bench]]
1616
name = "digester"
1717
harness = false
18-
required-features = ["full"]
18+
required-features = ["fs"]
1919

2020
[[bench]]
2121
name = "merkle_tree"
@@ -100,7 +100,7 @@ reqwest = { version = "0.11.23", features = ["json"] }
100100
slog-async = "2.8.0"
101101
slog-scope = "4.4.0"
102102
slog-term = "2.9.0"
103-
tokio = { version = "1.35.1", features = ["macros", "time"] }
103+
tokio = { version = "1.35.1", features = ["macros", "rt-multi-thread", "time"] }
104104

105105
[build-dependencies]
106106
mithril-build-script = { path = "../internal/mithril-build-script", version = "=0.1.3" }

mithril-common/benches/merkle_map.rs

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use mithril_common::{
66
entities::BlockRange,
77
};
88

9+
// Shortcuts for magnitudes: K for thousand, M for million, B for billion
910
const K: u64 = 1_000;
1011
const M: u64 = 1_000 * K;
1112
const B: u64 = 1_000 * M;
@@ -31,16 +32,16 @@ fn generate_block_ranges_nodes_iterator(
3132
block_range_length: u64,
3233
max_uncompressed_block_ranges: u64,
3334
) -> impl Iterator<Item = (BlockRange, MKMapNode<BlockRange>)> {
34-
let total_block_ranges =
35-
total_transactions / (total_transactions_per_block * block_range_length);
35+
let total_transactions_per_block_range = total_transactions_per_block * block_range_length;
36+
let total_block_ranges = total_transactions / total_transactions_per_block_range;
3637
assert!(
3738
total_block_ranges > 0,
3839
"total_block_ranges should be strictly greater than 0"
3940
);
4041
(0..total_block_ranges).map(move |block_range_index| {
4142
let block_range = BlockRange::new(
42-
block_range_index * total_transactions_per_block * block_range_length,
43-
(block_range_index + 1) * total_transactions_per_block * block_range_length,
43+
block_range_index * total_transactions_per_block_range,
44+
(block_range_index + 1) * total_transactions_per_block_range,
4445
);
4546
let mk_map_node = if block_range_index < max_uncompressed_block_ranges {
4647
let leaves = <Range<u64> as Clone>::clone(&block_range)
@@ -71,36 +72,35 @@ fn generate_merkle_map_compressed(
7172
fn generate_merkle_map_root(
7273
block_ranges_nodes_iterator: impl Iterator<Item = (BlockRange, MKMapNode<BlockRange>)>,
7374
mk_map_compressed: &MKMap<BlockRange, MKMapNode<BlockRange>>,
74-
) -> MKMapProof<BlockRange> {
75-
let (mk_map_key_to_prove, mk_map_node_to_prove) =
76-
&block_ranges_nodes_iterator.take(1).collect::<Vec<_>>()[0];
77-
let mktree_to_prove = if let MKMapNode::Tree(mktree_to_prove) = mk_map_node_to_prove {
78-
mktree_to_prove
79-
} else {
80-
panic!("Expected MKMapNode::Tree");
81-
};
82-
let leaves_to_prove = mktree_to_prove
83-
.leaves()
84-
.into_iter()
85-
.take(1)
86-
.collect::<Vec<_>>();
87-
let mut mk_map_compressed = mk_map_compressed.clone();
88-
mk_map_compressed
89-
.insert(
90-
mk_map_key_to_prove.to_owned(),
91-
mk_map_node_to_prove.to_owned(),
92-
)
93-
.unwrap();
94-
mk_map_compressed.compute_proof(&leaves_to_prove).unwrap()
75+
) -> MKMapNode<BlockRange> {
76+
let total_full_mk_tree = 1;
77+
let (mk_map, _) = generate_merkle_map(
78+
block_ranges_nodes_iterator,
79+
mk_map_compressed,
80+
total_full_mk_tree,
81+
);
82+
83+
mk_map.compute_root().unwrap().into()
9584
}
9685

9786
fn generate_merkle_map_proof(
9887
block_ranges_nodes_iterator: impl Iterator<Item = (BlockRange, MKMapNode<BlockRange>)>,
9988
mk_map_compressed: &MKMap<BlockRange, MKMapNode<BlockRange>>,
10089
total_proofs: u64,
10190
) -> MKMapProof<BlockRange> {
91+
let (mk_map, leaves_to_prove_all) =
92+
generate_merkle_map(block_ranges_nodes_iterator, mk_map_compressed, total_proofs);
93+
94+
mk_map.compute_proof(&leaves_to_prove_all).unwrap()
95+
}
96+
97+
fn generate_merkle_map(
98+
block_ranges_nodes_iterator: impl Iterator<Item = (BlockRange, MKMapNode<BlockRange>)>,
99+
mk_map_compressed: &MKMap<BlockRange, MKMapNode<BlockRange>>,
100+
total_proofs: u64,
101+
) -> (MKMap<BlockRange, MKMapNode<BlockRange>>, Vec<MKTreeNode>) {
102102
let mut leaves_to_prove_all: Vec<MKTreeNode> = vec![];
103-
let mut mk_map_compressed = mk_map_compressed.clone();
103+
let mut mk_map = mk_map_compressed.clone();
104104
for (mk_map_key_to_prove, mk_map_node_to_prove) in &block_ranges_nodes_iterator
105105
.take(total_proofs as usize)
106106
.collect::<Vec<_>>()
@@ -116,16 +116,15 @@ fn generate_merkle_map_proof(
116116
.take(1)
117117
.collect::<Vec<_>>();
118118
leaves_to_prove_all.extend(leaves_to_prove);
119-
mk_map_compressed
119+
mk_map
120120
.insert(
121121
mk_map_key_to_prove.to_owned(),
122122
mk_map_node_to_prove.to_owned(),
123123
)
124124
.unwrap();
125125
}
126-
mk_map_compressed
127-
.compute_proof(&leaves_to_prove_all)
128-
.unwrap()
126+
127+
(mk_map, leaves_to_prove_all)
129128
}
130129

131130
fn create_merkle_map_root_benches(c: &mut Criterion) {
@@ -161,7 +160,7 @@ fn create_merkle_map_root_benches(c: &mut Criterion) {
161160

162161
fn create_merkle_map_proof_benches(c: &mut Criterion) {
163162
let mut group = c.benchmark_group(format!(
164-
"create_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH})"
163+
"create_merkle_map_proof(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH})"
165164
));
166165
for total_leaves in TOTAL_TRANSACTIONS_BENCHES.iter() {
167166
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator(
@@ -197,14 +196,14 @@ fn create_merkle_map_proof_benches(c: &mut Criterion) {
197196

198197
fn verify_merkle_map_proof_benches(c: &mut Criterion) {
199198
let mut group = c.benchmark_group(format!(
200-
"verify_merkle_map_proof_(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH})"
199+
"verify_merkle_map_proof(blocks_ranges_length={BLOCK_RANGE_LENGTH_BENCH},txs_per_block={TOTAL_TRANSACTIONS_PER_BLOCK},txs_per_proof={MAX_TRANSACTIONS_PER_PROOF_BENCH})"
201200
));
202201
for total_leaves in TOTAL_TRANSACTIONS_BENCHES.iter() {
203202
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator(
204203
*total_leaves,
205204
TOTAL_TRANSACTIONS_PER_BLOCK,
206205
BLOCK_RANGE_LENGTH_BENCH,
207-
1,
206+
MAX_TRANSACTIONS_PER_PROOF_BENCH,
208207
);
209208
let mk_map_compressed = generate_merkle_map_compressed(mk_trees_by_block_range_iterator);
210209
let mk_trees_by_block_range_iterator = generate_block_ranges_nodes_iterator(
@@ -232,7 +231,7 @@ fn verify_merkle_map_proof_benches(c: &mut Criterion) {
232231

233232
criterion_group!(
234233
name = benches;
235-
config = Criterion::default().sample_size(10);
234+
config = Criterion::default().sample_size(100);
236235
targets =
237236
create_merkle_map_root_benches,
238237
create_merkle_map_proof_benches,

mithril-common/benches/merkle_tree.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
22
use mithril_common::crypto_helper::{MKTree, MKTreeNode};
33

4+
// Shortcuts for magnitudes: K for thousand, M for million
45
const K: usize = 1_000;
56
const M: usize = 1_000 * K;
67
const TOTAL_LEAVES_BENCHES: &[usize] = &[K, 10 * K, 100 * K, M, 10 * M];
@@ -70,6 +71,9 @@ fn verify_merkle_tree_proof_benches(c: &mut Criterion) {
7071
criterion_group!(
7172
name=benches;
7273
config = Criterion::default().sample_size(10);
73-
targets=create_merkle_tree_root_benches,create_merkle_tree_proof_benches,verify_merkle_tree_proof_benches
74+
targets=
75+
create_merkle_tree_root_benches,
76+
create_merkle_tree_proof_benches,
77+
verify_merkle_tree_proof_benches
7478
);
7579
criterion_main!(benches);

0 commit comments

Comments
 (0)