AcctIdx: stats for buckets on disk, add median (#20528)

This commit is contained in:
Jeff Washington (jwash)
2021-10-08 13:58:38 -05:00
committed by GitHub
parent 2c3d52b4cc
commit 4f6a0b2650
4 changed files with 65 additions and 23 deletions

View File

@ -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),