From 25ab55a6e7a518a09e7825791a01b4f7f122a936 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Fri, 6 Aug 2021 17:50:13 +0300 Subject: [PATCH] os/bluestore: improve logging around deferred writes Signed-off-by: Igor Fedotov (cherry picked from commit 89a20d63ec7e255d36363bd8977c3fca1d277877) --- src/os/bluestore/BlueStore.cc | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 10e31e8631369..0f360b282ac78 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -13723,6 +13723,10 @@ void BlueStore::_do_write_big( if (!wctx->compress) { auto end = o->extent_map.extent_map.end(); + dout(20) << __func__ << " may be defer: 0x" << std::hex + << offset << "~" << l + << std::dec << dendl; + if (prefer_deferred_size_snapshot && l <= prefer_deferred_size_snapshot * 2) { // Single write that spans two adjusted existing blobs can result @@ -13797,13 +13801,17 @@ void BlueStore::_do_write_big( _do_write_big_apply_deferred(txc, c, o, tail_info, blp, wctx); } + dout(20) << __func__ << " defer big: 0x" << std::hex + << offset << "~" << l + << std::dec << dendl; offset += l; length -= l; - logger->inc(l_bluestore_write_big_blobs, remaining ? 2 : 1); + logger->inc(l_bluestore_write_big_blobs, remaining ? 2 : 1); logger->inc(l_bluestore_write_big_deferred, remaining ? 2 : 1); continue; } } + dout(20) << __func__ << " lookup for blocks to reuse..." << dendl; o->extent_map.punch_hole(c, offset, l, &wctx->old_extents); @@ -13815,7 +13823,6 @@ void BlueStore::_do_write_big( prev_ep = ep; --prev_ep; } - dout(20) << __func__ << " no deferred" << dendl; auto min_off = offset >= max_bsize ? offset - max_bsize : 0; // search suitable extent in both forward and reverse direction in @@ -13825,9 +13832,8 @@ void BlueStore::_do_write_big( do { any_change = false; if (ep != end && ep->logical_offset < offset + max_bsize) { - dout(20) << __func__ << " considering " << *ep << dendl; - dout(20) << __func__ << " considering " << *(ep->blob) - << " bstart 0x" << std::hex << ep->blob_start() << std::dec << dendl; + dout(20) << __func__ << " considering " << *ep + << " bstart 0x" << std::hex << ep->blob_start() << std::dec << dendl; if (offset >= ep->blob_start() && ep->blob->can_reuse_blob(min_alloc_size, max_bsize, @@ -13845,9 +13851,8 @@ void BlueStore::_do_write_big( } if (prev_ep != end && prev_ep->logical_offset >= min_off) { - dout(20) << __func__ << " considering rev " << *prev_ep << dendl; - dout(20) << __func__ << " considering reverse " << *(prev_ep->blob) - << " bstart 0x" << std::hex << prev_ep->blob_start() << std::dec << dendl; + dout(20) << __func__ << " considering rev " << *prev_ep + << " bstart 0x" << std::hex << prev_ep->blob_start() << std::dec << dendl; if (prev_ep->blob->can_reuse_blob(min_alloc_size, max_bsize, offset - prev_ep->blob_start(), &l)) { @@ -13875,6 +13880,10 @@ void BlueStore::_do_write_big( bufferlist t; blp.copy(l, t); wctx->write(offset, b, l, b_off, t, b_off, l, false, new_blob); + dout(20) << __func__ << " schedule write big: 0x" + << std::hex << offset << "~" << l << std::dec + << (new_blob ? " new " : " reuse ") + << *b << dendl; offset += l; length -= l; logger->inc(l_bluestore_write_big_blobs); -- 2.39.5