From df43f472268066c16be34a932f40fe601770b758 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Tue, 16 Jan 2024 10:16:09 +0000 Subject: [PATCH] os/bluestore: Add bluestore_write_v2 conf variable Add new conf variable. bluestore_write_v2 = true : use new _do_write_v2() function bluestore_write_v2 = false : use legacy _do_write() function This variable is read only at start time. Signed-off-by: Adam Kupczyk --- src/common/options/global.yaml.in | 12 ++++++++++++ src/os/bluestore/BlueStore.cc | 8 ++++++-- src/os/bluestore/BlueStore.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index b170a3e9849c4..19aea6408653a 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -5041,6 +5041,18 @@ options: flags: - create with_legacy: false +- name: bluestore_write_v2 + type: bool + level: advanced + desc: Use faster write path + long_desc: Original write path was developed over long time by constantly adding features. + The price was layered inefficiencies gained along the way. + Rework of write path done from scratch clears it and optimizes for typical cases. + Write_v2 is necessary for recompression feature. + default: false + flags: + - startup + with_legacy: false - name: bluestore_allocator type: str level: advanced diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d01ce24fa1504..fe14a13f64911 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -9149,7 +9149,7 @@ int BlueStore::_mount() return r; } } - + use_write_v2 = cct->_conf.get_val("bluestore_write_v2"); _kv_only = false; if (cct->_conf->bluestore_fsck_on_mount) { int rc = fsck(cct->_conf->bluestore_fsck_on_mount_deep); @@ -17400,7 +17400,11 @@ int BlueStore::_write(TransContext *txc, r = -E2BIG; } else { _assign_nid(txc, o); - r = _do_write(txc, c, o, offset, length, bl, fadvise_flags); + if (use_write_v2) { + r = _do_write_v2(txc, c, o, offset, length, bl, fadvise_flags); + } else { + r = _do_write(txc, c, o, offset, length, bl, fadvise_flags); + } txc->write_onode(o); } auto finish = mono_clock::now(); diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 4aac566c61cab..4fd40eee38ecd 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2454,6 +2454,7 @@ private: std::numeric_limits::digits, "not enough bits for min_alloc_size"); bool elastic_shared_blobs = false; ///< use smart ExtentMap::dup to reduce shared blob count + bool use_write_v2 = false; ///< use new write path enum { // Please preserve the order since it's DB persistent -- 2.39.5