PAC: Move in decay.
This commit is contained in:
committed by
David Goldblatt
parent
c81e389996
commit
db211eefbf
12
src/arena.c
12
src/arena.c
@@ -397,12 +397,12 @@ arena_extent_ralloc_large_expand(tsdn_t *tsdn, arena_t *arena, edata_t *edata,
|
||||
|
||||
ssize_t
|
||||
arena_dirty_decay_ms_get(arena_t *arena) {
|
||||
return pa_shard_dirty_decay_ms_get(&arena->pa_shard);
|
||||
return pac_dirty_decay_ms_get(&arena->pa_shard.pac);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
arena_muzzy_decay_ms_get(arena_t *arena) {
|
||||
return pa_shard_muzzy_decay_ms_get(&arena->pa_shard);
|
||||
return pac_muzzy_decay_ms_get(&arena->pa_shard.pac);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -453,7 +453,7 @@ arena_decay_ms_set(tsdn_t *tsdn, arena_t *arena, decay_t *decay,
|
||||
bool
|
||||
arena_dirty_decay_ms_set(tsdn_t *tsdn, arena_t *arena,
|
||||
ssize_t decay_ms) {
|
||||
return arena_decay_ms_set(tsdn, arena, &arena->pa_shard.decay_dirty,
|
||||
return arena_decay_ms_set(tsdn, arena, &arena->pa_shard.pac.decay_dirty,
|
||||
&arena->pa_shard.stats->decay_dirty,
|
||||
&arena->pa_shard.pac.ecache_dirty, decay_ms);
|
||||
}
|
||||
@@ -461,7 +461,7 @@ arena_dirty_decay_ms_set(tsdn_t *tsdn, arena_t *arena,
|
||||
bool
|
||||
arena_muzzy_decay_ms_set(tsdn_t *tsdn, arena_t *arena,
|
||||
ssize_t decay_ms) {
|
||||
return arena_decay_ms_set(tsdn, arena, &arena->pa_shard.decay_muzzy,
|
||||
return arena_decay_ms_set(tsdn, arena, &arena->pa_shard.pac.decay_muzzy,
|
||||
&arena->pa_shard.stats->decay_muzzy,
|
||||
&arena->pa_shard.pac.ecache_muzzy, decay_ms);
|
||||
}
|
||||
@@ -520,7 +520,7 @@ arena_decay_impl(tsdn_t *tsdn, arena_t *arena, decay_t *decay,
|
||||
static bool
|
||||
arena_decay_dirty(tsdn_t *tsdn, arena_t *arena, bool is_background_thread,
|
||||
bool all) {
|
||||
return arena_decay_impl(tsdn, arena, &arena->pa_shard.decay_dirty,
|
||||
return arena_decay_impl(tsdn, arena, &arena->pa_shard.pac.decay_dirty,
|
||||
&arena->pa_shard.stats->decay_dirty,
|
||||
&arena->pa_shard.pac.ecache_dirty, is_background_thread, all);
|
||||
}
|
||||
@@ -531,7 +531,7 @@ arena_decay_muzzy(tsdn_t *tsdn, arena_t *arena, bool is_background_thread,
|
||||
if (pa_shard_dont_decay_muzzy(&arena->pa_shard)) {
|
||||
return false;
|
||||
}
|
||||
return arena_decay_impl(tsdn, arena, &arena->pa_shard.decay_muzzy,
|
||||
return arena_decay_impl(tsdn, arena, &arena->pa_shard.pac.decay_muzzy,
|
||||
&arena->pa_shard.stats->decay_muzzy,
|
||||
&arena->pa_shard.pac.ecache_muzzy, is_background_thread, all);
|
||||
}
|
||||
|
@@ -201,12 +201,12 @@ static uint64_t
|
||||
arena_decay_compute_purge_interval(tsdn_t *tsdn, arena_t *arena) {
|
||||
uint64_t i1, i2;
|
||||
i1 = arena_decay_compute_purge_interval_impl(tsdn,
|
||||
&arena->pa_shard.decay_dirty, &arena->pa_shard.pac.ecache_dirty);
|
||||
&arena->pa_shard.pac.decay_dirty, &arena->pa_shard.pac.ecache_dirty);
|
||||
if (i1 == BACKGROUND_THREAD_MIN_INTERVAL_NS) {
|
||||
return i1;
|
||||
}
|
||||
i2 = arena_decay_compute_purge_interval_impl(tsdn,
|
||||
&arena->pa_shard.decay_muzzy, &arena->pa_shard.pac.ecache_muzzy);
|
||||
&arena->pa_shard.pac.decay_muzzy, &arena->pa_shard.pac.ecache_muzzy);
|
||||
|
||||
return i1 < i2 ? i1 : i2;
|
||||
}
|
||||
|
@@ -3130,8 +3130,8 @@ stats_mutexes_reset_ctl(tsd_t *tsd, const size_t *mib,
|
||||
MUTEX_PROF_RESET(arena->pa_shard.pac.ecache_dirty.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.pac.ecache_muzzy.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.pac.ecache_retained.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.decay_dirty.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.decay_muzzy.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.pac.decay_dirty.mtx);
|
||||
MUTEX_PROF_RESET(arena->pa_shard.pac.decay_muzzy.mtx);
|
||||
MUTEX_PROF_RESET(arena->tcache_ql_mtx);
|
||||
MUTEX_PROF_RESET(arena->base->mtx);
|
||||
|
||||
|
12
src/pa.c
12
src/pa.c
@@ -29,14 +29,8 @@ pa_shard_init(tsdn_t *tsdn, pa_shard_t *shard, emap_t *emap, base_t *base,
|
||||
if (edata_cache_init(&shard->edata_cache, base)) {
|
||||
return true;
|
||||
}
|
||||
if (pac_init(tsdn, &shard->pac, ind, emap, &shard->edata_cache)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (decay_init(&shard->decay_dirty, cur_time, dirty_decay_ms)) {
|
||||
return true;
|
||||
}
|
||||
if (decay_init(&shard->decay_muzzy, cur_time, muzzy_decay_ms)) {
|
||||
if (pac_init(tsdn, &shard->pac, ind, emap, &shard->edata_cache,
|
||||
cur_time, dirty_decay_ms, muzzy_decay_ms)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -91,7 +85,7 @@ pa_shard_extent_sn_next(pa_shard_t *shard) {
|
||||
|
||||
static bool
|
||||
pa_shard_may_have_muzzy(pa_shard_t *shard) {
|
||||
return pa_shard_muzzy_decay_ms_get(shard) != 0;
|
||||
return pac_muzzy_decay_ms_get(&shard->pac) != 0;
|
||||
}
|
||||
|
||||
static edata_t *
|
||||
|
@@ -10,8 +10,8 @@
|
||||
|
||||
void
|
||||
pa_shard_prefork0(tsdn_t *tsdn, pa_shard_t *shard) {
|
||||
malloc_mutex_prefork(tsdn, &shard->decay_dirty.mtx);
|
||||
malloc_mutex_prefork(tsdn, &shard->decay_muzzy.mtx);
|
||||
malloc_mutex_prefork(tsdn, &shard->pac.decay_dirty.mtx);
|
||||
malloc_mutex_prefork(tsdn, &shard->pac.decay_muzzy.mtx);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -38,8 +38,8 @@ pa_shard_postfork_parent(tsdn_t *tsdn, pa_shard_t *shard) {
|
||||
ecache_postfork_parent(tsdn, &shard->pac.ecache_muzzy);
|
||||
ecache_postfork_parent(tsdn, &shard->pac.ecache_retained);
|
||||
ecache_grow_postfork_parent(tsdn, &shard->pac.ecache_grow);
|
||||
malloc_mutex_postfork_parent(tsdn, &shard->decay_dirty.mtx);
|
||||
malloc_mutex_postfork_parent(tsdn, &shard->decay_muzzy.mtx);
|
||||
malloc_mutex_postfork_parent(tsdn, &shard->pac.decay_dirty.mtx);
|
||||
malloc_mutex_postfork_parent(tsdn, &shard->pac.decay_muzzy.mtx);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -49,8 +49,8 @@ pa_shard_postfork_child(tsdn_t *tsdn, pa_shard_t *shard) {
|
||||
ecache_postfork_child(tsdn, &shard->pac.ecache_muzzy);
|
||||
ecache_postfork_child(tsdn, &shard->pac.ecache_retained);
|
||||
ecache_grow_postfork_child(tsdn, &shard->pac.ecache_grow);
|
||||
malloc_mutex_postfork_child(tsdn, &shard->decay_dirty.mtx);
|
||||
malloc_mutex_postfork_child(tsdn, &shard->decay_muzzy.mtx);
|
||||
malloc_mutex_postfork_child(tsdn, &shard->pac.decay_dirty.mtx);
|
||||
malloc_mutex_postfork_child(tsdn, &shard->pac.decay_muzzy.mtx);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -148,7 +148,7 @@ pa_shard_mtx_stats_read(tsdn_t *tsdn, pa_shard_t *shard,
|
||||
pa_shard_mtx_stats_read_single(tsdn, mutex_prof_data,
|
||||
&shard->pac.ecache_retained.mtx, arena_prof_mutex_extents_retained);
|
||||
pa_shard_mtx_stats_read_single(tsdn, mutex_prof_data,
|
||||
&shard->decay_dirty.mtx, arena_prof_mutex_decay_dirty);
|
||||
&shard->pac.decay_dirty.mtx, arena_prof_mutex_decay_dirty);
|
||||
pa_shard_mtx_stats_read_single(tsdn, mutex_prof_data,
|
||||
&shard->decay_muzzy.mtx, arena_prof_mutex_decay_muzzy);
|
||||
&shard->pac.decay_muzzy.mtx, arena_prof_mutex_decay_muzzy);
|
||||
}
|
||||
|
@@ -5,7 +5,8 @@
|
||||
|
||||
bool
|
||||
pac_init(tsdn_t *tsdn, pac_t *pac, unsigned ind, emap_t *emap,
|
||||
edata_cache_t *edata_cache) {
|
||||
edata_cache_t *edata_cache, nstime_t *cur_time, ssize_t dirty_decay_ms,
|
||||
ssize_t muzzy_decay_ms) {
|
||||
/*
|
||||
* Delay coalescing for dirty extents despite the disruptive effect on
|
||||
* memory layout for best-fit extent allocation, since cached extents
|
||||
@@ -37,6 +38,12 @@ pac_init(tsdn_t *tsdn, pac_t *pac, unsigned ind, emap_t *emap,
|
||||
if (ecache_grow_init(tsdn, &pac->ecache_grow)) {
|
||||
return true;
|
||||
}
|
||||
if (decay_init(&pac->decay_dirty, cur_time, dirty_decay_ms)) {
|
||||
return true;
|
||||
}
|
||||
if (decay_init(&pac->decay_muzzy, cur_time, muzzy_decay_ms)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
pac->emap = emap;
|
||||
pac->edata_cache = edata_cache;
|
||||
|
Reference in New Issue
Block a user