Convert arena_decay_t's time to be atomically synchronized.

This commit is contained in:
Jason Evans
2017-03-01 11:21:18 -08:00
parent ff55f07eb6
commit d61a5f76b2
4 changed files with 33 additions and 17 deletions

View File

@@ -39,7 +39,7 @@ void arena_extent_ralloc_large_shrink(tsdn_t *tsdn, arena_t *arena,
extent_t *extent, size_t oldsize);
void arena_extent_ralloc_large_expand(tsdn_t *tsdn, arena_t *arena,
extent_t *extent, size_t oldsize);
ssize_t arena_decay_time_get(tsdn_t *tsdn, arena_t *arena);
ssize_t arena_decay_time_get(arena_t *arena);
bool arena_decay_time_set(tsdn_t *tsdn, arena_t *arena, ssize_t decay_time);
void arena_purge(tsdn_t *tsdn, arena_t *arena, bool all);
void arena_maybe_purge(tsdn_t *tsdn, arena_t *arena);

View File

@@ -36,15 +36,22 @@ struct arena_bin_info_s {
bitmap_info_t bitmap_info;
};
typedef union {
size_t u; /* Used for atomic operations. */
ssize_t s; /* Time may be negative (means "never"). */
} arena_decay_time_t;
struct arena_decay_s {
/* Synchronizes all fields. */
/* Synchronizes all non-atomic fields. */
malloc_mutex_t mtx;
/*
* Approximate time in seconds from the creation of a set of unused
* dirty pages until an equivalent set of unused dirty pages is purged
* and/or reused.
*
* Synchronization: atomic.
*/
ssize_t time;
arena_decay_time_t time;
/* time / SMOOTHSTEP_NSTEPS. */
nstime_t interval;
/*