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

Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>
This commit is contained in:
Ragnar
2024-12-30 22:11:27 +01:00
committed by GitHub
parent 0b135a2670
commit 5629ba0bb1
4 changed files with 12 additions and 8 deletions

View File

@ -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()

View File

@ -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()

View File

@ -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()
}

View File

@ -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