From: Radoslaw Zarzynski Date: Fri, 22 Sep 2017 13:56:17 +0000 (+0200) Subject: os/bluestore: release txc's extents in bulky manner. X-Git-Tag: v12.2.12~16^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9e17375be94d8e0c79ea3a11ad77dd61ec054e41;p=ceph.git os/bluestore: release txc's extents in bulky manner. Signed-off-by: Radoslaw Zarzynski (cherry picked from commit 5e1e6f939308f62596187696e9a499fc052e9845) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index fde9b123101..78352bc194b 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8529,13 +8529,18 @@ void BlueStore::_txc_finish(TransContext *txc) void BlueStore::_txc_release_alloc(TransContext *txc) { - // update allocator with full released set + interval_set bulk_release_extents; + // it's expected we're called with lazy_release_lock already taken! if (!cct->_conf->bluestore_debug_no_reuse_blocks) { dout(10) << __func__ << " " << txc << " " << std::hex << txc->released << std::dec << dendl; - alloc->release(txc->released); + // interval_set seems to be too costly for inserting things in + // bstore_kv_final. We could serialize in simpler format and perform + // the merge separately, maybe even in a dedicated thread. + bulk_release_extents.insert(txc->released); } + alloc->release(bulk_release_extents); txc->allocated.clear(); txc->released.clear(); }