Skip to content
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

feat(bench): make benchmark inputs deterministic using fixed seed #13586

Merged
merged 11 commits into from
Dec 30, 2024
6 changes: 2 additions & 4 deletions crates/transaction-pool/benches/priority.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@ use reth_transaction_pool::{blob_tx_priority, fee_delta};
use std::hint::black_box;

fn generate_test_data_fee_delta() -> (u128, u128) {
let config = ProptestConfig::default();
let mut runner = TestRunner::new(config);
let mut runner = TestRunner::deterministic();
prop::arbitrary::any::<(u128, u128)>().new_tree(&mut runner).unwrap().current()
}

fn generate_test_data_priority() -> (u128, u128, u128, u128) {
let config = ProptestConfig::default();
let mut runner = TestRunner::new(config);
let mut runner = TestRunner::deterministic();
prop::arbitrary::any::<(u128, u128, u128, u128)>().new_tree(&mut runner).unwrap().current()
}

Expand Down
5 changes: 2 additions & 3 deletions crates/trie/sparse/benches/rlp_node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,12 @@ use reth_trie::Nibbles;
use reth_trie_sparse::RevealedSparseTrie;

fn update_rlp_node_level(c: &mut Criterion) {
let mut rng = generators::rng();

let mut rng = generators::rng_with_seed(&12345_u16.to_be_bytes());
let mut group = c.benchmark_group("update rlp node level");
group.sample_size(20);

for size in [100_000] {
let mut runner = TestRunner::new(ProptestConfig::default());
let mut runner = TestRunner::deterministic();
let state = proptest::collection::hash_map(any::<B256>(), any::<U256>(), size)
.new_tree(&mut runner)
.unwrap()
Expand Down
2 changes: 1 addition & 1 deletion crates/trie/sparse/benches/root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ fn calculate_root_from_leaves_repeated(c: &mut Criterion) {
}

fn generate_test_data(size: usize) -> B256HashMap<U256> {
let mut runner = TestRunner::new(ProptestConfig::default());
let mut runner = TestRunner::deterministic();
proptest::collection::hash_map(any::<B256>(), any::<U256>(), size)
.new_tree(&mut runner)
.unwrap()
Expand Down
2 changes: 1 addition & 1 deletion crates/trie/trie/benches/trie_root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ pub fn trie_root_benchmark(c: &mut Criterion) {

fn generate_test_data(size: usize) -> Vec<ReceiptWithBloom<Receipt>> {
prop::collection::vec(arb::<ReceiptWithBloom<Receipt>>(), size)
.new_tree(&mut TestRunner::new(ProptestConfig::default()))
.new_tree(&mut TestRunner::deterministic())
.unwrap()
.current()
}
Expand Down
11 changes: 8 additions & 3 deletions testing/testing-utils/src/generators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,19 @@ impl Default for BlockRangeParams {
/// If `SEED` is not set, a random seed is used.
pub fn rng() -> StdRng {
if let Ok(seed) = std::env::var("SEED") {
let mut hasher = DefaultHasher::new();
hasher.write(seed.as_bytes());
StdRng::seed_from_u64(hasher.finish())
rng_with_seed(seed.as_bytes())
} else {
StdRng::from_rng(thread_rng()).expect("could not build rng")
}
}

/// Returns a random number generator from a specific seed, as bytes.
pub fn rng_with_seed(seed: &[u8]) -> StdRng {
let mut hasher = DefaultHasher::new();
hasher.write(seed);
StdRng::seed_from_u64(hasher.finish())
}

/// Generates a range of random [`SealedHeader`]s.
///
/// The parent hash of the first header
Expand Down
Loading