parallelize unref_from_storage from clean_dead_slots_from_accounts_index (#20411)

This commit is contained in:
Jeff Washington (jwash) 2021-10-04 19:20:10 -04:00 committed by GitHub
parent 2d5b471c09
commit 2d78f8ad2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 1 deletions

View File

@ -5804,12 +5804,23 @@ impl AccountsDb {
purged_stored_account_slots: Option<&mut AccountSlots>,
) {
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 {
purged_stored_account_slots
.entry(pubkey)
.or_default()
.insert(slot);
self.accounts_index.unref_from_storage(&pubkey);
}
}