]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: release txc's extents in bulky manner.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 22 Sep 2017 13:56:17 +0000 (15:56 +0200)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 14 Mar 2019 16:41:07 +0000 (19:41 +0300)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit 5e1e6f939308f62596187696e9a499fc052e9845)

src/os/bluestore/BlueStore.cc

index fde9b123101b7d98cc13c059629f22bfff080ddd..78352bc194ba68cd07bde445c6f99b3a77fb38ec 100644 (file)
@@ -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<uint64_t> 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();
 }