fix initial massive metrics spike (#21304)

This commit is contained in:
Jeff Washington (jwash)
2021-11-17 17:16:48 -06:00
committed by GitHub
parent 91fe1278f1
commit 83de2f7376

View File

@ -1,6 +1,6 @@
use crate::accounts_index::IndexValue; use crate::accounts_index::IndexValue;
use crate::bucket_map_holder::BucketMapHolder; use crate::bucket_map_holder::BucketMapHolder;
use solana_sdk::timing::{timestamp, AtomicInterval}; use solana_sdk::timing::AtomicInterval;
use std::fmt::Debug; use std::fmt::Debug;
use std::sync::atomic::{AtomicBool, AtomicU64, AtomicU8, Ordering}; use std::sync::atomic::{AtomicBool, AtomicU64, AtomicU8, Ordering};
@ -38,7 +38,6 @@ pub struct BucketMapHolderStats {
pub active_threads: AtomicU64, pub active_threads: AtomicU64,
pub get_range_us: AtomicU64, pub get_range_us: AtomicU64,
last_age: AtomicU8, last_age: AtomicU8,
last_age_time: AtomicU64,
pub flush_scan_update_us: AtomicU64, pub flush_scan_update_us: AtomicU64,
pub flush_remove_us: AtomicU64, pub flush_remove_us: AtomicU64,
pub flush_grow_us: AtomicU64, pub flush_grow_us: AtomicU64,
@ -82,12 +81,6 @@ impl BucketMapHolderStats {
} }
} }
pub fn get_elapsed_ms_and_reset(&self) -> u64 {
let now = timestamp();
let last = self.last_age_time.swap(now, Ordering::Relaxed);
now.saturating_sub(last) // could saturate to 0. That is ok.
}
fn ms_per_age<T: IndexValue>(&self, storage: &BucketMapHolder<T>, elapsed_ms: u64) -> u64 { fn ms_per_age<T: IndexValue>(&self, storage: &BucketMapHolder<T>, elapsed_ms: u64) -> u64 {
if !storage.get_startup() { if !storage.get_startup() {
let age_now = storage.current_age(); let age_now = storage.current_age();
@ -134,11 +127,14 @@ impl BucketMapHolderStats {
} }
pub fn report_stats<T: IndexValue>(&self, storage: &BucketMapHolder<T>) { pub fn report_stats<T: IndexValue>(&self, storage: &BucketMapHolder<T>) {
if !self.last_time.should_update(STATS_INTERVAL_MS) { let elapsed_ms = self.last_time.elapsed_ms();
if elapsed_ms < STATS_INTERVAL_MS {
return; return;
} }
let elapsed_ms = self.get_elapsed_ms_and_reset(); if !self.last_time.should_update(STATS_INTERVAL_MS) {
return;
}
let ms_per_age = self.ms_per_age(storage, elapsed_ms); let ms_per_age = self.ms_per_age(storage, elapsed_ms);