factor out update_shrink_stats (#28465)

* use local for shrink_stats

* renames and remove .as_us()

* factor out update_shrink_stats

* use integer to report us in metrics
This commit is contained in:
Jeff Washington (jwash) 2022-10-19 08:08:04 -07:00 committed by GitHub
parent 040035063f
commit 8b115ff489
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 73 additions and 50 deletions

View File

@ -3751,12 +3751,11 @@ impl AccountsDb {
let mut rewrite_elapsed = Measure::start("rewrite_elapsed"); let mut rewrite_elapsed = Measure::start("rewrite_elapsed");
let mut dead_storages = vec![]; let mut dead_storages = vec![];
let mut find_alive_elapsed = 0; let mut create_and_insert_store_elapsed_us = 0;
let mut create_and_insert_store_elapsed = 0; let mut write_storage_elapsed_us = 0;
let mut write_storage_elapsed = 0;
let mut store_accounts_timing = StoreAccountsTiming::default(); let mut store_accounts_timing = StoreAccountsTiming::default();
let mut find_alive_elapsed = Measure::start("find_alive_elapsed");
if aligned_total > 0 { if aligned_total > 0 {
let mut start = Measure::start("find_alive_elapsed");
let mut accounts = Vec::with_capacity(total_accounts_after_shrink); let mut accounts = Vec::with_capacity(total_accounts_after_shrink);
let mut hashes = Vec::with_capacity(total_accounts_after_shrink); let mut hashes = Vec::with_capacity(total_accounts_after_shrink);
let mut write_versions = Vec::with_capacity(total_accounts_after_shrink); let mut write_versions = Vec::with_capacity(total_accounts_after_shrink);
@ -3770,11 +3769,10 @@ impl AccountsDb {
hashes.push(alive_account.account.hash); hashes.push(alive_account.account.hash);
write_versions.push(alive_account.account.meta.write_version); write_versions.push(alive_account.account.meta.write_version);
} }
start.stop(); find_alive_elapsed.stop();
find_alive_elapsed = start.as_us();
let (shrunken_store, time) = self.get_store_for_shrink(slot, aligned_total); let (shrunken_store, time) = self.get_store_for_shrink(slot, aligned_total);
create_and_insert_store_elapsed = time.as_micros() as u64; create_and_insert_store_elapsed_us = time.as_micros() as u64;
// here, we're writing back alive_accounts. That should be an atomic operation // here, we're writing back alive_accounts. That should be an atomic operation
// without use of rather wide locks in this whole function, because we're // without use of rather wide locks in this whole function, because we're
@ -3799,7 +3797,7 @@ impl AccountsDb {
self.shrink_candidate_slots.lock().unwrap().remove(&slot); self.shrink_candidate_slots.lock().unwrap().remove(&slot);
// Purge old, overwritten storage entries // Purge old, overwritten storage entries
let mut start = Measure::start("write_storage_elapsed"); let mut write_storage_elapsed = Measure::start("write_storage_elapsed");
let remaining_stores = self.mark_dirty_dead_stores( let remaining_stores = self.mark_dirty_dead_stores(
slot, slot,
&mut dead_storages, &mut dead_storages,
@ -3820,60 +3818,85 @@ impl AccountsDb {
slot, remaining_stores slot, remaining_stores
); );
} }
start.stop(); write_storage_elapsed.stop();
write_storage_elapsed = start.as_us(); write_storage_elapsed_us = write_storage_elapsed.as_us();
} }
rewrite_elapsed.stop(); rewrite_elapsed.stop();
self.drop_or_recycle_stores(dead_storages); self.drop_or_recycle_stores(dead_storages);
self.shrink_stats Self::update_shrink_stats(
.num_slots_shrunk &self.shrink_stats,
.fetch_add(1, Ordering::Relaxed); index_read_elapsed,
self.shrink_stats find_alive_elapsed,
.index_read_elapsed create_and_insert_store_elapsed_us,
.fetch_add(index_read_elapsed.as_us(), Ordering::Relaxed); store_accounts_timing,
self.shrink_stats rewrite_elapsed,
.find_alive_elapsed write_storage_elapsed_us,
.fetch_add(find_alive_elapsed, Ordering::Relaxed);
self.shrink_stats
.create_and_insert_store_elapsed
.fetch_add(create_and_insert_store_elapsed, Ordering::Relaxed);
self.shrink_stats.store_accounts_elapsed.fetch_add(
store_accounts_timing.store_accounts_elapsed,
Ordering::Relaxed,
);
self.shrink_stats.update_index_elapsed.fetch_add(
store_accounts_timing.update_index_elapsed,
Ordering::Relaxed,
);
self.shrink_stats.handle_reclaims_elapsed.fetch_add(
store_accounts_timing.handle_reclaims_elapsed,
Ordering::Relaxed,
);
self.shrink_stats
.write_storage_elapsed
.fetch_add(write_storage_elapsed, Ordering::Relaxed);
self.shrink_stats
.rewrite_elapsed
.fetch_add(rewrite_elapsed.as_us(), Ordering::Relaxed);
self.shrink_stats.accounts_removed.fetch_add(
total_starting_accounts - total_accounts_after_shrink, total_starting_accounts - total_accounts_after_shrink,
Ordering::Relaxed, original_bytes,
aligned_total,
); );
self.shrink_stats.bytes_removed.fetch_add(
original_bytes.saturating_sub(aligned_total),
Ordering::Relaxed,
);
self.shrink_stats
.bytes_written
.fetch_add(aligned_total, Ordering::Relaxed);
self.shrink_stats.report(); self.shrink_stats.report();
total_accounts_after_shrink total_accounts_after_shrink
} }
#[allow(clippy::too_many_arguments)]
fn update_shrink_stats(
shrink_stats: &ShrinkStats,
index_read_elapsed: Measure,
find_alive_elapsed: Measure,
create_and_insert_store_elapsed_us: u64,
store_accounts_timing: StoreAccountsTiming,
rewrite_elapsed: Measure,
write_storage_elapsed_us: u64,
accounts_removed: usize,
original_bytes: u64,
aligned_total: u64,
) {
shrink_stats
.num_slots_shrunk
.fetch_add(1, Ordering::Relaxed);
shrink_stats
.index_read_elapsed
.fetch_add(index_read_elapsed.as_us(), Ordering::Relaxed);
shrink_stats
.find_alive_elapsed
.fetch_add(find_alive_elapsed.as_us(), Ordering::Relaxed);
shrink_stats
.create_and_insert_store_elapsed
.fetch_add(create_and_insert_store_elapsed_us, Ordering::Relaxed);
shrink_stats.store_accounts_elapsed.fetch_add(
store_accounts_timing.store_accounts_elapsed,
Ordering::Relaxed,
);
shrink_stats.update_index_elapsed.fetch_add(
store_accounts_timing.update_index_elapsed,
Ordering::Relaxed,
);
shrink_stats.handle_reclaims_elapsed.fetch_add(
store_accounts_timing.handle_reclaims_elapsed,
Ordering::Relaxed,
);
shrink_stats
.write_storage_elapsed
.fetch_add(write_storage_elapsed_us, Ordering::Relaxed);
shrink_stats
.rewrite_elapsed
.fetch_add(rewrite_elapsed.as_us(), Ordering::Relaxed);
shrink_stats
.accounts_removed
.fetch_add(accounts_removed, Ordering::Relaxed);
shrink_stats.bytes_removed.fetch_add(
original_bytes.saturating_sub(aligned_total),
Ordering::Relaxed,
);
shrink_stats
.bytes_written
.fetch_add(aligned_total, Ordering::Relaxed);
}
/// get stores for 'slot' /// get stores for 'slot'
/// retain only the stores where 'should_retain(store)' == true /// retain only the stores where 'should_retain(store)' == true
/// for stores not retained, insert in 'dead_storages' and optionally 'dirty_stores' /// for stores not retained, insert in 'dead_storages' and optionally 'dirty_stores'