add metric for ancient can't move slots (#33713)

* add metric for ancient can't move slots

* rename

* fix erors in replacing text

* rename
This commit is contained in:
Jeff Washington (jwash) 2023-10-17 08:34:18 -07:00 committed by GitHub
parent b241cef813
commit 5de9163625
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -2014,10 +2014,10 @@ pub(crate) struct ShrinkStatsSub {
pub(crate) store_accounts_timing: StoreAccountsTiming,
pub(crate) rewrite_elapsed_us: u64,
pub(crate) create_and_insert_store_elapsed_us: u64,
pub(crate) unpackable_slots_count: usize,
}
impl ShrinkStatsSub {
#[allow(dead_code)]
pub(crate) fn accumulate(&mut self, other: &Self) {
self.store_accounts_timing
.accumulate(&other.store_accounts_timing);
@ -2026,6 +2026,7 @@ impl ShrinkStatsSub {
self.create_and_insert_store_elapsed_us,
other.create_and_insert_store_elapsed_us
);
saturating_add_assign!(self.unpackable_slots_count, other.unpackable_slots_count);
}
}
@ -2041,6 +2042,7 @@ pub struct ShrinkStats {
handle_reclaims_elapsed: AtomicU64,
remove_old_stores_shrink_us: AtomicU64,
rewrite_elapsed: AtomicU64,
unpackable_slots_count: AtomicU64,
drop_storage_entries_elapsed: AtomicU64,
recycle_stores_write_elapsed: AtomicU64,
accounts_removed: AtomicUsize,
@ -2219,6 +2221,13 @@ impl ShrinkAncientStats {
self.shrink_stats.rewrite_elapsed.swap(0, Ordering::Relaxed) as i64,
i64
),
(
"unpackable_slots_count",
self.shrink_stats
.unpackable_slots_count
.swap(0, Ordering::Relaxed) as i64,
i64
),
(
"drop_storage_entries_elapsed",
self.shrink_stats
@ -4177,6 +4186,9 @@ impl AccountsDb {
shrink_stats
.rewrite_elapsed
.fetch_add(stats_sub.rewrite_elapsed_us, Ordering::Relaxed);
shrink_stats
.unpackable_slots_count
.fetch_add(stats_sub.unpackable_slots_count as u64, Ordering::Relaxed);
}
/// get stores for 'slot'

View File

@ -299,6 +299,7 @@ impl AccountsDb {
);
let accounts_to_combine = self.calc_accounts_to_combine(&accounts_per_storage);
metrics.unpackable_slots_count += accounts_to_combine.unpackable_slots_count;
// pack the accounts with 1 ref
let pack = PackedAncientStorage::pack(
@ -385,6 +386,7 @@ impl AccountsDb {
store_accounts_timing,
rewrite_elapsed_us,
create_and_insert_store_elapsed_us,
unpackable_slots_count: 0,
});
write_ancient_accounts
.shrinks_in_progress
@ -584,6 +586,7 @@ impl AccountsDb {
target_slots_sorted.push(info.slot);
}
}
let unpackable_slots_count = remove.len();
remove.into_iter().rev().for_each(|i| {
accounts_to_combine.remove(i);
});
@ -591,6 +594,7 @@ impl AccountsDb {
accounts_to_combine,
accounts_keep_slots,
target_slots_sorted,
unpackable_slots_count,
}
}
@ -718,6 +722,8 @@ struct AccountsToCombine<'a> {
/// Some of these slots will have ancient append vecs created at them to contain everything in 'accounts_to_combine'
/// The rest will become dead slots with no accounts in them.
target_slots_sorted: Vec<Slot>,
/// when scanning, this many slots contained accounts that could not be packed because accounts with ref_count > 1 existed.
unpackable_slots_count: usize,
}
#[derive(Default)]
@ -3135,6 +3141,7 @@ pub mod tests {
accounts_keep_slots: HashMap::default(),
accounts_to_combine: vec![shrink_collect],
target_slots_sorted: Vec::default(),
unpackable_slots_count: 0,
};
db.addref_accounts_failed_to_shrink_ancient(accounts_to_combine);
db.accounts_index.scan(