From af3364cc65ed1bc298cb90d1e985fd904b781e10 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Sun, 7 Aug 2022 16:00:23 +0800 Subject: [PATCH] crimson/os/seastore/epm: configure prefer_ool through the primary_device Signed-off-by: Yingxin Cheng --- .../os/seastore/extent_placement_manager.h | 14 +++++++++++--- src/crimson/os/seastore/transaction_manager.cc | 2 +- src/crimson/os/seastore/transaction_manager.h | 17 +++++------------ .../crimson/seastore/test_btree_lba_manager.cc | 2 +- src/test/crimson/seastore/test_cbjournal.cc | 9 +-------- .../crimson/seastore/test_seastore_cache.cc | 2 +- 6 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index 6a957a20464..4f3dae14a67 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -86,8 +86,7 @@ private: class ExtentPlacementManager { public: - ExtentPlacementManager(bool prefer_ool) - : prefer_ool{prefer_ool} { + ExtentPlacementManager() { devices_by_id.resize(DEVICE_ID_MAX, nullptr); } @@ -115,9 +114,16 @@ public: auto device_id = device->get_device_id(); ceph_assert(devices_by_id[device_id] == nullptr); devices_by_id[device_id] = device; + ++num_devices; if (is_primary) { ceph_assert(primary_device == nullptr); primary_device = device; + if (device->get_device_type() == device_type_t::SEGMENTED) { + prefer_ool = false; + } else { + ceph_assert(device->get_device_type() == device_type_t::RANDOM_BLOCK); + prefer_ool = true; + } } } @@ -135,7 +141,8 @@ public: using open_ertr = ExtentOolWriter::open_ertr; open_ertr::future<> open() { LOG_PREFIX(ExtentPlacementManager::open); - SUBINFO(seastore_journal, "started"); + SUBINFO(seastore_journal, "started with {} devices", num_devices); + ceph_assert(primary_device != nullptr); return crimson::do_for_each(data_writers_by_gen, [](auto &writer) { return writer->open(); }).safe_then([this] { @@ -284,6 +291,7 @@ private: std::vector devices_by_id; Device* primary_device = nullptr; + std::size_t num_devices = 0; }; using ExtentPlacementManagerRef = std::unique_ptr; diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 12a495cb85e..31223dffa02 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -624,7 +624,7 @@ TransactionManager::~TransactionManager() {} TransactionManagerRef make_transaction_manager(tm_make_config_t config) { LOG_PREFIX(make_transaction_manager); - auto epm = std::make_unique(config.epm_prefer_ool); + auto epm = std::make_unique(); auto cache = std::make_unique(*epm); auto lba_manager = lba_manager::create_lba_manager(*cache); auto sms = std::make_unique(); diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 28cf66880c6..b3dec1d6a27 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -37,14 +37,11 @@ class Journal; struct tm_make_config_t { bool is_test; journal_type_t j_type; - bool epm_prefer_ool; - reclaim_gen_t default_generation; static tm_make_config_t get_default() { return tm_make_config_t { false, - journal_type_t::SEGMENT_JOURNAL, - false + journal_type_t::SEGMENT_JOURNAL }; } static tm_make_config_t get_test_segmented_journal() { @@ -52,8 +49,7 @@ struct tm_make_config_t { SUBWARN(seastore_tm, "test mode enabled!"); return tm_make_config_t { true, - journal_type_t::SEGMENT_JOURNAL, - false + journal_type_t::SEGMENT_JOURNAL }; } static tm_make_config_t get_test_cb_journal() { @@ -61,8 +57,7 @@ struct tm_make_config_t { SUBWARN(seastore_tm, "test mode enabled!"); return tm_make_config_t { true, - journal_type_t::CIRCULARBOUNDED_JOURNAL, - true + journal_type_t::CIRCULARBOUNDED_JOURNAL }; } @@ -71,10 +66,8 @@ struct tm_make_config_t { private: tm_make_config_t( bool is_test, - journal_type_t j_type, - bool epm_prefer_ool) - : is_test(is_test), j_type(j_type), - epm_prefer_ool(epm_prefer_ool) + journal_type_t j_type) + : is_test(is_test), j_type(j_type) {} }; diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 113e0308401..441f0d11353 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -115,7 +115,7 @@ struct btree_test_base : }).safe_then([this] { sms.reset(new SegmentManagerGroup()); journal = journal::make_segmented(*this); - epm.reset(new ExtentPlacementManager(false)); + epm.reset(new ExtentPlacementManager()); cache.reset(new Cache(*epm)); block_size = segment_manager->get_block_size(); diff --git a/src/test/crimson/seastore/test_cbjournal.cc b/src/test/crimson/seastore/test_cbjournal.cc index beba8dd0ef1..d7ed72eae32 100644 --- a/src/test/crimson/seastore/test_cbjournal.cc +++ b/src/test/crimson/seastore/test_cbjournal.cc @@ -121,9 +121,6 @@ struct entry_validator_t { struct cbjournal_test_t : public seastar_test_suite_t { - segment_manager::EphemeralSegmentManagerRef segment_manager; // Need to be deleted, just for Cache - ExtentPlacementManagerRef epm; - Cache cache; std::vector entries; std::unique_ptr cbj; random_block_device::RBMDevice *device; @@ -133,11 +130,7 @@ struct cbjournal_test_t : public seastar_test_suite_t CircularBoundedJournal::mkfs_config_t config; WritePipeline pipeline; - cbjournal_test_t() : - segment_manager(segment_manager::create_test_ephemeral()), - epm(new ExtentPlacementManager(true)), - cache(*epm) - { + cbjournal_test_t() { device = new random_block_device::TestMemory(CBTEST_DEFAULT_TEST_SIZE + CBTEST_DEFAULT_BLOCK_SIZE); cbj.reset(new CircularBoundedJournal(device, std::string())); device_id_t d_id = 1 << (std::numeric_limits::digits - 1); diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index 06c1ae86192..b9af8b2ccd9 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -88,7 +88,7 @@ struct cache_test_t : public seastar_test_suite_t { return segment_manager->mkfs( segment_manager::get_ephemeral_device_config(0, 1)); }).safe_then([this] { - epm.reset(new ExtentPlacementManager(false)); + epm.reset(new ExtentPlacementManager()); cache.reset(new Cache(*epm)); current = paddr_t::make_seg_paddr(segment_id_t(segment_manager->get_device_id(), 0), 0); epm->add_device(segment_manager.get(), true); -- 2.39.5