Skip to content

Commit

Permalink
Adds a new bench for accounts delta hash (anza-xyz#210)
Browse files Browse the repository at this point in the history
  • Loading branch information
brooksprumo authored and willhickey committed Mar 16, 2024
1 parent 5540809 commit 574c1ad
Showing 1 changed file with 46 additions and 4 deletions.
50 changes: 46 additions & 4 deletions accounts-db/benches/bench_hashing.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
use {
criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput},
solana_accounts_db::accounts_db::AccountsDb,
solana_sdk::{account::AccountSharedData, pubkey::Pubkey},
criterion::{criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion, Throughput},
rand::seq::SliceRandom,
solana_accounts_db::{
accounts_db::AccountsDb,
accounts_hash::{AccountHash, AccountsHasher},
},
solana_sdk::{account::AccountSharedData, hash::Hash, pubkey::Pubkey},
};

const KB: usize = 1024;
Expand Down Expand Up @@ -39,5 +43,43 @@ fn bench_hash_account(c: &mut Criterion) {
}
}

criterion_group!(benches, bench_hash_account,);
fn bench_accounts_delta_hash(c: &mut Criterion) {
const ACCOUNTS_COUNTS: [usize; 4] = [
1, // the smallest count; will bench overhead
100, // number of accounts written per slot on mnb (with *no* rent rewrites)
1_000, // number of accounts written slot on mnb (with rent rewrites)
10_000, // reasonable largest number of accounts written per slot
];

fn create_account_hashes(accounts_count: usize) -> Vec<(Pubkey, AccountHash)> {
let mut account_hashes: Vec<_> = std::iter::repeat_with(|| {
let address = Pubkey::new_unique();
let hash = AccountHash(Hash::new_unique());
(address, hash)
})
.take(accounts_count)
.collect();

// since the accounts delta hash needs to sort the accounts first, ensure we're not
// creating a pre-sorted vec.
let mut rng = rand::thread_rng();
account_hashes.shuffle(&mut rng);
account_hashes
}

let mut group = c.benchmark_group("accounts_delta_hash");
for accounts_count in ACCOUNTS_COUNTS {
group.throughput(Throughput::Elements(accounts_count as u64));
let account_hashes = create_account_hashes(accounts_count);
group.bench_function(BenchmarkId::new("accounts_count", accounts_count), |b| {
b.iter_batched(
|| account_hashes.clone(),
AccountsHasher::accumulate_account_hashes,
BatchSize::SmallInput,
);
});
}
}

criterion_group!(benches, bench_hash_account, bench_accounts_delta_hash);
criterion_main!(benches);

0 comments on commit 574c1ad

Please sign in to comment.