streamline calculate_accounts_hash (#14980)

This commit is contained in:
Jeff Washington (jwash) 2021-02-02 10:58:19 -06:00 committed by GitHub
parent b57f33948d
commit 22800054e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 13 deletions

View File

@ -92,6 +92,8 @@ const CACHE_VIRTUAL_WRITE_VERSION: u64 = 0;
const CACHE_VIRTUAL_OFFSET: usize = 0;
const CACHE_VIRTUAL_STORED_SIZE: usize = 0;
const MERKLE_FANOUT: usize = 16;
type DashMapVersionHash = DashMap<Pubkey, (u64, Hash)>;
lazy_static! {
@ -3719,8 +3721,7 @@ impl AccountsDB {
}
let mut hash_time = Measure::start("hash");
let fanout = 16;
let res = Self::compute_merkle_root_and_capitalization(hashes, fanout);
let res = Self::compute_merkle_root_and_capitalization(hashes, MERKLE_FANOUT);
hash_time.stop();
(res, (sort_time, hash_time))
@ -3777,7 +3778,7 @@ impl AccountsDB {
.cloned()
.collect();
let mismatch_found = AtomicU64::new(0);
let hashes: Vec<(Pubkey, Hash, u64)> = {
let hashes: Vec<(Hash, u64)> = {
self.thread_pool_clean.install(|| {
keys.par_iter()
.filter_map(|pubkey| {
@ -3816,7 +3817,7 @@ impl AccountsDB {
}
}
Some((*pubkey, *loaded_hash, balance))
Some((*loaded_hash, balance))
})
} else {
None
@ -3838,17 +3839,14 @@ impl AccountsDB {
scan.stop();
let hash_total = hashes.len();
let mut accumulate = Measure::start("accumulate");
let ((accumulated_hash, total_lamports), (sort_time, hash_time)) =
Self::accumulate_account_hashes_and_capitalization(hashes, slot, false);
accumulate.stop();
let mut hash_time = Measure::start("hash");
let (accumulated_hash, total_lamports) =
Self::compute_merkle_root_and_capitalization_recurse(hashes, MERKLE_FANOUT);
hash_time.stop();
datapoint_info!(
"update_accounts_hash",
("accounts_scan", scan.as_us(), i64),
("hash_accumulate", accumulate.as_us(), i64),
("hash", hash_time.as_us(), i64),
("sort", sort_time.as_us(), i64),
("hash_total", hash_total, i64),
);
Ok((accumulated_hash, total_lamports))
@ -4711,14 +4709,13 @@ pub mod tests {
let mut expected_index = 0;
let start = 0;
let default_fanout = 2;
let fanout_in_accumulate = 16;
// test 0..3 recursions (at fanout = 2) and 1 item remainder. The internals have 1 special case first loop and subsequent loops are the same types.
let iterations = default_fanout * default_fanout * default_fanout + 2;
for pass in 0..2 {
let fanout = if pass == 0 {
default_fanout
} else {
fanout_in_accumulate
MERKLE_FANOUT
};
for count in start..iterations {
let mut input: Vec<_> = (0..count)