From aef28b2f8fc4031f970896b312127cda00bbc2d0 Mon Sep 17 00:00:00 2001 From: David Goldblatt Date: Wed, 11 Mar 2020 12:00:45 -0700 Subject: [PATCH] PA: Move in stash_decayed. --- include/jemalloc/internal/pa.h | 5 ++++- src/arena.c | 21 +-------------------- src/pa.c | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/include/jemalloc/internal/pa.h b/include/jemalloc/internal/pa.h index df2e88f9..99f1608b 100644 --- a/include/jemalloc/internal/pa.h +++ b/include/jemalloc/internal/pa.h @@ -77,7 +77,7 @@ struct pa_shard_s { * Decay-based purging state, responsible for scheduling extent state * transitions. * - * Synchronization: internal. + * Synchronization: via the internal mutex. */ decay_t decay_dirty; /* dirty --> muzzy */ decay_t decay_muzzy; /* muzzy --> retained */ @@ -141,4 +141,7 @@ bool pa_shrink(tsdn_t *tsdn, pa_shard_t *shard, edata_t *edata, size_t old_size, void pa_dalloc(tsdn_t *tsdn, pa_shard_t *shard, edata_t *edata, bool *generated_dirty); +size_t pa_stash_decayed(tsdn_t *tsdn, pa_shard_t *shard, ecache_t *ecache, + size_t npages_limit, size_t npages_decay_max, edata_list_t *decay_extents); + #endif /* JEMALLOC_INTERNAL_PA_H */ diff --git a/src/arena.c b/src/arena.c index da3fa5c4..efdda70b 100644 --- a/src/arena.c +++ b/src/arena.c @@ -610,25 +610,6 @@ arena_muzzy_decay_ms_set(tsdn_t *tsdn, arena_t *arena, decay_ms); } -static size_t -arena_stash_decayed(tsdn_t *tsdn, arena_t *arena, - ehooks_t *ehooks, ecache_t *ecache, size_t npages_limit, - size_t npages_decay_max, edata_list_t *decay_extents) { - witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn), - WITNESS_RANK_CORE, 0); - - /* Stash extents according to npages_limit. */ - size_t nstashed = 0; - edata_t *edata; - while (nstashed < npages_decay_max && - (edata = ecache_evict(tsdn, &arena->pa_shard, ehooks, ecache, npages_limit)) - != NULL) { - edata_list_append(decay_extents, edata); - nstashed += edata_size_get(edata) >> LG_PAGE; - } - return nstashed; -} - static size_t arena_decay_stashed(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks, decay_t *decay, pa_shard_decay_stats_t *decay_stats, ecache_t *ecache, @@ -718,7 +699,7 @@ arena_decay_to_limit(tsdn_t *tsdn, arena_t *arena, decay_t *decay, edata_list_t decay_extents; edata_list_init(&decay_extents); - size_t npurge = arena_stash_decayed(tsdn, arena, ehooks, ecache, + size_t npurge = pa_stash_decayed(tsdn, &arena->pa_shard, ecache, npages_limit, npages_decay_max, &decay_extents); if (npurge != 0) { size_t npurged = arena_decay_stashed(tsdn, arena, ehooks, decay, diff --git a/src/pa.c b/src/pa.c index dfbff226..d6fb4730 100644 --- a/src/pa.c +++ b/src/pa.c @@ -167,3 +167,24 @@ pa_dalloc(tsdn_t *tsdn, pa_shard_t *shard, edata_t *edata, ecache_dalloc(tsdn, shard, ehooks, &shard->ecache_dirty, edata); *generated_dirty = true; } + +size_t +pa_stash_decayed(tsdn_t *tsdn, pa_shard_t *shard, ecache_t *ecache, + size_t npages_limit, size_t npages_decay_max, edata_list_t *decay_extents) { + witness_assert_depth_to_rank(tsdn_witness_tsdp_get(tsdn), + WITNESS_RANK_CORE, 0); + ehooks_t *ehooks = pa_shard_ehooks_get(shard); + + /* Stash extents according to npages_limit. */ + size_t nstashed = 0; + while (nstashed < npages_decay_max) { + edata_t *edata = ecache_evict(tsdn, shard, ehooks, ecache, + npages_limit); + if (edata == NULL) { + break; + } + edata_list_append(decay_extents, edata); + nstashed += edata_size_get(edata) >> LG_PAGE; + } + return nstashed; +}