From: Yingxin Cheng Date: Tue, 8 Jun 2021 07:19:33 +0000 (+0800) Subject: crimson/onode-staged-tree: switch to and test larger node sizes X-Git-Tag: v17.1.0~1674^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ec3b7828dc4a34aaecd65e2581f7a8e31750daea;p=ceph.git crimson/onode-staged-tree: switch to and test larger node sizes Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h index 1444ebbb6d08..47106a8c3466 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h @@ -12,11 +12,16 @@ namespace crimson::os::seastore::onode { struct FLTreeOnode final : Onode, Value { static constexpr tree_conf_t TREE_CONF = { value_magic_t::ONODE, - 128, // max_ns_size - 320, // max_oid_size + 256, // max_ns_size + // same to option osd_max_object_namespace_len + 2048, // max_oid_size + // same to option osd_max_object_name_len 1200, // max_value_payload_size - 4096, // internal_node_size - 4096 // leaf_node_size + // see crimson::os::seastore::onode_layout_t + 8192, // internal_node_size + // see the formula in validate_tree_config + 16384 // leaf_node_size + // see the formula in validate_tree_config }; enum class status_t { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h index dcf6ed1e927a..cd60a103fa8c 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h @@ -155,7 +155,8 @@ class KVPool { } static KVPool create_raw_range( - const std::vector& str_sizes, + const std::vector& ns_sizes, + const std::vector& oid_sizes, const std::vector& value_sizes, const std::pair& range2, const std::pair& range1, @@ -179,8 +180,8 @@ class KVPool { ns_size = 0; oid_size = 0; } else { - ns_size = str_sizes[rd() % str_sizes.size()]; - oid_size = str_sizes[rd() % str_sizes.size()]; + ns_size = ns_sizes[rd() % ns_sizes.size()]; + oid_size = oid_sizes[rd() % oid_sizes.size()]; assert(ns_size && oid_size); } for (index_t k = range0.first; k < range0.second; ++k) { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/value.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/value.cc index 2b4ec61c8ef9..d7e21cdcc601 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/value.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/value.cc @@ -97,6 +97,9 @@ build_value_recorder_by_type(ceph::bufferlist& encoded, case value_magic_t::TEST_BOUNDED: ret = std::make_unique(encoded); break; + case value_magic_t::TEST_EXTENDED: + ret = std::make_unique(encoded); + break; default: ret = nullptr; break; diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/value.h b/src/crimson/os/seastore/onode_manager/staged-fltree/value.h index 2aa7ee8d40fc..dd3afd54c417 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/value.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/value.h @@ -19,6 +19,7 @@ enum class value_magic_t : uint8_t { ONODE = 0x52, TEST_UNBOUND, TEST_BOUNDED, + TEST_EXTENDED, }; inline std::ostream& operator<<(std::ostream& os, const value_magic_t& magic) { switch (magic) { @@ -28,6 +29,8 @@ inline std::ostream& operator<<(std::ostream& os, const value_magic_t& magic) { return os << "TEST_UNBOUND"; case value_magic_t::TEST_BOUNDED: return os << "TEST_BOUNDED"; + case value_magic_t::TEST_EXTENDED: + return os << "TEST_EXTENDED"; default: return os << "UNKNOWN(" << magic << ")"; } diff --git a/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc b/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc index 4d222aedef08..59ee51a82042 100644 --- a/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc +++ b/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc @@ -1522,7 +1522,8 @@ TEST_F(d_seastore_tm_test_t, 6_random_tree_insert_erase) constexpr bool TEST_SEASTORE = true; constexpr bool TRACK_CURSORS = true; auto kvs = KVPool::create_raw_range( - {8, 11, 64, 256, 301, 320}, + {8, 11, 64, 256, 301, 320}, + {8, 11, 64, 256, 301, 320}, {8, 16, 128, 512, 576, 640}, {0, 16}, {0, 10}, {0, 4}); auto moved_nm = (TEST_SEASTORE ? NodeExtentManager::create_seastore(*tm) @@ -1619,13 +1620,14 @@ TEST_F(d_seastore_tm_test_t, 7_tree_insert_erase_eagain) constexpr double EAGAIN_PROBABILITY = 0.1; constexpr bool TRACK_CURSORS = false; auto kvs = KVPool::create_raw_range( - {8, 11, 64, 256, 301, 320}, - {8, 16, 128, 512, 576, 640}, + {8, 11, 64, 128, 255, 256}, + {8, 13, 64, 512, 2035, 2048}, + {8, 16, 128, 576, 992, 1200}, {0, 8}, {0, 10}, {0, 4}); auto moved_nm = NodeExtentManager::create_seastore( *tm, L_ADDR_MIN, EAGAIN_PROBABILITY); auto p_nm = static_cast*>(moved_nm.get()); - auto tree = std::make_unique>( + auto tree = std::make_unique>( kvs, std::move(moved_nm)); unsigned num_ops = 0; unsigned num_ops_eagain = 0; diff --git a/src/test/crimson/seastore/onode_tree/test_value.h b/src/test/crimson/seastore/onode_tree/test_value.h index 42795529b6d9..4a2a21b98fa7 100644 --- a/src/test/crimson/seastore/onode_tree/test_value.h +++ b/src/test/crimson/seastore/onode_tree/test_value.h @@ -203,8 +203,11 @@ class TestValue final : public Value { }; using UnboundedValue = TestValue< - value_magic_t::TEST_UNBOUND, 4096, 4096, 4096, 4096, 4096, false>; + value_magic_t::TEST_UNBOUND, 4096, 4096, 4096, 4096, 4096, false>; using BoundedValue = TestValue< - value_magic_t::TEST_BOUNDED, 320, 320, 640, 4096, 4096, true>; + value_magic_t::TEST_BOUNDED, 320, 320, 640, 4096, 4096, true>; +// should be the same configuration with FLTreeOnode +using ExtendedValue = TestValue< + value_magic_t::TEST_EXTENDED, 256, 2048, 1200, 8192, 16384, true>; } diff --git a/src/tools/crimson/perf_staged_fltree.cc b/src/tools/crimson/perf_staged_fltree.cc index fabaea868c34..88a98ef95656 100644 --- a/src/tools/crimson/perf_staged_fltree.cc +++ b/src/tools/crimson/perf_staged_fltree.cc @@ -30,7 +30,7 @@ class PerfTree : public TMTestState { seastar::future<> run(KVPool& kvs, double erase_ratio) { return tm_setup().then([this, &kvs, erase_ratio] { return seastar::async([this, &kvs, erase_ratio] { - auto tree = std::make_unique>(kvs, + auto tree = std::make_unique>(kvs, (is_dummy ? NodeExtentManager::create_dummy(true) : NodeExtentManager::create_seastore(*tm))); { @@ -88,7 +88,8 @@ seastar::future<> run(const bpo::variables_map& config) { } else { ceph_abort(false && "invalid backend"); } - auto str_sizes = config["str-sizes"].as>(); + auto ns_sizes = config["ns-sizes"].as>(); + auto oid_sizes = config["oid-sizes"].as>(); auto onode_sizes = config["onode-sizes"].as>(); auto range2 = config["range2"].as>(); ceph_assert(range2.size() == 2); @@ -113,7 +114,7 @@ seastar::future<> run(const bpo::variables_map& config) { }); auto kvs = KVPool::create_raw_range( - str_sizes, onode_sizes, + ns_sizes, oid_sizes, onode_sizes, {range2[0], range2[1]}, {range1[0], range1[1]}, {range0[0], range0[1]}); @@ -131,11 +132,14 @@ int main(int argc, char** argv) "tree backend: dummy, seastore") ("tracked", bpo::value()->default_value(false), "track inserted cursors") - ("str-sizes", bpo::value>()->default_value( - {8, 11, 64, 256, 301, 320}), - "sizes of ns/oid strings") + ("ns-sizes", bpo::value>()->default_value( + {8, 11, 64, 128, 255, 256}), + "sizes of ns strings") + ("oid-sizes", bpo::value>()->default_value( + {8, 13, 64, 512, 2035, 2048}), + "sizes of oid strings") ("onode-sizes", bpo::value>()->default_value( - {8, 16, 128, 512, 576, 640}), + {8, 16, 128, 576, 992, 1200}), "sizes of onode") ("range2", bpo::value>()->default_value( {0, 128}),