From 6a4f0e356c7403f682fb3006c645421da4dc27ad Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 18 May 2022 10:22:21 +0800 Subject: [PATCH] crimson/os/seastore: increase journal size and decrease rewrite-dirty size Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/segment_cleaner.h | 16 +++++++++++++++- src/crimson/os/seastore/transaction_manager.cc | 15 +++++++++++++-- src/crimson/os/seastore/transaction_manager.h | 6 +++--- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/crimson/os/seastore/segment_cleaner.h b/src/crimson/os/seastore/segment_cleaner.h index bc9f09c08ebb6..aad284a6d7e57 100644 --- a/src/crimson/os/seastore/segment_cleaner.h +++ b/src/crimson/os/seastore/segment_cleaner.h @@ -509,6 +509,20 @@ public: } static config_t get_default() { + return config_t{ + 12, // target_journal_segments + 16, // max_journal_segments + .9, // available_ratio_gc_max + .2, // available_ratio_hard_limit + .8, // reclaim_ratio_hard_limit + .6, // reclaim_ratio_gc_threshold + 1<<20,// reclaim_bytes_per_cycle + 1<<17,// rewrite_dirty_bytes_per_cycle + 1<<24 // rewrite_backref_bytes_per_cycle + }; + } + + static config_t get_test() { return config_t{ 2, // target_journal_segments 4, // max_journal_segments @@ -517,7 +531,7 @@ public: .8, // reclaim_ratio_hard_limit .6, // reclaim_ratio_gc_threshold 1<<20,// reclaim_bytes_per_cycle - 1<<20,// rewrite_dirty_bytes_per_cycle + 1<<17,// rewrite_dirty_bytes_per_cycle 1<<24 // rewrite_backref_bytes_per_cycle }; } diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 28e9b77bd83c1..16ef8ef5ae4d0 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -644,12 +644,23 @@ TransactionManagerRef make_transaction_manager(tm_make_config_t config) auto lba_manager = lba_manager::create_lba_manager(*cache); auto sms = std::make_unique(); auto backref_manager = create_backref_manager(*sms, *cache); + + bool cleaner_is_detailed; + SegmentCleaner::config_t cleaner_config; + if (config.is_test) { + cleaner_is_detailed = true; + cleaner_config = SegmentCleaner::config_t::get_test(); + } else { + cleaner_is_detailed = false; + cleaner_config = SegmentCleaner::config_t::get_default(); + } auto segment_cleaner = std::make_unique( - SegmentCleaner::config_t::get_default(), + cleaner_config, std::move(sms), *backref_manager, *cache, - config.detailed); + cleaner_is_detailed); + JournalRef journal; if (config.j_type == journal_type_t::SEGMENT_JOURNAL) { journal = journal::make_segmented(*segment_cleaner); diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 41b7de9581c35..558fd37a63de6 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -35,7 +35,7 @@ namespace crimson::os::seastore { class Journal; struct tm_make_config_t { - bool detailed = true; + bool is_test = true; journal_type_t j_type = journal_type_t::SEGMENT_JOURNAL; placement_hint_t default_placement_hint = placement_hint_t::HOT; @@ -65,10 +65,10 @@ struct tm_make_config_t { tm_make_config_t &operator=(const tm_make_config_t &) = default; private: tm_make_config_t( - bool detailed, + bool is_test, journal_type_t j_type, placement_hint_t default_placement_hint) - : detailed(detailed), j_type(j_type), + : is_test(is_test), j_type(j_type), default_placement_hint(default_placement_hint) {} }; -- 2.39.5