From: Yingxin Cheng Date: Wed, 23 Oct 2024 06:56:01 +0000 (+0800) Subject: crimson/os/seastore/cached_extent: unify extent ptr creation X-Git-Tag: v20.0.0~619^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=528f4206fba75b8d6686f8b62e98a52cb6b15226;p=ceph.git crimson/os/seastore/cached_extent: unify extent ptr creation Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index c37d9c5c7cd3..cd65d82fe5a8 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -411,7 +411,7 @@ public: assert(!ret->is_mutable()); SUBDEBUGT(seastore_cache, "{} {}~{} is present on t without been \ fully loaded, reading ... {}", t, T::TYPE, offset, length, *ret); - auto bp = alloc_cache_buf(ret->get_length()); + auto bp = create_extent_ptr_rand(ret->get_length()); ret->set_bptr(std::move(bp)); return read_extent( ret->cast()); @@ -592,7 +592,7 @@ public: "{} {}~{} is present without been fully loaded, reading ... -- {}", p_extent->get_type(), p_extent->get_paddr(),p_extent->get_length(), *p_extent); - auto bp = alloc_cache_buf(p_extent->get_length()); + auto bp = create_extent_ptr_rand(p_extent->get_length()); p_extent->set_bptr(std::move(bp)); return read_extent(CachedExtentRef(p_extent)); } @@ -647,7 +647,7 @@ private: auto cached = query_cache(offset); if (!cached) { auto ret = CachedExtent::make_cached_extent_ref( - alloc_cache_buf(length)); + create_extent_ptr_rand(length)); ret->init(CachedExtent::extent_state_t::CLEAN_PENDING, offset, PLACEMENT_HINT_NULL, @@ -667,7 +667,7 @@ private: // extent PRESENT in cache if (is_retired_placeholder_type(cached->get_type())) { auto ret = CachedExtent::make_cached_extent_ref( - alloc_cache_buf(length)); + create_extent_ptr_rand(length)); ret->init(CachedExtent::extent_state_t::CLEAN_PENDING, offset, PLACEMENT_HINT_NULL, @@ -695,7 +695,7 @@ private: SUBDEBUG(seastore_cache, "{} {}~{} is present without been fully loaded, reading ... -- {}", T::TYPE, offset, length, *ret); - auto bp = alloc_cache_buf(length); + auto bp = create_extent_ptr_rand(length); ret->set_bptr(std::move(bp)); return read_extent( std::move(ret)); @@ -791,7 +791,7 @@ private: assert(!ret->is_mutable()); SUBDEBUGT(seastore_cache, "{} {}~{} {} is present on t without been \ fully loaded, reading ...", t, type, offset, length, laddr); - auto bp = alloc_cache_buf(ret->get_length()); + auto bp = create_extent_ptr_rand(ret->get_length()); ret->set_bptr(std::move(bp)); return read_extent( std::move(ret)); @@ -1763,15 +1763,6 @@ private: seastar::metrics::metric_group metrics; void register_metrics(); - /// alloc buffer for cached extent - bufferptr alloc_cache_buf(size_t size) { - // TODO: memory pooling etc - auto bp = ceph::bufferptr( - buffer::create_page_aligned(size)); - bp.zero(); - return bp; - } - void backref_batch_update( std::vector &&, const journal_seq_t &); diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 6025725aa337..8443c99b90a9 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -41,6 +41,18 @@ void intrusive_ptr_release(CachedExtent *); #endif +inline ceph::bufferptr create_extent_ptr_rand(extent_len_t len) { + assert(is_aligned(len, CEPH_PAGE_SIZE)); + assert(len > 0); + return ceph::bufferptr(buffer::create_page_aligned(len)); +} + +inline ceph::bufferptr create_extent_ptr_zero(extent_len_t len) { + auto bp = create_extent_ptr_rand(len); + bp.zero(); + return bp; +} + template using TCachedExtentRef = boost::intrusive_ptr; @@ -762,7 +774,7 @@ protected: poffset(other.poffset) { assert((length % CEPH_PAGE_SIZE) == 0); if (other.is_fully_loaded()) { - ptr.emplace(buffer::create_page_aligned(length)); + ptr = create_extent_ptr_rand(length); other.ptr->copy_out(0, length, ptr->c_str()); } else { // the extent must be fully loaded before CoW diff --git a/src/crimson/os/seastore/extent_placement_manager.h b/src/crimson/os/seastore/extent_placement_manager.h index c4e98a5f4a1b..d400a9bbdc73 100644 --- a/src/crimson/os/seastore/extent_placement_manager.h +++ b/src/crimson/os/seastore/extent_placement_manager.h @@ -371,9 +371,7 @@ public: // XXX: bp might be extended to point to different memory (e.g. PMem) // according to the allocator. - auto bp = ceph::bufferptr( - buffer::create_page_aligned(length)); - bp.zero(); + auto bp = create_extent_ptr_zero(length); return alloc_result_t{addr, std::move(bp), gen}; } @@ -405,9 +403,7 @@ public: #ifdef UNIT_TESTS_BUILT if (unlikely(external_paddr.has_value())) { assert(external_paddr->is_fake()); - auto bp = ceph::bufferptr( - buffer::create_page_aligned(length)); - bp.zero(); + auto bp = create_extent_ptr_zero(length); allocs.emplace_back(alloc_result_t{*external_paddr, std::move(bp), gen}); } else { #else @@ -419,8 +415,7 @@ public: auto left = ext.len; while (left > 0) { auto len = std::min(max_data_allocation_size, left); - auto bp = ceph::bufferptr(buffer::create_page_aligned(len)); - bp.zero(); + auto bp = create_extent_ptr_zero(len); auto start = ext.start.is_delayed() ? ext.start : ext.start + (ext.len - left);