From: Igor Fedotov Date: Fri, 14 Jul 2023 14:10:58 +0000 (+0300) Subject: os/bluestore: Allocator's cosmetic cleanup/improvement. X-Git-Tag: v19.2.3~223^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fe4bea71462bd71ce268c9a7e77217b2f5a65a18;p=ceph.git os/bluestore: Allocator's cosmetic cleanup/improvement. Intended for the forthcoming major update with new allocator implementation. Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/Allocator.cc b/src/os/bluestore/Allocator.cc index 60265939988e..98963ccd5bda 100644 --- a/src/os/bluestore/Allocator.cc +++ b/src/os/bluestore/Allocator.cc @@ -195,7 +195,7 @@ Allocator *Allocator::create( void Allocator::release(const PExtentVector& release_vec) { - interval_set release_set; + release_set_t release_set; for (auto e : release_vec) { release_set.insert(e.offset, e.length); } diff --git a/src/os/bluestore/Allocator.h b/src/os/bluestore/Allocator.h index f5a128fda876..932695d4ab08 100644 --- a/src/os/bluestore/Allocator.h +++ b/src/os/bluestore/Allocator.h @@ -17,7 +17,11 @@ #include "include/ceph_assert.h" #include "bluestore_types.h" +typedef interval_set release_set_t; +typedef release_set_t::value_type release_set_entry_t; + class Allocator { + public: Allocator(std::string_view name, int64_t _capacity, @@ -49,7 +53,7 @@ public: /* Bulk release. Implementations may override this method to handle the whole * set at once. This could save e.g. unnecessary mutex dance. */ - virtual void release(const interval_set& release_set) = 0; + virtual void release(const release_set_t& release_set) = 0; void release(const PExtentVector& release_set); virtual void dump() = 0; diff --git a/src/os/bluestore/AvlAllocator.cc b/src/os/bluestore/AvlAllocator.cc index 8de249e978cb..564572bc7ff1 100644 --- a/src/os/bluestore/AvlAllocator.cc +++ b/src/os/bluestore/AvlAllocator.cc @@ -324,7 +324,7 @@ int AvlAllocator::_allocate( return 0; } -void AvlAllocator::_release(const interval_set& release_set) +void AvlAllocator::_release(const release_set_t& release_set) { for (auto p = release_set.begin(); p != release_set.end(); ++p) { const auto offset = p.get_start(); @@ -417,7 +417,7 @@ int64_t AvlAllocator::allocate( return _allocate(want, unit, max_alloc_size, hint, extents); } -void AvlAllocator::release(const interval_set& release_set) { +void AvlAllocator::release(const release_set_t& release_set) { std::lock_guard l(lock); _release(release_set); } diff --git a/src/os/bluestore/AvlAllocator.h b/src/os/bluestore/AvlAllocator.h index d79242a521cc..4ac0f6fb0c8a 100644 --- a/src/os/bluestore/AvlAllocator.h +++ b/src/os/bluestore/AvlAllocator.h @@ -81,7 +81,7 @@ public: uint64_t max_alloc_size, int64_t hint, PExtentVector *extents) override; - void release(const interval_set& release_set) override; + void release(const release_set_t& release_set) override; uint64_t get_free() override; double get_fragmentation() override; @@ -93,6 +93,9 @@ public: void shutdown() override; private: + CephContext* cct; + std::mutex lock; + // pick a range by search from cursor forward uint64_t _pick_block_after( uint64_t *cursor, @@ -230,9 +233,11 @@ protected: // called when extent to be released/marked free virtual void _add_to_tree(uint64_t start, uint64_t size); -protected: - CephContext* cct; - std::mutex lock; + CephContext* get_context() { return cct; } + + std::mutex& get_lock() { + return lock; + } double _get_fragmentation() const { auto free_blocks = p2align(num_free, (uint64_t)block_size) / block_size; @@ -246,7 +251,7 @@ protected: uint64_t _lowest_size_available() { auto rs = range_size_tree.begin(); - return rs != range_size_tree.end() ? rs->length() : 0; + return rs != range_size_tree.end() ? rs->length() : std::numeric_limits::max(); } int64_t _allocate( @@ -256,7 +261,7 @@ protected: int64_t hint, PExtentVector *extents); - void _release(const interval_set& release_set); + void _release(const release_set_t& release_set); void _release(const PExtentVector& release_set); void _shutdown();