PA: Move in stash_decayed.
This commit is contained in:
parent
655a096343
commit
aef28b2f8f
@ -77,7 +77,7 @@ struct pa_shard_s {
|
|||||||
* Decay-based purging state, responsible for scheduling extent state
|
* Decay-based purging state, responsible for scheduling extent state
|
||||||
* transitions.
|
* transitions.
|
||||||
*
|
*
|
||||||
* Synchronization: internal.
|
* Synchronization: via the internal mutex.
|
||||||
*/
|
*/
|
||||||
decay_t decay_dirty; /* dirty --> muzzy */
|
decay_t decay_dirty; /* dirty --> muzzy */
|
||||||
decay_t decay_muzzy; /* muzzy --> retained */
|
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,
|
void pa_dalloc(tsdn_t *tsdn, pa_shard_t *shard, edata_t *edata,
|
||||||
bool *generated_dirty);
|
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 */
|
#endif /* JEMALLOC_INTERNAL_PA_H */
|
||||||
|
21
src/arena.c
21
src/arena.c
@ -610,25 +610,6 @@ arena_muzzy_decay_ms_set(tsdn_t *tsdn, arena_t *arena,
|
|||||||
decay_ms);
|
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
|
static size_t
|
||||||
arena_decay_stashed(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
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,
|
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_t decay_extents;
|
||||||
edata_list_init(&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);
|
npages_limit, npages_decay_max, &decay_extents);
|
||||||
if (npurge != 0) {
|
if (npurge != 0) {
|
||||||
size_t npurged = arena_decay_stashed(tsdn, arena, ehooks, decay,
|
size_t npurged = arena_decay_stashed(tsdn, arena, ehooks, decay,
|
||||||
|
21
src/pa.c
21
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);
|
ecache_dalloc(tsdn, shard, ehooks, &shard->ecache_dirty, edata);
|
||||||
*generated_dirty = true;
|
*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;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user