From 6f5995c841212dfd3bd26a5ad6f76e3dfc6d65ae Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Mon, 25 Jul 2022 14:47:17 -0500 Subject: [PATCH] add stats for disk_index_find_entry_mut_us (#26753) --- bucket_map/src/bucket.rs | 22 ++++++++++++++++++++++ bucket_map/src/bucket_stats.rs | 1 + runtime/src/bucket_map_holder_stats.rs | 10 ++++++++++ 3 files changed, 33 insertions(+) diff --git a/bucket_map/src/bucket.rs b/bucket_map/src/bucket.rs index dd28a09a2..c0775ef21 100644 --- a/bucket_map/src/bucket.rs +++ b/bucket_map/src/bucket.rs @@ -151,6 +151,7 @@ impl Bucket { key: &Pubkey, random: u64, ) -> Option<(&'a mut IndexEntry, u64)> { + let mut m = Measure::start("bucket_find_entry_mut"); let ix = Self::bucket_index_ix(index, key, random); for i in ix..ix + index.max_search() { let ii = i % index.capacity(); @@ -159,9 +160,19 @@ impl Bucket { } let elem: &mut IndexEntry = index.get_mut(ii); if elem.key == *key { + m.stop(); + index + .stats + .find_entry_mut_us + .fetch_add(m.as_us(), Ordering::Relaxed); return Some((elem, ii)); } } + m.stop(); + index + .stats + .find_entry_mut_us + .fetch_add(m.as_us(), Ordering::Relaxed); None } @@ -191,6 +202,7 @@ impl Bucket { random: u64, is_resizing: bool, ) -> Result { + let mut m = Measure::start("bucket_create_key"); let ix = Self::bucket_index_ix(index, key, random); for i in ix..ix + index.max_search() { let ii = i as u64 % index.capacity(); @@ -203,8 +215,18 @@ impl Bucket { // Since this part of the mmapped file could have previously been used by someone else, there can be garbage here. elem.init(key); //debug!( "INDEX ALLOC {:?} {} {} {}", key, ii, index.capacity, elem_uid ); + m.stop(); + index + .stats + .find_entry_mut_us + .fetch_add(m.as_us(), Ordering::Relaxed); return Ok(ii); } + m.stop(); + index + .stats + .find_entry_mut_us + .fetch_add(m.as_us(), Ordering::Relaxed); Err(BucketMapError::IndexNoSpace(index.capacity_pow2)) } diff --git a/bucket_map/src/bucket_stats.rs b/bucket_map/src/bucket_stats.rs index d102f1627..8521404fc 100644 --- a/bucket_map/src/bucket_stats.rs +++ b/bucket_map/src/bucket_stats.rs @@ -8,6 +8,7 @@ pub struct BucketStats { pub new_file_us: AtomicU64, pub flush_file_us: AtomicU64, pub mmap_us: AtomicU64, + pub find_entry_mut_us: AtomicU64, } #[derive(Debug, Default)] diff --git a/runtime/src/bucket_map_holder_stats.rs b/runtime/src/bucket_map_holder_stats.rs index fa04a7962..9a6e330d0 100644 --- a/runtime/src/bucket_map_holder_stats.rs +++ b/runtime/src/bucket_map_holder_stats.rs @@ -409,6 +409,16 @@ impl BucketMapHolderStats { .unwrap_or_default(), i64 ), + ( + "disk_index_find_entry_mut_us", + disk.map(|disk| disk + .stats + .index + .find_entry_mut_us + .swap(0, Ordering::Relaxed)) + .unwrap_or_default(), + i64 + ), ( "disk_index_flush_mmap_us", disk.map(|disk| disk.stats.index.mmap_us.swap(0, Ordering::Relaxed))