PA -> PAC: Move in decay_purge enum.
This commit is contained in:
parent
72435b0aba
commit
4ee75be3a3
@ -18,13 +18,6 @@
|
|||||||
* others will be coming soon.
|
* others will be coming soon.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum pa_decay_purge_setting_e {
|
|
||||||
PA_DECAY_PURGE_ALWAYS,
|
|
||||||
PA_DECAY_PURGE_NEVER,
|
|
||||||
PA_DECAY_PURGE_ON_EPOCH_ADVANCE
|
|
||||||
};
|
|
||||||
typedef enum pa_decay_purge_setting_e pa_decay_purge_setting_t;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The stats for a particular pa_shard. Because of the way the ctl module
|
* The stats for a particular pa_shard. Because of the way the ctl module
|
||||||
* handles stats epoch data collection (it has its own arena_stats, and merges
|
* handles stats epoch data collection (it has its own arena_stats, and merges
|
||||||
@ -163,7 +156,7 @@ void pa_decay_all(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
|||||||
*/
|
*/
|
||||||
bool pa_maybe_decay_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
bool pa_maybe_decay_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
||||||
pac_decay_stats_t *decay_stats, ecache_t *ecache,
|
pac_decay_stats_t *decay_stats, ecache_t *ecache,
|
||||||
pa_decay_purge_setting_t decay_purge_setting);
|
pac_decay_purge_setting_t decay_purge_setting);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Gets / sets the maximum amount that we'll grow an arena down the
|
* Gets / sets the maximum amount that we'll grow an arena down the
|
||||||
|
@ -9,6 +9,14 @@
|
|||||||
* - Can use efficient OS-level zeroing primitives for demand-filled pages.
|
* - Can use efficient OS-level zeroing primitives for demand-filled pages.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* How "eager" decay/purging should be. */
|
||||||
|
enum pac_decay_purge_setting_e {
|
||||||
|
PAC_DECAY_PURGE_ALWAYS,
|
||||||
|
PAC_DECAY_PURGE_NEVER,
|
||||||
|
PAC_DECAY_PURGE_ON_EPOCH_ADVANCE
|
||||||
|
};
|
||||||
|
typedef enum pac_decay_purge_setting_e pac_decay_purge_setting_t;
|
||||||
|
|
||||||
typedef struct pac_decay_stats_s pac_decay_stats_t;
|
typedef struct pac_decay_stats_s pac_decay_stats_t;
|
||||||
struct pac_decay_stats_s {
|
struct pac_decay_stats_s {
|
||||||
/* Total number of purge sweeps. */
|
/* Total number of purge sweeps. */
|
||||||
|
12
src/arena.c
12
src/arena.c
@ -410,14 +410,14 @@ arena_muzzy_decay_ms_get(arena_t *arena) {
|
|||||||
* specifically requested it), should we purge ourselves, or wait for the
|
* specifically requested it), should we purge ourselves, or wait for the
|
||||||
* background thread to get to it.
|
* background thread to get to it.
|
||||||
*/
|
*/
|
||||||
static pa_decay_purge_setting_t
|
static pac_decay_purge_setting_t
|
||||||
arena_decide_unforced_decay_purge_setting(bool is_background_thread) {
|
arena_decide_unforced_decay_purge_setting(bool is_background_thread) {
|
||||||
if (is_background_thread) {
|
if (is_background_thread) {
|
||||||
return PA_DECAY_PURGE_ALWAYS;
|
return PAC_DECAY_PURGE_ALWAYS;
|
||||||
} else if (!is_background_thread && background_thread_enabled()) {
|
} else if (!is_background_thread && background_thread_enabled()) {
|
||||||
return PA_DECAY_PURGE_NEVER;
|
return PAC_DECAY_PURGE_NEVER;
|
||||||
} else {
|
} else {
|
||||||
return PA_DECAY_PURGE_ON_EPOCH_ADVANCE;
|
return PAC_DECAY_PURGE_ON_EPOCH_ADVANCE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ arena_decay_ms_set(tsdn_t *tsdn, arena_t *arena, decay_t *decay,
|
|||||||
nstime_t cur_time;
|
nstime_t cur_time;
|
||||||
nstime_init_update(&cur_time);
|
nstime_init_update(&cur_time);
|
||||||
decay_reinit(decay, &cur_time, decay_ms);
|
decay_reinit(decay, &cur_time, decay_ms);
|
||||||
pa_decay_purge_setting_t decay_purge =
|
pac_decay_purge_setting_t decay_purge =
|
||||||
arena_decide_unforced_decay_purge_setting(
|
arena_decide_unforced_decay_purge_setting(
|
||||||
/* is_background_thread */ false);
|
/* is_background_thread */ false);
|
||||||
pa_maybe_decay_purge(tsdn, &arena->pa_shard, decay, decay_stats, ecache,
|
pa_maybe_decay_purge(tsdn, &arena->pa_shard, decay, decay_stats, ecache,
|
||||||
@ -497,7 +497,7 @@ arena_decay_impl(tsdn_t *tsdn, arena_t *arena, decay_t *decay,
|
|||||||
/* No need to wait if another thread is in progress. */
|
/* No need to wait if another thread is in progress. */
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
pa_decay_purge_setting_t decay_purge =
|
pac_decay_purge_setting_t decay_purge =
|
||||||
arena_decide_unforced_decay_purge_setting(is_background_thread);
|
arena_decide_unforced_decay_purge_setting(is_background_thread);
|
||||||
bool epoch_advanced = pa_maybe_decay_purge(tsdn, &arena->pa_shard,
|
bool epoch_advanced = pa_maybe_decay_purge(tsdn, &arena->pa_shard,
|
||||||
decay, decay_stats, ecache, decay_purge);
|
decay, decay_stats, ecache, decay_purge);
|
||||||
|
6
src/pa.c
6
src/pa.c
@ -403,7 +403,7 @@ pa_decay_try_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
|||||||
bool
|
bool
|
||||||
pa_maybe_decay_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
pa_maybe_decay_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
||||||
pac_decay_stats_t *decay_stats, ecache_t *ecache,
|
pac_decay_stats_t *decay_stats, ecache_t *ecache,
|
||||||
pa_decay_purge_setting_t decay_purge_setting) {
|
pac_decay_purge_setting_t decay_purge_setting) {
|
||||||
malloc_mutex_assert_owner(tsdn, &decay->mtx);
|
malloc_mutex_assert_owner(tsdn, &decay->mtx);
|
||||||
|
|
||||||
/* Purge all or nothing if the option is disabled. */
|
/* Purge all or nothing if the option is disabled. */
|
||||||
@ -429,9 +429,9 @@ pa_maybe_decay_purge(tsdn_t *tsdn, pa_shard_t *shard, decay_t *decay,
|
|||||||
size_t npages_current = ecache_npages_get(ecache);
|
size_t npages_current = ecache_npages_get(ecache);
|
||||||
bool epoch_advanced = decay_maybe_advance_epoch(decay, &time,
|
bool epoch_advanced = decay_maybe_advance_epoch(decay, &time,
|
||||||
npages_current);
|
npages_current);
|
||||||
if (decay_purge_setting == PA_DECAY_PURGE_ALWAYS
|
if (decay_purge_setting == PAC_DECAY_PURGE_ALWAYS
|
||||||
|| (epoch_advanced && decay_purge_setting
|
|| (epoch_advanced && decay_purge_setting
|
||||||
== PA_DECAY_PURGE_ON_EPOCH_ADVANCE)) {
|
== PAC_DECAY_PURGE_ON_EPOCH_ADVANCE)) {
|
||||||
size_t npages_limit = decay_npages_limit_get(decay);
|
size_t npages_limit = decay_npages_limit_get(decay);
|
||||||
pa_decay_try_purge(tsdn, shard, decay, decay_stats, ecache,
|
pa_decay_try_purge(tsdn, shard, decay, decay_stats, ecache,
|
||||||
npages_current, npages_limit);
|
npages_current, npages_limit);
|
||||||
|
Loading…
Reference in New Issue
Block a user