Remove thin arena_* deferral/decay wrappers; call pa directly.

This commit is contained in:
guangli-dai 2026-07-05 18:01:41 -07:00 committed by Guangli Dai
parent f1f0792370
commit d410f43e1f
8 changed files with 35 additions and 85 deletions

View file

@ -91,8 +91,8 @@ arena_basic_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
size_t *nactive, size_t *ndirty, size_t *nmuzzy) {
*nthreads += arena_nthreads_get(arena, false);
*dss = dss_prec_names[arena_dss_prec_get(arena)];
*dirty_decay_ms = arena_decay_ms_get(arena, extent_state_dirty);
*muzzy_decay_ms = arena_decay_ms_get(arena, extent_state_muzzy);
*dirty_decay_ms = pa_decay_ms_get(&arena->pa_shard, extent_state_dirty);
*muzzy_decay_ms = pa_decay_ms_get(&arena->pa_shard, extent_state_muzzy);
pa_shard_basic_stats_merge(&arena->pa_shard, nactive, ndirty, nmuzzy);
}
@ -311,15 +311,6 @@ arena_cache_bins_stats_merge(tsdn_t *tsdn, arena_t *arena) {
malloc_mutex_unlock(tsdn, &arena->cache_bin_array_descriptor_ql_mtx);
}
/*
* React to deferred work generated by a PAI function. Delegates to pa, which
* owns the PAC/HPA decay + background-thread interaction.
*/
void
arena_handle_deferred_work(tsdn_t *tsdn, arena_t *arena) {
pa_shard_handle_deferred_work(tsdn, &arena->pa_shard);
}
static void
arena_large_malloc_stats_update(tsdn_t *tsdn, arena_t *arena, size_t usize) {
cassert(config_stats);
@ -452,54 +443,12 @@ arena_extent_ralloc_large_expand(
}
}
bool
arena_decay_ms_set(
tsdn_t *tsdn, arena_t *arena, extent_state_t state, ssize_t decay_ms) {
return pa_decay_ms_set(tsdn, &arena->pa_shard, state, decay_ms);
}
ssize_t
arena_decay_ms_get(arena_t *arena, extent_state_t state) {
return pa_decay_ms_get(&arena->pa_shard, state);
}
void
arena_decay(tsdn_t *tsdn, arena_t *arena, bool is_background_thread, bool all) {
if (all) {
/*
* A purge of "all" means "save as much memory as possible"
* (thread death, manual purge): flush caches and fully decay.
*/
pa_shard_flush(tsdn, &arena->pa_shard, /* all */ true);
return;
}
/*
* Deferred (non-forced) decay-purge: pa owns the whole bridge (eagerness
* decision, PAC decay orchestration, and background-thread notify).
*/
pa_shard_do_deferred_work(
tsdn, &arena->pa_shard, is_background_thread);
}
/* Called from background threads. */
void
arena_do_deferred_work(tsdn_t *tsdn, arena_t *arena) {
/*
* Runs on the background thread. is_background_thread=true makes pa
* force the PAC purge (eagerness ALWAYS) and skip the early-wake --
* the background thread must not notify itself.
*/
pa_shard_do_deferred_work(
tsdn, &arena->pa_shard, /* is_background_thread */ true);
}
static void
arena_slab_dalloc(tsdn_t *tsdn, arena_t *arena, edata_t *slab) {
bool deferred_work_generated = false;
pa_dalloc(tsdn, &arena->pa_shard, slab, &deferred_work_generated);
if (deferred_work_generated) {
arena_handle_deferred_work(tsdn, arena);
pa_shard_handle_deferred_work(tsdn, &arena->pa_shard);
}
}
@ -776,7 +725,7 @@ arena_slab_alloc(tsdn_t *tsdn, arena_t *arena, szind_t binind,
/* zero */ false, guarded, &deferred_work_generated);
if (deferred_work_generated) {
arena_handle_deferred_work(tsdn, arena);
pa_shard_handle_deferred_work(tsdn, &arena->pa_shard);
}
if (slab == NULL) {
@ -1670,13 +1619,13 @@ arena_create_huge_arena(tsd_t *tsd, unsigned ind) {
*/
if (!background_thread_enabled()
&& arena_dirty_decay_ms_default_get() > 0) {
arena_decay_ms_set(
tsd_tsdn(tsd), huge_arena, extent_state_dirty, 0);
pa_decay_ms_set(
tsd_tsdn(tsd), &huge_arena->pa_shard, extent_state_dirty, 0);
}
if (!background_thread_enabled()
&& arena_muzzy_decay_ms_default_get() > 0) {
arena_decay_ms_set(
tsd_tsdn(tsd), huge_arena, extent_state_muzzy, 0);
pa_decay_ms_set(
tsd_tsdn(tsd), &huge_arena->pa_shard, extent_state_muzzy, 0);
}
return huge_arena;