diff options
author | Qi Wang <interwq@gwu.edu> | 2019-05-22 10:21:53 -0700 |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2019-05-22 14:28:38 -0700 |
commit | 1a71533511027dbe3f9d989659efeec446915d6b (patch) | |
tree | a072d2e089fce62bd41bc46c84a95e8273f808f6 /src | |
parent | e13cf65a5f37bbd9b44badb198ccc138cbacc219 (diff) |
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).
Diffstat (limited to 'src')
-rw-r--r-- | src/background_thread.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/background_thread.c b/src/background_thread.c index 5ed6c1c9..57b9b256 100644 --- a/src/background_thread.c +++ b/src/background_thread.c @@ -799,7 +799,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); |