From c6d189dac2ffa4d791bcb2e7bc08d1b9388d89f8 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:00:41 -0500 Subject: [PATCH] bg threads wait until next expected event (#20126) --- runtime/src/bucket_map_holder.rs | 7 ++++++- runtime/src/bucket_map_holder_stats.rs | 11 +++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/runtime/src/bucket_map_holder.rs b/runtime/src/bucket_map_holder.rs index 74c8ed9c91..5853b4d270 100644 --- a/runtime/src/bucket_map_holder.rs +++ b/runtime/src/bucket_map_holder.rs @@ -159,9 +159,14 @@ impl BucketMapHolder { let flush = self.disk.is_some(); loop { if self.all_buckets_flushed_at_current_age() { + let wait = std::cmp::min( + self.age_timer.remaining_until_next_interval(AGE_MS), + self.stats.remaining_until_next_interval(), + ); + let mut m = Measure::start("wait"); self.wait_dirty_or_aged - .wait_timeout(Duration::from_millis(AGE_MS)); + .wait_timeout(Duration::from_millis(wait)); m.stop(); self.stats .bg_waiting_us diff --git a/runtime/src/bucket_map_holder_stats.rs b/runtime/src/bucket_map_holder_stats.rs index da2a1e8981..e26bab35f7 100644 --- a/runtime/src/bucket_map_holder_stats.rs +++ b/runtime/src/bucket_map_holder_stats.rs @@ -4,6 +4,9 @@ use solana_sdk::timing::{timestamp, AtomicInterval}; use std::fmt::Debug; use std::sync::atomic::{AtomicU64, AtomicU8, Ordering}; +// stats logged every 10 s +const STATS_INTERVAL_MS: u64 = 10_000; + #[derive(Debug, Default)] pub struct BucketMapHolderStats { pub get_mem_us: AtomicU64, @@ -92,9 +95,13 @@ impl BucketMapHolderStats { } } + pub fn remaining_until_next_interval(&self) -> u64 { + self.last_time + .remaining_until_next_interval(STATS_INTERVAL_MS) + } + pub fn report_stats(&self, storage: &BucketMapHolder) { - // account index stats every 10 s - if !self.last_time.should_update(10_000) { + if !self.last_time.should_update(STATS_INTERVAL_MS) { return; }