diff options
author | Oran Agra <oran@redislabs.com> | 2019-05-30 11:51:58 +0300 |
---|---|---|
committer | Oran Agra <oran@redislabs.com> | 2019-06-02 15:27:38 +0300 |
commit | 2fec7d9c6c630db3bcb13a07a08c39404abad447 (patch) | |
tree | 35ee720ada72dc8dfea497e7a5a46bad97fed39d /deps/jemalloc | |
parent | fd0ee469ab165d0e005e9fe1fca1c4f5c604cd56 (diff) | |
download | redis-2fec7d9c6c630db3bcb13a07a08c39404abad447.tar.gz |
Jemalloc: Avoid blocking on background thread lock for stats.
Background threads may run for a long time, especially when the # of dirty pages
is high. Avoid blocking stats calls because of this (which may cause latency
spikes).
see https://github.com/jemalloc/jemalloc/issues/1502
cherry picked from commit 1a71533511027dbe3f9d989659efeec446915d6b
Diffstat (limited to 'deps/jemalloc')
-rw-r--r-- | deps/jemalloc/src/background_thread.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/deps/jemalloc/src/background_thread.c b/deps/jemalloc/src/background_thread.c index 3517a3bb8..457669c9e 100644 --- a/deps/jemalloc/src/background_thread.c +++ b/deps/jemalloc/src/background_thread.c @@ -787,7 +787,13 @@ background_thread_stats_read(tsdn_t *tsdn, background_thread_stats_t *stats) { nstime_init(&stats->run_interval, 0); for (unsigned i = 0; i < max_background_threads; i++) { background_thread_info_t *info = &background_thread_info[i]; - malloc_mutex_lock(tsdn, &info->mtx); + if (malloc_mutex_trylock(tsdn, &info->mtx)) { + /* + * Each background thread run may take a long time; + * avoid waiting on the stats if the thread is active. + */ + continue; + } if (info->state != background_thread_stopped) { num_runs += info->tot_n_runs; nstime_add(&stats->run_interval, &info->tot_sleep_time); |