Skip to content

Commit

Permalink
Adds a bench for hash_account()
Browse files Browse the repository at this point in the history
  • Loading branch information
brooksprumo committed Mar 4, 2024
1 parent 3f9a7a5 commit 0bb8276
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions accounts-db/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ name = "solana_accounts_db"

[dev-dependencies]
assert_matches = { workspace = true }
criterion = { workspace = true }
ed25519-dalek = { workspace = true }
libsecp256k1 = { workspace = true }
memoffset = { workspace = true }
Expand All @@ -89,3 +90,7 @@ rustc_version = { workspace = true }

[features]
dev-context-only-utils = []

[[bench]]
name = "bench_hashing"
harness = false
43 changes: 43 additions & 0 deletions accounts-db/benches/bench_hashing.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use {
criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput},
solana_accounts_db::accounts_db::AccountsDb,
solana_sdk::{account::AccountSharedData, pubkey::Pubkey},
};

const KB: usize = 1024;
const MB: usize = KB * KB;

const DATA_SIZES: [usize; 6] = [
0, // the smallest account
165, // the size of an spl token account
200, // the size of a stake account
KB, // a medium sized account
MB, // a large sized account
10 * MB, // the largest account
];

/// The number of bytes of *non account data* that are also hashed as
/// part of computing an account's hash.
///
/// Ensure this constant stays in sync with the value of `META_SIZE` in
/// AccountsDb::hash_account_data().
const META_SIZE: usize = 81;

fn bench_hash_account(c: &mut Criterion) {
let lamports = 123_456_789;
let owner = Pubkey::default();
let address = Pubkey::default();

let mut group = c.benchmark_group("hash_account");
for data_size in DATA_SIZES {
let num_bytes = META_SIZE.checked_add(data_size).unwrap();
group.throughput(Throughput::Bytes(num_bytes as u64));
let account = AccountSharedData::new(lamports, data_size, &owner);
group.bench_function(BenchmarkId::new("data_size", data_size), |b| {
b.iter(|| AccountsDb::hash_account(&account, &address));
});
}
}

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

0 comments on commit 0bb8276

Please sign in to comment.