From: Zhang Song Date: Tue, 14 Feb 2023 09:47:35 +0000 (+0800) Subject: crimson/os/seastore: add EPHEMERAL_COLD device type X-Git-Tag: v18.1.0~50^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e934989c195488af7322d4e0b396290469c077b9;p=ceph-ci.git crimson/os/seastore: add EPHEMERAL_COLD device type rename SEGMENTED_EPHEMERAL to EPHEMERAL_MAIN Signed-off-by: Zhang Song (cherry picked from commit b40304092b6ce8b29e97437642928cc84afa1be5) --- diff --git a/src/crimson/os/seastore/seastore_types.cc b/src/crimson/os/seastore/seastore_types.cc index 6d1b4e50ca6..a14201cbcf7 100644 --- a/src/crimson/os/seastore/seastore_types.cc +++ b/src/crimson/os/seastore/seastore_types.cc @@ -797,8 +797,10 @@ std::ostream& operator<<(std::ostream& out, device_type_t t) return out << "SSD"; case device_type_t::ZNS: return out << "ZNS"; - case device_type_t::SEGMENTED_EPHEMERAL: - return out << "SEGMENTED_EPHEMERAL"; + case device_type_t::EPHEMERAL_COLD: + return out << "EPHEMERAL_COLD"; + case device_type_t::EPHEMERAL_MAIN: + return out << "EPHEMERAL_MAIN"; case device_type_t::RANDOM_BLOCK_SSD: return out << "RANDOM_BLOCK_SSD"; case device_type_t::RANDOM_BLOCK_EPHEMERAL: diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 7d7fd395c8c..15e1ad28ad6 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -876,7 +876,8 @@ enum class device_type_t : uint8_t { HDD, SSD, ZNS, - SEGMENTED_EPHEMERAL, + EPHEMERAL_COLD, + EPHEMERAL_MAIN, RANDOM_BLOCK_SSD, RANDOM_BLOCK_EPHEMERAL, NUM_TYPES @@ -899,7 +900,7 @@ constexpr backend_type_t get_default_backend_of_device(device_type_t dtype) { assert(dtype != device_type_t::NONE && dtype != device_type_t::NUM_TYPES); if (dtype >= device_type_t::HDD && - dtype <= device_type_t::SEGMENTED_EPHEMERAL) { + dtype <= device_type_t::EPHEMERAL_MAIN) { return backend_type_t::SEGMENTED; } else { return backend_type_t::RANDOM_BLOCK; diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.cc b/src/crimson/os/seastore/segment_manager/ephemeral.cc index f8a20167fb7..4a4873afb94 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.cc +++ b/src/crimson/os/seastore/segment_manager/ephemeral.cc @@ -30,11 +30,21 @@ EphemeralSegmentManagerRef create_test_ephemeral() { } device_config_t get_ephemeral_device_config( - std::size_t index, std::size_t num_devices) + std::size_t index, + std::size_t num_main_devices, + std::size_t num_cold_devices) { + auto num_devices = num_main_devices + num_cold_devices; assert(num_devices > index); + auto get_sec_dtype = [num_main_devices](std::size_t idx) { + if (idx < num_main_devices) { + return device_type_t::EPHEMERAL_MAIN; + } else { + return device_type_t::EPHEMERAL_COLD; + } + }; + magic_t magic = 0xabcd; - auto type = device_type_t::SEGMENTED_EPHEMERAL; bool is_major_device; secondary_device_set_t secondary_devices; if (index == 0) { @@ -44,7 +54,12 @@ device_config_t get_ephemeral_device_config( ++secondary_index) { device_id_t secondary_id = static_cast(secondary_index); secondary_devices.insert({ - secondary_index, device_spec_t{magic, type, secondary_id} + secondary_index, + device_spec_t{ + magic, + get_sec_dtype(secondary_index), + secondary_id + } }); } } else { // index > 0 @@ -54,7 +69,11 @@ device_config_t get_ephemeral_device_config( device_id_t id = static_cast(index); seastore_meta_t meta = {}; return {is_major_device, - device_spec_t{magic, type, id}, + device_spec_t{ + magic, + get_sec_dtype(index), + id + }, meta, secondary_devices}; } diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.h b/src/crimson/os/seastore/segment_manager/ephemeral.h index 773992c7e6d..d7a3eb4a774 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.h +++ b/src/crimson/os/seastore/segment_manager/ephemeral.h @@ -42,7 +42,9 @@ std::ostream &operator<<(std::ostream &, const ephemeral_config_t &); EphemeralSegmentManagerRef create_test_ephemeral(); device_config_t get_ephemeral_device_config( - std::size_t index, std::size_t num_devices); + std::size_t index, + std::size_t num_main_devices, + std::size_t num_cold_devices); class EphemeralSegment final : public Segment { friend class EphemeralSegmentManager; @@ -70,7 +72,8 @@ class EphemeralSegmentManager final : public SegmentManager { std::optional device_config; device_type_t get_device_type() const final { - return device_type_t::SEGMENTED_EPHEMERAL; + assert(device_config); + return device_config->spec.dtype; } size_t get_offset(paddr_t addr) { diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 5fa136534fc..28d8346e5c7 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -648,6 +648,9 @@ TransactionManagerRef make_transaction_manager( auto p_backend_type = primary_device->get_backend_type(); if (p_backend_type == backend_type_t::SEGMENTED) { + auto dtype = primary_device->get_device_type(); + ceph_assert(dtype != device_type_t::HDD && + dtype != device_type_t::EPHEMERAL_COLD); sms->add_segment_manager(static_cast(primary_device)); } else { auto rbm = std::make_unique( diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 56548a8c082..ab9ef797459 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -122,7 +122,7 @@ struct btree_test_base : return segment_manager->init( ).safe_then([this] { return segment_manager->mkfs( - segment_manager::get_ephemeral_device_config(0, 1)); + segment_manager::get_ephemeral_device_config(0, 1, 0)); }).safe_then([this] { sms.reset(new SegmentManagerGroup()); journal = journal::make_segmented(*this, *this); diff --git a/src/test/crimson/seastore/test_seastore_cache.cc b/src/test/crimson/seastore/test_seastore_cache.cc index 3ed2462a43f..b249d27e461 100644 --- a/src/test/crimson/seastore/test_seastore_cache.cc +++ b/src/test/crimson/seastore/test_seastore_cache.cc @@ -86,7 +86,7 @@ struct cache_test_t : public seastar_test_suite_t { return segment_manager->init( ).safe_then([this] { return segment_manager->mkfs( - segment_manager::get_ephemeral_device_config(0, 1)); + segment_manager::get_ephemeral_device_config(0, 1, 0)); }).safe_then([this] { epm.reset(new ExtentPlacementManager()); cache.reset(new Cache(*epm)); diff --git a/src/test/crimson/seastore/test_seastore_journal.cc b/src/test/crimson/seastore/test_seastore_journal.cc index d323c00605b..46ec723a352 100644 --- a/src/test/crimson/seastore/test_seastore_journal.cc +++ b/src/test/crimson/seastore/test_seastore_journal.cc @@ -146,7 +146,7 @@ struct journal_test_t : seastar_test_suite_t, SegmentProvider, JournalTrimmer { return segment_manager->init( ).safe_then([this] { return segment_manager->mkfs( - segment_manager::get_ephemeral_device_config(0, 1)); + segment_manager::get_ephemeral_device_config(0, 1, 0)); }).safe_then([this] { block_size = segment_manager->get_block_size(); sms.reset(new SegmentManagerGroup()); diff --git a/src/test/crimson/seastore/transaction_manager_test_state.h b/src/test/crimson/seastore/transaction_manager_test_state.h index 5c5793111cf..ec349d4888e 100644 --- a/src/test/crimson/seastore/transaction_manager_test_state.h +++ b/src/test/crimson/seastore/transaction_manager_test_state.h @@ -63,7 +63,7 @@ public: }); }).safe_then([this] { return segment_manager->mkfs( - segment_manager::get_ephemeral_device_config(0, get_num_devices())); + segment_manager::get_ephemeral_device_config(0, get_num_devices(), 0)); }).safe_then([this] { return seastar::do_with(std::size_t(0), [this](auto &cnt) { return crimson::do_for_each( @@ -73,7 +73,7 @@ public: { ++cnt; return sec_sm->mkfs( - segment_manager::get_ephemeral_device_config(cnt, get_num_devices())); + segment_manager::get_ephemeral_device_config(cnt, get_num_devices(), 0)); }); }); }).handle_error(