diff --git a/runtime/src/accounts_index_storage.rs b/runtime/src/accounts_index_storage.rs index dd1817f84d..c0f386b62e 100644 --- a/runtime/src/accounts_index_storage.rs +++ b/runtime/src/accounts_index_storage.rs @@ -100,7 +100,8 @@ impl AccountsIndexStorage { wait: Arc, ) { loop { - wait.wait_timeout(Duration::from_millis(10000)); // account index stats every 10 s + // this will transition to waits and thread throttling + wait.wait_timeout(Duration::from_millis(10000)); if exit.load(Ordering::Relaxed) { break; } diff --git a/runtime/src/bucket_map_holder_stats.rs b/runtime/src/bucket_map_holder_stats.rs index dc7734fa45..e9f937e3f9 100644 --- a/runtime/src/bucket_map_holder_stats.rs +++ b/runtime/src/bucket_map_holder_stats.rs @@ -1,3 +1,4 @@ +use solana_sdk::timing::AtomicInterval; use std::fmt::Debug; use std::sync::atomic::{AtomicU64, Ordering}; @@ -19,6 +20,7 @@ pub struct BucketMapHolderStats { pub count_in_mem: AtomicU64, pub per_bucket_count: Vec, pub get_range_us: AtomicU64, + last_time: AtomicInterval, } impl BucketMapHolderStats { @@ -46,6 +48,11 @@ impl BucketMapHolderStats { } pub fn report_stats(&self) { + // account index stats every 10 s + if !self.last_time.should_update(10_000) { + return; + } + let mut ct = 0; let mut min = usize::MAX; let mut max = 0;