Decay: move in some background_thread accesses.

This commit is contained in:
David Goldblatt 2020-03-09 19:16:34 -07:00 committed by David Goldblatt
parent cdb916ed3f
commit d1d7e1076b
2 changed files with 15 additions and 4 deletions

View File

@ -105,6 +105,17 @@ decay_epoch_npages_delta(const decay_t *decay) {
return decay->backlog[SMOOTHSTEP_NSTEPS - 1]; return decay->backlog[SMOOTHSTEP_NSTEPS - 1];
} }
/*
* Current epoch duration, in nanoseconds. Given that new epochs are started
* somewhat haphazardly, this is not necessarily exactly the time between any
* two calls to decay_maybe_advance_epoch; see the comments on fields in the
* decay_t.
*/
static inline uint64_t
decay_epoch_duration_ns(const decay_t *decay) {
return nstime_ns(&decay->interval);
}
/* /*
* Returns true if the passed in decay time setting is valid. * Returns true if the passed in decay time setting is valid.
* < -1 : invalid * < -1 : invalid

View File

@ -121,14 +121,14 @@ arena_decay_compute_purge_interval_impl(tsdn_t *tsdn, decay_t *decay,
} }
uint64_t interval; uint64_t interval;
ssize_t decay_time = atomic_load_zd(&decay->time_ms, ATOMIC_RELAXED); ssize_t decay_time = decay_ms_read(decay);
if (decay_time <= 0) { if (decay_time <= 0) {
/* Purging is eagerly done or disabled currently. */ /* Purging is eagerly done or disabled currently. */
interval = BACKGROUND_THREAD_INDEFINITE_SLEEP; interval = BACKGROUND_THREAD_INDEFINITE_SLEEP;
goto label_done; goto label_done;
} }
uint64_t decay_interval_ns = nstime_ns(&decay->interval); uint64_t decay_interval_ns = decay_epoch_duration_ns(decay);
assert(decay_interval_ns > 0); assert(decay_interval_ns > 0);
size_t npages = ecache_npages_get(ecache); size_t npages = ecache_npages_get(ecache);
if (npages == 0) { if (npages == 0) {
@ -674,12 +674,12 @@ background_thread_interval_check(tsdn_t *tsdn, arena_t *arena, decay_t *decay,
goto label_done; goto label_done;
} }
ssize_t decay_time = atomic_load_zd(&decay->time_ms, ATOMIC_RELAXED); ssize_t decay_time = decay_ms_read(decay);
if (decay_time <= 0) { if (decay_time <= 0) {
/* Purging is eagerly done or disabled currently. */ /* Purging is eagerly done or disabled currently. */
goto label_done_unlock2; goto label_done_unlock2;
} }
uint64_t decay_interval_ns = nstime_ns(&decay->interval); uint64_t decay_interval_ns = decay_epoch_duration_ns(decay);
assert(decay_interval_ns > 0); assert(decay_interval_ns > 0);
nstime_t diff; nstime_t diff;