Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 5bbb0da

Browse files
AcctIdx: stats for in-mem (#20114)
1 parent cb9d935 commit 5bbb0da

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

runtime/src/bucket_map_holder_stats.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub struct BucketMapHolderStats {
2323
pub keys: AtomicU64,
2424
pub deletes: AtomicU64,
2525
pub inserts: AtomicU64,
26+
pub count: AtomicU64,
2627
pub count_in_mem: AtomicU64,
2728
pub per_bucket_count: Vec<AtomicU64>,
2829
pub flush_entries_updated_on_disk: AtomicU64,
@@ -47,14 +48,22 @@ impl BucketMapHolderStats {
4748
}
4849
}
4950

50-
pub fn insert_or_delete(&self, insert: bool, bin: usize) {
51-
let per_bucket = self.per_bucket_count.get(bin);
51+
pub fn insert_or_delete(&self, insert: bool, _bin: usize) {
5252
if insert {
5353
self.inserts.fetch_add(1, Ordering::Relaxed);
54+
self.count.fetch_add(1, Ordering::Relaxed);
55+
} else {
56+
self.deletes.fetch_add(1, Ordering::Relaxed);
57+
self.count.fetch_sub(1, Ordering::Relaxed);
58+
}
59+
}
60+
61+
pub fn insert_or_delete_mem(&self, insert: bool, bin: usize) {
62+
let per_bucket = self.per_bucket_count.get(bin);
63+
if insert {
5464
self.count_in_mem.fetch_add(1, Ordering::Relaxed);
5565
per_bucket.map(|count| count.fetch_add(1, Ordering::Relaxed));
5666
} else {
57-
self.deletes.fetch_add(1, Ordering::Relaxed);
5867
self.count_in_mem.fetch_sub(1, Ordering::Relaxed);
5968
per_bucket.map(|count| count.fetch_sub(1, Ordering::Relaxed));
6069
}
@@ -109,6 +118,7 @@ impl BucketMapHolderStats {
109118
self.count_in_mem.load(Ordering::Relaxed),
110119
i64
111120
),
121+
("count", self.count.load(Ordering::Relaxed), i64),
112122
("min_in_bin", min, i64),
113123
("max_in_bin", max, i64),
114124
("count_from_bins", ct, i64),

runtime/src/in_mem_accounts_index.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,10 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
152152
let entry = map.entry(*pubkey);
153153
let result = match entry {
154154
Entry::Occupied(occupied) => Arc::clone(occupied.get()),
155-
Entry::Vacant(vacant) => Arc::clone(vacant.insert(new_entry)),
155+
Entry::Vacant(vacant) => {
156+
stats.insert_or_delete_mem(true, self.bin);
157+
Arc::clone(vacant.insert(new_entry))
158+
}
156159
};
157160
Some(result)
158161
}
@@ -184,6 +187,7 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
184187
// We have to have a write lock to the map here, which means nobody else can get
185188
// the arc, but someone may already have retreived a clone of it.
186189
self.delete_disk_key(occupied.key());
190+
self.stats().insert_or_delete_mem(false, self.bin);
187191
occupied.remove();
188192
}
189193
result
@@ -274,6 +278,7 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
274278
};
275279
assert!(new_value.dirty());
276280
vacant.insert(new_value);
281+
self.stats().insert_or_delete_mem(true, self.bin);
277282
self.stats().insert_or_delete(true, self.bin);
278283
}
279284
}
@@ -424,6 +429,7 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
424429
Entry::Vacant(vacant) => {
425430
// not in cache, look on disk
426431
let disk_entry = self.load_account_entry_from_disk(vacant.key());
432+
stats.insert_or_delete_mem(true, self.bin);
427433
if let Some(disk_entry) = disk_entry {
428434
// on disk, so insert into cache, then return cache value so caller will merge
429435
let result = Some(Self::insert_returner(&disk_entry, vacant.key(), new_entry));
@@ -537,6 +543,7 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
537543
}
538544
Entry::Vacant(vacant) => {
539545
vacant.insert(self.disk_to_cache_entry(item.slot_list, item.ref_count));
546+
self.stats().insert_or_delete_mem(true, self.bin);
540547
}
541548
}
542549
}
@@ -682,6 +689,7 @@ impl<T: IndexValue> InMemAccountsIndex<T> {
682689
}
683690

684691
// all conditions for removing succeeded, so really remove item from in-mem cache
692+
self.stats().insert_or_delete_mem(false, self.bin);
685693
occupied.remove();
686694
}
687695
}

0 commit comments

Comments
 (0)