]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/onode-staged-tree: switch to and test larger node sizes
authorYingxin Cheng <yingxin.cheng@intel.com>
Tue, 8 Jun 2021 07:19:33 +0000 (15:19 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 11 Jun 2021 14:59:18 +0000 (22:59 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h
src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h
src/crimson/os/seastore/onode_manager/staged-fltree/value.cc
src/crimson/os/seastore/onode_manager/staged-fltree/value.h
src/test/crimson/seastore/onode_tree/test_staged_fltree.cc
src/test/crimson/seastore/onode_tree/test_value.h
src/tools/crimson/perf_staged_fltree.cc

index 1444ebbb6d0886adcaa17b9dbf7b6fa253d1f6a0..47106a8c3466c4077cf8ee728be9a58046a660e1 100644 (file)
@@ -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 {
index dcf6ed1e927ade4320f8799b2f71df632b8e222a..cd60a103fa8cf94f57138d419fb23fdcbfb4d714 100644 (file)
@@ -155,7 +155,8 @@ class KVPool {
   }
 
   static KVPool create_raw_range(
-      const std::vector<size_t>& str_sizes,
+      const std::vector<size_t>& ns_sizes,
+      const std::vector<size_t>& oid_sizes,
       const std::vector<size_t>& value_sizes,
       const std::pair<index_t, index_t>& range2,
       const std::pair<index_t, index_t>& 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) {
index 2b4ec61c8ef9594874dbc45620b2f40c31a24972..d7e21cdcc6012a147866b3ec38522adf85c59694 100644 (file)
@@ -97,6 +97,9 @@ build_value_recorder_by_type(ceph::bufferlist& encoded,
   case value_magic_t::TEST_BOUNDED:
     ret = std::make_unique<BoundedValue::Recorder>(encoded);
     break;
+  case value_magic_t::TEST_EXTENDED:
+    ret = std::make_unique<ExtendedValue::Recorder>(encoded);
+    break;
   default:
     ret = nullptr;
     break;
index 2aa7ee8d40fcbbe35c5d88e873b1e3e5622bb9ed..dd3afd54c417211babe211a0108b8bcf8c0813ff 100644 (file)
@@ -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 << ")";
   }
index 4d222aedef08e045cbdfb5287d28b1eff9ad82e0..59ee51a82042e2f1f2ed9e25f5da5c203773db57 100644 (file)
@@ -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<test_item_t>::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<test_item_t>::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<SeastoreNodeExtentManager<true>*>(moved_nm.get());
-    auto tree = std::make_unique<TreeBuilder<TRACK_CURSORS, BoundedValue>>(
+    auto tree = std::make_unique<TreeBuilder<TRACK_CURSORS, ExtendedValue>>(
         kvs, std::move(moved_nm));
     unsigned num_ops = 0;
     unsigned num_ops_eagain = 0;
index 42795529b6d9d1242c986fb2e861b0740a9060c3..4a2a21b98fa73c254fffd6e9873d8f03e236ac9a 100644 (file)
@@ -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>;
 
 }
index fabaea868c344d0d07d90689e1bc8b2b30e06f61..88a98ef9565666d85f8184084548a7a23175ad66 100644 (file)
@@ -30,7 +30,7 @@ class PerfTree : public TMTestState {
   seastar::future<> run(KVPool<test_item_t>& kvs, double erase_ratio) {
     return tm_setup().then([this, &kvs, erase_ratio] {
       return seastar::async([this, &kvs, erase_ratio] {
-        auto tree = std::make_unique<TreeBuilder<TRACK, BoundedValue>>(kvs,
+        auto tree = std::make_unique<TreeBuilder<TRACK, ExtendedValue>>(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<std::vector<size_t>>();
+    auto ns_sizes = config["ns-sizes"].as<std::vector<size_t>>();
+    auto oid_sizes = config["oid-sizes"].as<std::vector<size_t>>();
     auto onode_sizes = config["onode-sizes"].as<std::vector<size_t>>();
     auto range2 = config["range2"].as<std::vector<int>>();
     ceph_assert(range2.size() == 2);
@@ -113,7 +114,7 @@ seastar::future<> run(const bpo::variables_map& config) {
     });
 
     auto kvs = KVPool<test_item_t>::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<bool>()->default_value(false),
      "track inserted cursors")
-    ("str-sizes", bpo::value<std::vector<size_t>>()->default_value(
-        {8, 11, 64, 256, 301, 320}),
-     "sizes of ns/oid strings")
+    ("ns-sizes", bpo::value<std::vector<size_t>>()->default_value(
+        {8, 11, 64, 128, 255, 256}),
+     "sizes of ns strings")
+    ("oid-sizes", bpo::value<std::vector<size_t>>()->default_value(
+        {8, 13, 64, 512, 2035, 2048}),
+     "sizes of oid strings")
     ("onode-sizes", bpo::value<std::vector<size_t>>()->default_value(
-        {8, 16, 128, 512, 576, 640}),
+        {8, 16, 128, 576, 992, 1200}),
      "sizes of onode")
     ("range2", bpo::value<std::vector<int>>()->default_value(
         {0, 128}),