Add stats for readonly cache evicts (#26938)
* add stats for readonly cache evicts * bump up account cache to 400M * aggregate num_evicts in the loop
This commit is contained in:
parent
091d69d218
commit
1a90cffabe
|
@ -1902,7 +1902,7 @@ impl AccountsDb {
|
||||||
num_hash_scan_passes: Option<usize>,
|
num_hash_scan_passes: Option<usize>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let num_threads = get_thread_count();
|
let num_threads = get_thread_count();
|
||||||
const MAX_READ_ONLY_CACHE_DATA_SIZE: usize = 200_000_000;
|
const MAX_READ_ONLY_CACHE_DATA_SIZE: usize = 400_000_000; // 400M bytes
|
||||||
|
|
||||||
let mut temp_accounts_hash_cache_path = None;
|
let mut temp_accounts_hash_cache_path = None;
|
||||||
let accounts_hash_cache_path = accounts_hash_cache_path.unwrap_or_else(|| {
|
let accounts_hash_cache_path = accounts_hash_cache_path.unwrap_or_else(|| {
|
||||||
|
@ -7637,7 +7637,7 @@ impl AccountsDb {
|
||||||
|
|
||||||
fn report_store_timings(&self) {
|
fn report_store_timings(&self) {
|
||||||
if self.stats.last_store_report.should_update(1000) {
|
if self.stats.last_store_report.should_update(1000) {
|
||||||
let (read_only_cache_hits, read_only_cache_misses) =
|
let (read_only_cache_hits, read_only_cache_misses, read_only_cache_evicts) =
|
||||||
self.read_only_accounts_cache.get_and_reset_stats();
|
self.read_only_accounts_cache.get_and_reset_stats();
|
||||||
datapoint_info!(
|
datapoint_info!(
|
||||||
"accounts_db_store_timings",
|
"accounts_db_store_timings",
|
||||||
|
@ -7704,6 +7704,11 @@ impl AccountsDb {
|
||||||
read_only_cache_misses,
|
read_only_cache_misses,
|
||||||
i64
|
i64
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"read_only_accounts_cache_evicts",
|
||||||
|
read_only_cache_evicts,
|
||||||
|
i64
|
||||||
|
),
|
||||||
(
|
(
|
||||||
"calc_stored_meta_us",
|
"calc_stored_meta_us",
|
||||||
self.stats.calc_stored_meta.swap(0, Ordering::Relaxed),
|
self.stats.calc_stored_meta.swap(0, Ordering::Relaxed),
|
||||||
|
|
|
@ -38,6 +38,7 @@ pub(crate) struct ReadOnlyAccountsCache {
|
||||||
data_size: AtomicUsize,
|
data_size: AtomicUsize,
|
||||||
hits: AtomicU64,
|
hits: AtomicU64,
|
||||||
misses: AtomicU64,
|
misses: AtomicU64,
|
||||||
|
evicts: AtomicU64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReadOnlyAccountsCache {
|
impl ReadOnlyAccountsCache {
|
||||||
|
@ -49,6 +50,7 @@ impl ReadOnlyAccountsCache {
|
||||||
data_size: AtomicUsize::default(),
|
data_size: AtomicUsize::default(),
|
||||||
hits: AtomicU64::default(),
|
hits: AtomicU64::default(),
|
||||||
misses: AtomicU64::default(),
|
misses: AtomicU64::default(),
|
||||||
|
evicts: AtomicU64::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,13 +109,16 @@ impl ReadOnlyAccountsCache {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// Evict entries from the front of the queue.
|
// Evict entries from the front of the queue.
|
||||||
|
let mut num_evicts = 0;
|
||||||
while self.data_size.load(Ordering::Relaxed) > self.max_data_size {
|
while self.data_size.load(Ordering::Relaxed) > self.max_data_size {
|
||||||
let (pubkey, slot) = match self.queue.lock().unwrap().get_first() {
|
let (pubkey, slot) = match self.queue.lock().unwrap().get_first() {
|
||||||
None => break,
|
None => break,
|
||||||
Some(key) => *key,
|
Some(key) => *key,
|
||||||
};
|
};
|
||||||
|
num_evicts += 1;
|
||||||
self.remove(pubkey, slot);
|
self.remove(pubkey, slot);
|
||||||
}
|
}
|
||||||
|
self.evicts.fetch_add(num_evicts, Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn remove(&self, pubkey: Pubkey, slot: Slot) -> Option<AccountSharedData> {
|
pub(crate) fn remove(&self, pubkey: Pubkey, slot: Slot) -> Option<AccountSharedData> {
|
||||||
|
@ -135,10 +140,12 @@ impl ReadOnlyAccountsCache {
|
||||||
self.data_size.load(Ordering::Relaxed)
|
self.data_size.load(Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_and_reset_stats(&self) -> (u64, u64) {
|
pub(crate) fn get_and_reset_stats(&self) -> (u64, u64, u64) {
|
||||||
let hits = self.hits.swap(0, Ordering::Relaxed);
|
let hits = self.hits.swap(0, Ordering::Relaxed);
|
||||||
let misses = self.misses.swap(0, Ordering::Relaxed);
|
let misses = self.misses.swap(0, Ordering::Relaxed);
|
||||||
(hits, misses)
|
let evicts = self.evicts.swap(0, Ordering::Relaxed);
|
||||||
|
|
||||||
|
(hits, misses, evicts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue