From 7eead4e25f64c7093b1f7920d2fc2772dfa99915 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Thu, 14 Oct 2021 08:37:42 -0500 Subject: [PATCH] clean stats on acct idx lookup (#20632) --- runtime/src/accounts_db.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index aaded1a59c..c717950c08 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -2002,6 +2002,10 @@ impl AccountsDb { let total_keys_count = pubkeys.len(); let mut accounts_scan = Measure::start("accounts_scan"); let uncleaned_roots_len = self.accounts_index.uncleaned_roots_len(); + let found_not_zero_accum = AtomicU64::new(0); + let not_found_on_fork_accum = AtomicU64::new(0); + let missing_accum = AtomicU64::new(0); + // parallel scan the index. let (mut purges_zero_lamports, purges_old_accounts) = { let do_clean_scan = || { @@ -2010,6 +2014,9 @@ impl AccountsDb { .map(|pubkeys: &[Pubkey]| { let mut purges_zero_lamports = HashMap::new(); let mut purges_old_accounts = Vec::new(); + let mut found_not_zero = 0; + let mut not_found_on_fork = 0; + let mut missing = 0; for pubkey in pubkeys { match self.accounts_index.get(pubkey, None, max_clean_root) { AccountIndexGetResult::Found(locked_entry, index) => { @@ -2021,6 +2028,8 @@ impl AccountsDb { self.accounts_index .roots_and_ref_count(&locked_entry, max_clean_root), ); + } else { + found_not_zero += 1; } // Release the lock let slot = *slot; @@ -2042,11 +2051,17 @@ impl AccountsDb { // Also, this pubkey must have been touched by some slot since // it was in the dirty list, so we assume that the slot it was // touched in must be unrooted. + not_found_on_fork += 1; purges_old_accounts.push(*pubkey); } - AccountIndexGetResult::Missing(_lock) => {} + AccountIndexGetResult::Missing(_lock) => { + missing += 1; + } }; } + found_not_zero_accum.fetch_add(found_not_zero, Ordering::Relaxed); + not_found_on_fork_accum.fetch_add(not_found_on_fork, Ordering::Relaxed); + missing_accum.fetch_add(missing, Ordering::Relaxed); (purges_zero_lamports, purges_old_accounts) }) .reduce( @@ -2202,6 +2217,17 @@ impl AccountsDb { ("delta_key_count", key_timings.delta_key_count, i64), ("dirty_pubkeys_count", key_timings.dirty_pubkeys_count, i64), ("total_keys_count", total_keys_count, i64), + ( + "scan_found_not_zero", + found_not_zero_accum.load(Ordering::Relaxed), + i64 + ), + ( + "scan_not_found_on_fork", + not_found_on_fork_accum.load(Ordering::Relaxed), + i64 + ), + ("scan_missing", missing_accum.load(Ordering::Relaxed), i64), ("uncleaned_roots_len", uncleaned_roots_len, i64), ( "clean_old_root_us",