report ancient stats correctly in drop_or_recycle_stores (#28747)

This commit is contained in:
Jeff Washington (jwash) 2022-11-10 07:27:38 -08:00 committed by GitHub
parent 8eeabf9042
commit 552248906e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 11 deletions

View File

@ -1334,7 +1334,7 @@ pub struct AccountsDb {
// Stats for purges called outside of clean_accounts() // Stats for purges called outside of clean_accounts()
external_purge_slots_stats: PurgeStats, external_purge_slots_stats: PurgeStats,
shrink_stats: ShrinkStats, pub(crate) shrink_stats: ShrinkStats,
shrink_ancient_stats: ShrinkAncientStats, shrink_ancient_stats: ShrinkAncientStats,
@ -1843,7 +1843,7 @@ struct ShrinkAncientStats {
} }
#[derive(Debug, Default)] #[derive(Debug, Default)]
struct ShrinkStats { pub(crate) struct ShrinkStats {
last_report: AtomicInterval, last_report: AtomicInterval,
num_slots_shrunk: AtomicUsize, num_slots_shrunk: AtomicUsize,
storage_read_elapsed: AtomicU64, storage_read_elapsed: AtomicU64,
@ -3890,7 +3890,12 @@ impl AccountsDb {
/// common code from shrink and combine_ancient_slots /// common code from shrink and combine_ancient_slots
/// get rid of all original store_ids in the slot /// get rid of all original store_ids in the slot
/// returns remaining stores /// returns remaining stores
fn remove_old_stores_shrink(&self, shrink_collect: &ShrinkCollect, slot: Slot) -> usize { fn remove_old_stores_shrink(
&self,
shrink_collect: &ShrinkCollect,
slot: Slot,
stats: &ShrinkStats,
) -> usize {
// Purge old, overwritten storage entries // Purge old, overwritten storage entries
let (remaining_stores, dead_storages) = self.mark_dirty_dead_stores( let (remaining_stores, dead_storages) = self.mark_dirty_dead_stores(
slot, slot,
@ -3907,7 +3912,7 @@ impl AccountsDb {
); );
} }
self.drop_or_recycle_stores(dead_storages); self.drop_or_recycle_stores(dead_storages, stats);
remaining_stores remaining_stores
} }
@ -3993,7 +3998,7 @@ impl AccountsDb {
self.shrink_candidate_slots.lock().unwrap().remove(&slot); self.shrink_candidate_slots.lock().unwrap().remove(&slot);
let (remaining_stores, remove_old_stores_shrink) = let (remaining_stores, remove_old_stores_shrink) =
measure!(self.remove_old_stores_shrink(&shrink_collect, slot)); measure!(self.remove_old_stores_shrink(&shrink_collect, slot, &self.shrink_stats));
remove_old_stores_shrink_us = remove_old_stores_shrink.as_us(); remove_old_stores_shrink_us = remove_old_stores_shrink.as_us();
if remaining_stores > 1 { if remaining_stores > 1 {
inc_new_counter_info!("accounts_db_shrink_extra_stores", 1); inc_new_counter_info!("accounts_db_shrink_extra_stores", 1);
@ -4087,7 +4092,11 @@ impl AccountsDb {
(remaining_stores, dead_storages) (remaining_stores, dead_storages)
} }
pub(crate) fn drop_or_recycle_stores(&self, dead_storages: Vec<Arc<AccountStorageEntry>>) { pub(crate) fn drop_or_recycle_stores(
&self,
dead_storages: Vec<Arc<AccountStorageEntry>>,
stats: &ShrinkStats,
) {
let mut recycle_stores_write_elapsed = Measure::start("recycle_stores_write_time"); let mut recycle_stores_write_elapsed = Measure::start("recycle_stores_write_time");
let mut recycle_stores = self.recycle_stores.write().unwrap(); let mut recycle_stores = self.recycle_stores.write().unwrap();
recycle_stores_write_elapsed.stop(); recycle_stores_write_elapsed.stop();
@ -4104,10 +4113,10 @@ impl AccountsDb {
drop(dead_storages); drop(dead_storages);
} }
drop_storage_entries_elapsed.stop(); drop_storage_entries_elapsed.stop();
self.shrink_stats stats
.drop_storage_entries_elapsed .drop_storage_entries_elapsed
.fetch_add(drop_storage_entries_elapsed.as_us(), Ordering::Relaxed); .fetch_add(drop_storage_entries_elapsed.as_us(), Ordering::Relaxed);
self.shrink_stats stats
.recycle_stores_write_elapsed .recycle_stores_write_elapsed
.fetch_add(recycle_stores_write_elapsed.as_us(), Ordering::Relaxed); .fetch_add(recycle_stores_write_elapsed.as_us(), Ordering::Relaxed);
} }
@ -4543,8 +4552,12 @@ impl AccountsDb {
dropped_roots.push(slot); dropped_roots.push(slot);
} }
let (_remaining_stores, remove_old_stores_shrink) = let (_remaining_stores, remove_old_stores_shrink) = measure!(self
measure!(self.remove_old_stores_shrink(&shrink_collect, slot)); .remove_old_stores_shrink(
&shrink_collect,
slot,
&self.shrink_ancient_stats.shrink_stats
));
// we should not try to shrink any of the stores from this slot anymore. All shrinking for this slot is now handled by ancient append vec code. // we should not try to shrink any of the stores from this slot anymore. All shrinking for this slot is now handled by ancient append vec code.
self.shrink_candidate_slots.lock().unwrap().remove(&slot); self.shrink_candidate_slots.lock().unwrap().remove(&slot);

View File

@ -240,7 +240,8 @@ impl<'a> SnapshotMinimizer<'a> {
info!("{purge_dead_slots_measure}"); info!("{purge_dead_slots_measure}");
let (_, drop_or_recycle_stores_measure) = measure!( let (_, drop_or_recycle_stores_measure) = measure!(
self.accounts_db().drop_or_recycle_stores(dead_storages), self.accounts_db()
.drop_or_recycle_stores(dead_storages, &self.accounts_db().shrink_stats),
"drop or recycle stores" "drop or recycle stores"
); );
info!("{drop_or_recycle_stores_measure}"); info!("{drop_or_recycle_stores_measure}");