Adds metrics for how long it takes to evict from the accounts read cache (#585)

This commit is contained in:
Brooks 2024-04-05 13:36:36 -04:00 committed by GitHub
parent 9253c465d1
commit e09541a762
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 10 deletions

View File

@ -8229,6 +8229,7 @@ impl AccountsDb {
read_only_cache_misses,
read_only_cache_evicts,
read_only_cache_load_us,
read_only_cache_evict_us,
) = self.read_only_accounts_cache.get_and_reset_stats();
datapoint_info!(
"accounts_db_store_timings",
@ -8300,6 +8301,11 @@ impl AccountsDb {
read_only_cache_load_us,
i64
),
(
"read_only_accounts_cache_evict_us",
read_only_cache_evict_us,
i64
),
(
"calc_stored_meta_us",
self.stats.calc_stored_meta.swap(0, Ordering::Relaxed),

View File

@ -36,6 +36,7 @@ struct ReadOnlyCacheStats {
misses: AtomicU64,
evicts: AtomicU64,
load_us: AtomicU64,
evict_us: AtomicU64,
}
impl ReadOnlyCacheStats {
@ -44,15 +45,17 @@ impl ReadOnlyCacheStats {
self.misses.store(0, Ordering::Relaxed);
self.evicts.store(0, Ordering::Relaxed);
self.load_us.store(0, Ordering::Relaxed);
self.evict_us.store(0, Ordering::Relaxed);
}
fn get_and_reset_stats(&self) -> (u64, u64, u64, u64) {
fn get_and_reset_stats(&self) -> (u64, u64, u64, u64, u64) {
let hits = self.hits.swap(0, Ordering::Relaxed);
let misses = self.misses.swap(0, Ordering::Relaxed);
let evicts = self.evicts.swap(0, Ordering::Relaxed);
let load_us = self.load_us.swap(0, Ordering::Relaxed);
let evict_us = self.evict_us.swap(0, Ordering::Relaxed);
(hits, misses, evicts, load_us)
(hits, misses, evicts, load_us, evict_us)
}
}
@ -162,14 +165,17 @@ impl ReadOnlyAccountsCache {
};
// Evict entries from the front of the queue.
let mut num_evicts = 0;
while self.data_size.load(Ordering::Relaxed) > self.max_data_size {
let Some(&(pubkey, slot)) = self.queue.lock().unwrap().get_first() else {
break;
};
num_evicts += 1;
self.remove(pubkey, slot);
}
let (_, evict_us) = measure_us!({
while self.data_size.load(Ordering::Relaxed) > self.max_data_size {
let Some(&(pubkey, slot)) = self.queue.lock().unwrap().get_first() else {
break;
};
num_evicts += 1;
self.remove(pubkey, slot);
}
});
self.stats.evicts.fetch_add(num_evicts, Ordering::Relaxed);
self.stats.evict_us.fetch_add(evict_us, Ordering::Relaxed);
}
/// true if any pubkeys could have ever been stored into the cache at `slot`
@ -208,7 +214,7 @@ impl ReadOnlyAccountsCache {
self.data_size.load(Ordering::Relaxed)
}
pub(crate) fn get_and_reset_stats(&self) -> (u64, u64, u64, u64) {
pub(crate) fn get_and_reset_stats(&self) -> (u64, u64, u64, u64, u64) {
self.stats.get_and_reset_stats()
}
}