From: Jianpeng Ma Date: Tue, 2 Jul 2019 07:24:28 +0000 (+0800) Subject: osd/OSD: only wake up empty pqueue. X-Git-Tag: v15.1.0~2103^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=28cad5b80afd220b371a79fe00c735e470204e72;p=ceph.git osd/OSD: only wake up empty pqueue. Reduce unnecessary wakeups. Especially for heavy load scenarios, the queue is basically not empty. Signed-off-by: Jianpeng Ma --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index f85d33cead1a..9d8596d4155a 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -10520,6 +10520,7 @@ void OSD::ShardedOpWQ::_enqueue(OpQueueItem&& item) { sdata->shard_lock.lock(); dout(20) << __func__ << " " << item << dendl; + bool empty = sdata->pqueue->empty(); if (priority >= osd->op_prio_cutoff) sdata->pqueue->enqueue_strict( item.get_owner(), priority, std::move(item)); @@ -10528,8 +10529,10 @@ void OSD::ShardedOpWQ::_enqueue(OpQueueItem&& item) { item.get_owner(), priority, cost, std::move(item)); sdata->shard_lock.unlock(); - std::lock_guard l{sdata->sdata_wait_lock}; - sdata->sdata_cond.notify_one(); + if (empty) { + std::lock_guard l{sdata->sdata_wait_lock}; + sdata->sdata_cond.notify_one(); + } } void OSD::ShardedOpWQ::_enqueue_front(OpQueueItem&& item)