AcctIdx: stats for buckets on disk, add median (#20528)
This commit is contained in:
committed by
GitHub
parent
2c3d52b4cc
commit
4f6a0b2650
@ -104,6 +104,21 @@ impl BucketMapHolderStats {
|
||||
.remaining_until_next_interval(STATS_INTERVAL_MS)
|
||||
}
|
||||
|
||||
/// return min, max, sum, median of data
|
||||
fn get_stats(mut data: Vec<u64>) -> (u64, u64, u64, u64) {
|
||||
if data.is_empty() {
|
||||
(0, 0, 0, 0)
|
||||
} else {
|
||||
data.sort_unstable();
|
||||
(
|
||||
*data.first().unwrap(),
|
||||
*data.last().unwrap(),
|
||||
data.iter().sum(),
|
||||
data[data.len() / 2],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn report_stats<T: IndexValue>(&self, storage: &BucketMapHolder<T>) {
|
||||
if !self.last_time.should_update(STATS_INTERVAL_MS) {
|
||||
return;
|
||||
@ -111,17 +126,23 @@ impl BucketMapHolderStats {
|
||||
|
||||
let ms_per_age = self.ms_per_age(storage);
|
||||
|
||||
let mut ct = 0;
|
||||
let mut min = usize::MAX;
|
||||
let mut max = 0;
|
||||
for d in &self.per_bucket_count {
|
||||
let d = d.load(Ordering::Relaxed) as usize;
|
||||
ct += d;
|
||||
min = std::cmp::min(min, d);
|
||||
max = std::cmp::max(max, d);
|
||||
}
|
||||
|
||||
let in_mem_per_bucket_counts = self
|
||||
.per_bucket_count
|
||||
.iter()
|
||||
.map(|count| count.load(Ordering::Relaxed))
|
||||
.collect::<Vec<_>>();
|
||||
let disk = storage.disk.as_ref();
|
||||
let disk_per_bucket_counts = disk
|
||||
.map(|disk| {
|
||||
disk.stats
|
||||
.per_bucket_count
|
||||
.iter()
|
||||
.map(|count| count.load(Ordering::Relaxed))
|
||||
.collect::<Vec<_>>()
|
||||
})
|
||||
.unwrap_or_default();
|
||||
let in_mem_stats = Self::get_stats(in_mem_per_bucket_counts);
|
||||
let disk_stats = Self::get_stats(disk_per_bucket_counts);
|
||||
|
||||
datapoint_info!(
|
||||
"accounts_index",
|
||||
@ -141,9 +162,14 @@ impl BucketMapHolderStats {
|
||||
self.bg_throttling_wait_us.swap(0, Ordering::Relaxed),
|
||||
i64
|
||||
),
|
||||
("min_in_bin", min, i64),
|
||||
("max_in_bin", max, i64),
|
||||
("count_from_bins", ct, i64),
|
||||
("min_in_bin_mem", in_mem_stats.0, i64),
|
||||
("max_in_bin_mem", in_mem_stats.1, i64),
|
||||
("count_from_bins_mem", in_mem_stats.2, i64),
|
||||
("median_from_bins_mem", in_mem_stats.3, i64),
|
||||
("min_in_bin_disk", disk_stats.0, i64),
|
||||
("max_in_bin_disk", disk_stats.1, i64),
|
||||
("count_from_bins_disk", disk_stats.2, i64),
|
||||
("median_from_bins_disk", disk_stats.3, i64),
|
||||
(
|
||||
"gets_from_mem",
|
||||
self.gets_from_mem.swap(0, Ordering::Relaxed),
|
||||
|
Reference in New Issue
Block a user