From ace329d11bc397444e99ff81ff4b8d2ca26cc21c Mon Sep 17 00:00:00 2001 From: David Goldblatt Date: Fri, 4 Jun 2021 13:52:28 -0700 Subject: [PATCH] HPA batch dalloc: Just do one deferred work check. We only need to do one check per batch dalloc, not one check per dalloc in the batch. --- src/hpa.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/hpa.c b/src/hpa.c index 8ef881fd..ba02f795 100644 --- a/src/hpa.c +++ b/src/hpa.c @@ -723,17 +723,6 @@ hpa_dalloc_locked(tsdn_t *tsdn, hpa_shard_t *shard, edata_t *edata) { hpdata_unreserve(ps, unreserve_addr, unreserve_size); hpa_update_purge_hugify_eligibility(tsdn, shard, ps); psset_update_end(&shard->psset, ps); - hpa_do_deferred_work(tsdn, shard); -} - -static void -hpa_dalloc(tsdn_t *tsdn, pai_t *self, edata_t *edata) { - hpa_shard_t *shard = hpa_from_pai(self); - - hpa_dalloc_prepare_unlocked(tsdn, shard, edata); - malloc_mutex_lock(tsdn, &shard->mtx); - hpa_dalloc_locked(tsdn, shard, edata); - malloc_mutex_unlock(tsdn, &shard->mtx); } static void @@ -751,9 +740,19 @@ hpa_dalloc_batch(tsdn_t *tsdn, pai_t *self, edata_list_active_t *list) { edata_list_active_remove(list, edata); hpa_dalloc_locked(tsdn, shard, edata); } + hpa_do_deferred_work(tsdn, shard); malloc_mutex_unlock(tsdn, &shard->mtx); } +static void +hpa_dalloc(tsdn_t *tsdn, pai_t *self, edata_t *edata) { + /* Just a dalloc_batch of size 1; this lets us share logic. */ + edata_list_active_t dalloc_list; + edata_list_active_init(&dalloc_list); + edata_list_active_append(&dalloc_list, edata); + hpa_dalloc_batch(tsdn, self, &dalloc_list); +} + void hpa_shard_disable(tsdn_t *tsdn, hpa_shard_t *shard) { malloc_mutex_lock(tsdn, &shard->mtx);