From 502448ceadb7c29dab87ccf0067accc3cf7ab87e Mon Sep 17 00:00:00 2001 From: tushicheng <18829573815@163.com> Date: Tue, 6 Jun 2023 03:42:17 +0000 Subject: [PATCH] fix fifoallocator with different memattr --- .../src/lib/allocator/ob_fifo_allocator.cpp | 28 ++++++++----------- .../src/lib/allocator/ob_fifo_allocator.h | 11 +++----- .../meta_mem/ob_tenant_meta_mem_mgr.cpp | 5 ++-- src/storage/meta_mem/ob_tenant_meta_mem_mgr.h | 5 +--- 4 files changed, 19 insertions(+), 30 deletions(-) diff --git a/deps/oblib/src/lib/allocator/ob_fifo_allocator.cpp b/deps/oblib/src/lib/allocator/ob_fifo_allocator.cpp index d181aaf731..88bf6dcef0 100644 --- a/deps/oblib/src/lib/allocator/ob_fifo_allocator.cpp +++ b/deps/oblib/src/lib/allocator/ob_fifo_allocator.cpp @@ -276,20 +276,16 @@ bool ObFIFOAllocator::check_magic(void *p, int64_t &size) void *ObFIFOAllocator::alloc(const int64_t size) { - return alloc_align(size, 16, attr_); + return alloc_align(size, 16); } void *ObFIFOAllocator::alloc(const int64_t size, const ObMemAttr &attr) { - return alloc_align(size, 16, attr); + UNUSED(attr); + return alloc_align(size, 16); } void *ObFIFOAllocator::alloc_align(const int64_t size, const int64_t align) -{ - return alloc_align(size, align, attr_); -} - -void *ObFIFOAllocator::alloc_align(const int64_t size, const int64_t align, const ObMemAttr &attr) { ObLockGuard guard(lock_); void *ptr = nullptr; @@ -298,16 +294,16 @@ void *ObFIFOAllocator::alloc_align(const int64_t size, const int64_t align, cons } else if (!check_param(size, align)) { LOG_WARN_RET(OB_INVALID_ARGUMENT, "ObFIFOAllocator alloc(size, align) parameter Error.", K(size), K(align)); } else if (is_normal_page_enough(size, align)) { - ptr = alloc_normal(size, align, attr); + ptr = alloc_normal(size, align); } else { - ptr = alloc_special(size, align, attr); + ptr = alloc_special(size, align); } return ptr; } // get a new page, set current_using_ pointing to it. -void ObFIFOAllocator::alloc_new_normal_page(const ObMemAttr &attr) +void ObFIFOAllocator::alloc_new_normal_page() { if (IS_NOT_INIT || OB_ISNULL(allocator_)) { LOG_ERROR_RET(OB_NOT_INIT, "ObFIFOAllocator not init"); @@ -318,7 +314,7 @@ void ObFIFOAllocator::alloc_new_normal_page(const ObMemAttr &attr) } if (nullptr == new_page) { if (total() + page_size_ <= max_size_) { - void *ptr = allocator_->alloc(page_size_, attr); + void *ptr = allocator_->alloc(page_size_, attr_); if (OB_NOT_NULL(ptr)) { new_page = new (ptr) NormalPageHeader(); } else { @@ -401,7 +397,7 @@ void ObFIFOAllocator::free(void *p) } } -void *ObFIFOAllocator::alloc_normal(int64_t size, int64_t align, const ObMemAttr &attr) +void *ObFIFOAllocator::alloc_normal(int64_t size, int64_t align) { void *ptr = nullptr; void *new_space = nullptr; @@ -410,7 +406,7 @@ void *ObFIFOAllocator::alloc_normal(int64_t size, int64_t align, const ObMemAttr } else { if (nullptr == current_using_) { if (total() + page_size_ <= max_size_) { - new_space = allocator_->alloc(page_size_, attr); + new_space = allocator_->alloc(page_size_, attr_); } if (nullptr == new_space) { LOG_WARN_RET(OB_ALLOCATE_MEMORY_FAILED, "can not allocate new page", K(page_size_)); @@ -427,7 +423,7 @@ void *ObFIFOAllocator::alloc_normal(int64_t size, int64_t align, const ObMemAttr ptr = try_alloc(size, align); // current_page_do not have enough space. if (nullptr == ptr) { - alloc_new_normal_page(attr); + alloc_new_normal_page(); ptr = try_alloc(size, align); } if (ptr != nullptr) { @@ -469,7 +465,7 @@ void ObFIFOAllocator::free_normal(NormalPageHeader *page, int64_t size) | hole | |--------------------| */ -void *ObFIFOAllocator::alloc_special(int64_t size, int64_t align, const ObMemAttr &attr) +void *ObFIFOAllocator::alloc_special(int64_t size, int64_t align) { void *ptr = NULL; @@ -482,7 +478,7 @@ void *ObFIFOAllocator::alloc_special(int64_t size, int64_t align, const ObMemAtt // these bytes may be before (align 1) AND after user data (align 2). // one of them can be zero. int64_t real_size = size + sizeof(SpecialPageHeader) + sizeof(AllocHeader) + align - 1; - void *new_space = allocator_->alloc(real_size, attr); + void *new_space = allocator_->alloc(real_size, attr_); if (NULL == new_space) { LOG_WARN_RET(OB_ALLOCATE_MEMORY_FAILED, "can not alloc a page from underlying allocator", K(real_size)); } else { diff --git a/deps/oblib/src/lib/allocator/ob_fifo_allocator.h b/deps/oblib/src/lib/allocator/ob_fifo_allocator.h index ce1a862c68..54ffca24cb 100644 --- a/deps/oblib/src/lib/allocator/ob_fifo_allocator.h +++ b/deps/oblib/src/lib/allocator/ob_fifo_allocator.h @@ -97,7 +97,7 @@ public: void reset(); void *alloc(const int64_t size); void *alloc(const int64_t size, const ObMemAttr &attr); - void *alloc_align(const int64_t size, const int64_t align); + virtual void *alloc_align(const int64_t size, const int64_t align); void free(void *p); void set_label(const lib::ObLabel &label) { attr_.label_ = label; } void set_attr(const ObMemAttr &attr) { attr_ = attr; } @@ -127,9 +127,6 @@ public: return normal_total() + special_total_; } -protected: - virtual void *alloc_align(const int64_t size, const int64_t align, const ObMemAttr &attr); - private: BasePageHeader *get_page_header(void *p); bool check_param(const int64_t size, const int64_t align); @@ -141,10 +138,10 @@ private: return (max_free_size >= size); } void *try_alloc(const int64_t size, const int64_t align); - void alloc_new_normal_page(const ObMemAttr &attr); - void *alloc_normal(const int64_t size, const int64_t align, const ObMemAttr &attr); + void alloc_new_normal_page(); + void *alloc_normal(const int64_t size, const int64_t align); void free_normal(NormalPageHeader *page, int64_t size); - void *alloc_special(const int64_t size, const int64_t align, const ObMemAttr &attr); + void *alloc_special(const int64_t size, const int64_t align); void free_special(SpecialPageHeader *page); int sync_idle(const int64_t idle_size, const int64_t max_size) ; private: diff --git a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp index 248b643a4c..eeae2894f2 100644 --- a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp +++ b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.cpp @@ -1625,13 +1625,12 @@ int ObTenantMetaMemMgr::GetWashTabletCandidate::operator()( void *ObTenantMetaMemMgr::TenantMetaAllocator::alloc_align( const int64_t size, - const int64_t align, - const ObMemAttr &attr) + const int64_t align) { int ret = OB_SUCCESS; void *ptr = nullptr; const int64_t max_wait_ts = ObTimeUtility::fast_current_time() + 1000L * 1000L * 3L; // 3s - while (OB_ISNULL(ptr = ObFIFOAllocator::alloc_align(size, align, attr)) + while (OB_ISNULL(ptr = ObFIFOAllocator::alloc_align(size, align)) && OB_SUCC(ret) && max_wait_ts - ObTimeUtility::fast_current_time() >= 0) { ob_usleep(1); diff --git a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.h b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.h index c2926b0a81..c95482bc4d 100644 --- a/src/storage/meta_mem/ob_tenant_meta_mem_mgr.h +++ b/src/storage/meta_mem/ob_tenant_meta_mem_mgr.h @@ -383,10 +383,7 @@ private: virtual ~TenantMetaAllocator() = default; TO_STRING_KV("used", used(), "total", total()); protected: - virtual void *alloc_align( - const int64_t size, - const int64_t align, - const ObMemAttr &attr) override; + virtual void *alloc_align(const int64_t size, const int64_t align) override; private: TryWashTabletFunc &wash_func_; };