parallelize unref_from_storage from clean_dead_slots_from_accounts_index (#20411)
This commit is contained in:
parent
2d5b471c09
commit
2d78f8ad2a
|
@ -5804,12 +5804,23 @@ impl AccountsDb {
|
||||||
purged_stored_account_slots: Option<&mut AccountSlots>,
|
purged_stored_account_slots: Option<&mut AccountSlots>,
|
||||||
) {
|
) {
|
||||||
if let Some(purged_stored_account_slots) = purged_stored_account_slots {
|
if let Some(purged_stored_account_slots) = purged_stored_account_slots {
|
||||||
|
let len = purged_stored_account_slots.len();
|
||||||
|
// we could build a higher level function in accounts_index to group by bin
|
||||||
|
const BATCH_SIZE: usize = 10_000;
|
||||||
|
let batches = 1 + (len / BATCH_SIZE);
|
||||||
|
self.thread_pool_clean.install(|| {
|
||||||
|
(0..batches).into_par_iter().for_each(|batch| {
|
||||||
|
let skip = batch * BATCH_SIZE;
|
||||||
|
for (_slot, pubkey) in purged_slot_pubkeys.iter().skip(skip).take(BATCH_SIZE) {
|
||||||
|
self.accounts_index.unref_from_storage(pubkey);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
for (slot, pubkey) in purged_slot_pubkeys {
|
for (slot, pubkey) in purged_slot_pubkeys {
|
||||||
purged_stored_account_slots
|
purged_stored_account_slots
|
||||||
.entry(pubkey)
|
.entry(pubkey)
|
||||||
.or_default()
|
.or_default()
|
||||||
.insert(slot);
|
.insert(slot);
|
||||||
self.accounts_index.unref_from_storage(&pubkey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue