From d7ca34e12fd9dd652fe12b5593bf2ccd4ce35b60 Mon Sep 17 00:00:00 2001 From: Jianpeng Ma Date: Thu, 20 Sep 2018 21:52:53 +0800 Subject: [PATCH] common/Finisher: only queue empty only wake up waiter. Signed-off-by: Jianpeng Ma --- src/common/Finisher.h | 39 ++++++++++++++++ src/common/legacy_config_opts.h | 1 - src/common/options.cc | 4 -- src/os/ObjectStore.h | 9 +++- src/os/bluestore/BlueStore.cc | 80 ++++++++++++++------------------- src/os/bluestore/BlueStore.h | 10 ++--- src/os/filestore/FileStore.h | 3 ++ src/os/kstore/KStore.h | 3 ++ src/os/memstore/MemStore.h | 5 +++ src/osd/OSD.cc | 47 +++++++++++++++++-- src/osd/OSD.h | 14 ++++-- 11 files changed, 150 insertions(+), 65 deletions(-) diff --git a/src/common/Finisher.h b/src/common/Finisher.h index d463680a8c8..4b6d2d3c8a1 100644 --- a/src/common/Finisher.h +++ b/src/common/Finisher.h @@ -184,4 +184,43 @@ public: } }; +class ContextQueue { + list q; + std::mutex q_mutex; + Mutex& mutex; + Cond& cond; +public: + ContextQueue(Mutex& mut, Cond& con) : mutex(mut), cond(con) {} + + void queue(list& ls) { + { + std::scoped_lock l(q_mutex); + if (q.empty()) { + q.swap(ls); + } else { + q.insert(q.end(), ls.begin(), ls.end()); + } + } + + mutex.Lock(); + cond.SignalOne(); + mutex.Unlock(); + + ls.clear(); + } + + void swap(list& ls) { + ls.clear(); + std::scoped_lock l(q_mutex); + if (!q.empty()) { + q.swap(ls); + } + } + + bool empty() { + std::scoped_lock l(q_mutex); + return q.empty(); + } +}; + #endif diff --git a/src/common/legacy_config_opts.h b/src/common/legacy_config_opts.h index 2b3fb0d62c4..071c627f985 100644 --- a/src/common/legacy_config_opts.h +++ b/src/common/legacy_config_opts.h @@ -1070,7 +1070,6 @@ OPTION(bluestore_debug_omit_block_device_write, OPT_BOOL) OPTION(bluestore_debug_fsck_abort, OPT_BOOL) OPTION(bluestore_debug_omit_kv_commit, OPT_BOOL) OPTION(bluestore_debug_permit_any_bdev_label, OPT_BOOL) -OPTION(bluestore_shard_finishers, OPT_BOOL) OPTION(bluestore_debug_random_read_err, OPT_DOUBLE) OPTION(bluestore_debug_inject_bug21040, OPT_BOOL) OPTION(bluestore_debug_inject_csum_err_probability, OPT_FLOAT) diff --git a/src/common/options.cc b/src/common/options.cc index d1c295d3fb3..8d9bdcf5498 100644 --- a/src/common/options.cc +++ b/src/common/options.cc @@ -4340,10 +4340,6 @@ std::vector