From 56484c0c8f0b5ccada402cc23ae01df3d56def25 Mon Sep 17 00:00:00 2001 From: mutouyun Date: Sat, 5 Oct 2019 03:48:24 +0000 Subject: [PATCH] optimize the memory allocator --- include/pool_alloc.h | 3 +- performance.xlsx | Bin 90761 -> 74915 bytes src/memory/alloc.h | 160 ++++++++++++++--------------- src/memory/resource.h | 16 +-- src/memory/wrapper.h | 175 ++++++++++++++------------------ src/pool_alloc.cpp | 4 - test/test.h | 9 +- test/test_circ.cpp | 3 +- test/test_ipc.cpp | 8 +- test/test_mem.cpp | 230 +++++++++++++++++++++++++++--------------- test/test_shm.cpp | 0 test/test_waiter.cpp | 0 12 files changed, 319 insertions(+), 289 deletions(-) mode change 100644 => 100755 include/pool_alloc.h mode change 100644 => 100755 src/memory/alloc.h mode change 100644 => 100755 src/memory/resource.h mode change 100644 => 100755 src/memory/wrapper.h mode change 100644 => 100755 src/pool_alloc.cpp mode change 100644 => 100755 test/test.h mode change 100644 => 100755 test/test_circ.cpp mode change 100644 => 100755 test/test_ipc.cpp mode change 100644 => 100755 test/test_mem.cpp mode change 100644 => 100755 test/test_shm.cpp mode change 100644 => 100755 test/test_waiter.cpp diff --git a/include/pool_alloc.h b/include/pool_alloc.h old mode 100644 new mode 100755 index 3509a2d..8097441 --- a/include/pool_alloc.h +++ b/include/pool_alloc.h @@ -11,9 +11,8 @@ namespace mem { class IPC_EXPORT pool_alloc { public: - static void clear(); static void* alloc(std::size_t size); - static void free(void* p, std::size_t size); + static void free (void* p, std::size_t size); }; //////////////////////////////////////////////////////////////// diff --git a/performance.xlsx b/performance.xlsx index dbbccb1b80d5074580006ff680b30ba485ec5639..a9785b07a315f9d9b8087ea11f23266496f10a65 100644 GIT binary patch delta 41651 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

c_F3Gmt8QV^^UF+MLyvjxB;1)5o#A{`XWId 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 z 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 Bn+^Z~ delta 53912 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 I$RgbT0rXY|A^-pY diff --git a/src/memory/alloc.h b/src/memory/alloc.h old mode 100644 new mode 100755 index 58f8bf8..9388d1c --- a/src/memory/alloc.h +++ b/src/memory/alloc.h @@ -12,13 +12,14 @@ #include "platform/detail.h" +#include "log.h" + namespace ipc { namespace mem { class static_alloc { public: static void swap(static_alloc&) {} - static void clear() {} static void* alloc(std::size_t size) { return size ? std::malloc(size) : nullptr; @@ -104,16 +105,11 @@ private: public: scope_alloc() = default; - scope_alloc(scope_alloc&& rhs) { swap(rhs); } + scope_alloc(scope_alloc && rhs) { swap(rhs); } scope_alloc& operator=(scope_alloc rhs) { swap(rhs); return (*this); } ~scope_alloc() { free_all(); } - template - void set_allocator(A && alc) { - alloc_ = std::forward(alc); - } - void swap(scope_alloc& rhs) { alloc_.swap(rhs.alloc_); base_t::swap(rhs); @@ -130,12 +126,6 @@ public: base_t::take(std::move(rhs)); } - void clear() { - free_all(); - tail_ = nullptr; - alloc_.~alloc_policy(); - } - void* alloc(std::size_t size) { auto curr = static_cast(alloc_.alloc(size += aligned_block_size)); curr->next_ = head_; @@ -156,10 +146,12 @@ namespace detail { class fixed_alloc_base { protected: + std::size_t block_size_; std::size_t init_expand_; void * cursor_; - void init(std::size_t init_expand) { + void init(std::size_t block_size, std::size_t init_expand) { + block_size_ = block_size; init_expand_ = init_expand; cursor_ = nullptr; } @@ -173,7 +165,12 @@ protected: } public: + void set_block_size(std::size_t block_size) { + block_size_ = block_size; + } + void swap(fixed_alloc_base& rhs) { + std::swap(block_size_ , rhs.block_size_); std::swap(init_expand_, rhs.init_expand_); std::swap(cursor_ , rhs.cursor_); } @@ -211,6 +208,63 @@ public: } }; +template +class fixed_alloc : public detail::fixed_alloc_base { +public: + using base_t = detail::fixed_alloc_base; + using alloc_policy = AllocP; + +private: + alloc_policy alloc_; + + void* try_expand() { + if (empty()) { + auto size = ExpandP::next(block_size_, init_expand_); + auto p = node_p(cursor_ = alloc_.alloc(size)); + for (std::size_t i = 0; i < (size / block_size_) - 1; ++i) + p = node_p((*p) = reinterpret_cast(p) + block_size_); + (*p) = nullptr; + } + return cursor_; + } + +public: + explicit fixed_alloc(std::size_t block_size, std::size_t init_expand = 1) { + init(block_size, init_expand); + } + + fixed_alloc(fixed_alloc && rhs) { + init(0, 0); + swap(rhs); + } + + fixed_alloc& operator=(fixed_alloc rhs) { + swap(rhs); + return (*this); + } + + void swap(fixed_alloc& rhs) { + alloc_.swap(rhs.alloc_); + base_t::swap(rhs); + } + + template + auto take(fixed_alloc && rhs) -> ipc::require::value> { + base_t::take(std::move(rhs)); + alloc_.take(std::move(rhs.alloc_)); + } + + void* alloc() { + void* p = try_expand(); + cursor_ = next(p); + return p; + } + + void* alloc(std::size_t) { + return alloc(); + } +}; + } // namespace detail struct fixed_expand_policy { @@ -227,9 +281,8 @@ struct fixed_expand_policy { return e * 2; } - template - static std::size_t next(std::size_t & e) { - auto n = ipc::detail::max(BlockSize, base_size) * e; + static std::size_t next(std::size_t block_size, std::size_t & e) { + auto n = ipc::detail::max(block_size, base_size) * e; e = next(e); return n; } @@ -238,73 +291,31 @@ struct fixed_expand_policy { template , typename ExpandP = fixed_expand_policy> -class fixed_alloc : public detail::fixed_alloc_base { +class fixed_alloc : public detail::fixed_alloc { public: - using base_t = detail::fixed_alloc_base; - using alloc_policy = AllocP; + using base_t = detail::fixed_alloc; enum : std::size_t { block_size = (ipc::detail::max)(BlockSize, sizeof(void*)) }; -private: - alloc_policy alloc_; - - void* try_expand() { - if (empty()) { - auto size = ExpandP::template next(init_expand_); - auto p = node_p(cursor_ = alloc_.alloc(size)); - for (std::size_t i = 0; i < (size / block_size) - 1; ++i) - p = node_p((*p) = reinterpret_cast(p) + block_size); - (*p) = nullptr; - } - return cursor_; - } - public: - explicit fixed_alloc(std::size_t init_expand = 1) { - init(init_expand); + explicit fixed_alloc(std::size_t init_expand = 1) + : base_t(block_size) { } - fixed_alloc(fixed_alloc&& rhs) : fixed_alloc() { swap(rhs); } - fixed_alloc& operator=(fixed_alloc rhs) { swap(rhs); return (*this); } + fixed_alloc(fixed_alloc && rhs) + : base_t(std::move(rhs)) { + } - template - void set_allocator(A && alc) { - alloc_ = std::forward(alc); + fixed_alloc& operator=(fixed_alloc rhs) { + swap(rhs); + return (*this); } void swap(fixed_alloc& rhs) { - alloc_.swap(rhs.alloc_); base_t::swap(rhs); } - - template - auto take(fixed_alloc && rhs) -> ipc::require::value> { - base_t::take(std::move(rhs)); - alloc_.take(std::move(rhs.alloc_)); - } - - template - auto take(fixed_alloc && rhs) -> ipc::require::value> { - base_t::take(std::move(rhs)); - } - - void clear() { - init_expand_ = ExpandP::prev(init_expand_); - cursor_ = nullptr; - alloc_.~alloc_policy(); - } - - void* alloc() { - void* p = try_expand(); - cursor_ = next(p); - return p; - } - - void* alloc(std::size_t) { - return alloc(); - } }; //////////////////////////////////////////////////////////////// @@ -374,14 +385,9 @@ private: public: variable_alloc() = default; - variable_alloc(variable_alloc&& rhs) { swap(rhs); } + variable_alloc(variable_alloc && rhs) { swap(rhs); } variable_alloc& operator=(variable_alloc rhs) { swap(rhs); return (*this); } - template - void set_allocator(A && alc) { - alloc_ = std::forward(alc); - } - void swap(variable_alloc& rhs) { alloc_.swap(rhs.alloc_); base_t::swap(rhs); @@ -398,10 +404,6 @@ public: base_t::take(std::move(rhs)); } - void clear() { - alloc_.~alloc_policy(); - } - void* alloc(std::size_t size) { if (size >= ChunkSize) { return alloc_.alloc(size); diff --git a/src/memory/resource.h b/src/memory/resource.h old mode 100644 new mode 100755 index 16ab19c..ca04a26 --- a/src/memory/resource.h +++ b/src/memory/resource.h @@ -21,19 +21,9 @@ using chunk_variable_alloc = static_wrapper>>; -template -using static_async_fixed = - static_wrapper>>; - -using big_size_alloc = variable_wrapper::block_size(default_mapping_policy<>::classes_size), - default_mapping_policy<>::iter_size * 2 >>; - -using async_pool_alloc = variable_wrapper, - big_size_alloc>; +using async_pool_alloc = + static_variable_wrapper>>; template using allocator = allocator_wrapper; diff --git a/src/memory/wrapper.h b/src/memory/wrapper.h old mode 100644 new mode 100755 index 1e525c8..4ed6fbc --- a/src/memory/wrapper.h +++ b/src/memory/wrapper.h @@ -1,14 +1,15 @@ #pragma once #include -#include +#include // ::new #include #include #include -#include -#include +#include // std::function +#include // std::forward #include -#include +#include // assert +#include // std::aligned_storage_t #include "def.h" #include "rw_lock.h" @@ -80,27 +81,27 @@ public: struct rebind { typedef allocator_wrapper other; }; constexpr size_type max_size(void) const noexcept { - return (std::numeric_limits::max)() / sizeof(T); + return (std::numeric_limits::max)() / sizeof(value_type); } public: pointer allocate(size_type count) noexcept { if (count == 0) return nullptr; if (count > this->max_size()) return nullptr; - return static_cast(alloc_.alloc(count * sizeof(T))); + return static_cast(alloc_.alloc(count * sizeof(value_type))); } void deallocate(pointer p, size_type count) noexcept { - alloc_.free(p, count * sizeof(T)); + alloc_.free(p, count * sizeof(value_type)); } template - static void construct(pointer p, P&&... params) { - ::new (static_cast(p)) T(std::forward

(params)...); + static void construct(pointer p, P && ... params) { + ::new (static_cast(p)) value_type(std::forward

(params) ...); } static void destroy(pointer p) { - p->~T(); + p->~value_type(); } }; @@ -148,11 +149,6 @@ public: master_allocs_.swap(rhs.master_allocs_); } - void clear() { - IPC_UNUSED_ auto guard = ipc::detail::unique_lock(master_lock_); - master_allocs_.clear(); - } - void try_recover(alloc_policy & alc) { IPC_UNUSED_ auto guard = ipc::detail::unique_lock(master_lock_); if (!master_allocs_.empty()) { @@ -174,18 +170,16 @@ public: template auto try_replenish(alloc_policy & alc, std::size_t /*size*/) - -> ipc::require::value && !has_remain::value && has_empty::value> { + -> ipc::require<(!detail::has_take::value || !has_remain::value) && has_empty::value> { if (!alc.empty()) return; - IPC_UNUSED_ auto guard = ipc::detail::unique_lock(master_lock_); - if (!master_allocs_.empty()) { - alc.take(std::move(master_allocs_.back())); - master_allocs_.pop_back(); - } + try_recover(alc); } template constexpr auto try_replenish(alloc_policy & /*alc*/, std::size_t /*size*/) const noexcept - -> ipc::require::value || (!has_remain::value && !has_empty::value)> {} + -> ipc::require<(!detail::has_take::value || !has_remain::value) && !has_empty::value> { + // Do Nothing. + } void collect(alloc_policy && alc) { IPC_UNUSED_ auto guard = ipc::detail::unique_lock(master_lock_); @@ -199,7 +193,6 @@ public: using alloc_policy = AllocP; constexpr static void swap(empty_alloc_recycler&) noexcept {} - constexpr static void clear() noexcept {} constexpr static void try_recover(alloc_policy&) noexcept {} constexpr static auto try_replenish(alloc_policy&, std::size_t) noexcept {} constexpr static void collect(alloc_policy&&) noexcept {} @@ -218,51 +211,47 @@ private: async_wrapper * w_ = nullptr; public: - alloc_proxy(alloc_proxy && rhs) - : AllocP(std::move(rhs)) - {} + alloc_proxy(alloc_proxy && rhs) = default; - alloc_proxy(async_wrapper* w) - : AllocP(), w_(w) { - if (w_ == nullptr) return; + template + alloc_proxy(async_wrapper* w, P && ... pars) + : AllocP(std::forward

(pars) ...), w_(w) { + assert(w_ != nullptr); w_->recycler_.try_recover(*this); } ~alloc_proxy() { - if (w_ == nullptr) return; w_->recycler_.collect(std::move(*this)); } - auto alloc(std::size_t size) { - if (w_ != nullptr) { - w_->recycler_.try_replenish(*this, size); - } - return AllocP::alloc(size); - } + // auto alloc(std::size_t size) { + // w_->recycler_.try_replenish(*this, size); + // return AllocP::alloc(size); + // } }; friend class alloc_proxy; - auto& get_alloc() { - static tls::pointer tls_alc; - return *tls_alc.create(this); - } + using ref_t = alloc_proxy&; + using tls_t = tls::pointer; + + tls_t tls_; + std::function get_alloc_; public: - void swap(async_wrapper& rhs) { - recycler_.swap(rhs.recycler_); - } - - void clear() { - recycler_.clear(); + template + async_wrapper(P ... pars) { + get_alloc_ = [this, pars ...]()->ref_t { + return *tls_.create(this, pars ...); + }; } void* alloc(std::size_t size) { - return get_alloc().alloc(size); + return get_alloc_().alloc(size); } void free(void* p, std::size_t size) { - get_alloc().free(p, size); + get_alloc_().free(p, size); } }; @@ -281,16 +270,16 @@ private: alloc_policy alloc_; public: + template + sync_wrapper(P && ... pars) + : alloc_(std::forward

(pars) ...) + {} + void swap(sync_wrapper& rhs) { IPC_UNUSED_ auto guard = ipc::detail::unique_lock(lock_); alloc_.swap(rhs.alloc_); } - void clear() { - IPC_UNUSED_ auto guard = ipc::detail::unique_lock(lock_); - alloc_.~alloc_policy(); - } - void* alloc(std::size_t size) { IPC_UNUSED_ auto guard = ipc::detail::unique_lock(lock_); return alloc_.alloc(size); @@ -318,10 +307,6 @@ public: static void swap(static_wrapper&) {} - static void clear() { - instance().clear(); - } - static void* alloc(std::size_t size) { return instance().alloc(size); } @@ -341,62 +326,56 @@ struct default_mapping_policy { enum : std::size_t { base_size = BaseSize, iter_size = IterSize, - classes_size = 32 + classes_size = 64 }; - static const std::size_t table[classes_size]; - - IPC_CONSTEXPR_ static std::size_t classify(std::size_t size) noexcept { - auto index = (size <= base_size) ? 0 : ((size - base_size - 1) / iter_size); - return (index < classes_size) ? - // always uses default_mapping_policy<>::table - default_mapping_policy<>::table[index] : classes_size; + template + IPC_CONSTEXPR_ static void foreach(F f, P ... params) { + for (std::size_t i = 0; i < classes_size; ++i) f(i, params...); } - constexpr static std::size_t block_size(std::size_t value) noexcept { - return base_size + (value + 1) * iter_size; + IPC_CONSTEXPR_ static std::size_t block_size(std::size_t id) noexcept { + return (id < classes_size) ? (base_size + (id + 1) * iter_size) : 0; + } + + template + IPC_CONSTEXPR_ static auto classify(F f, D d, std::size_t size, P ... params) { + std::size_t id = (size - base_size - 1) / iter_size; + return (id < classes_size) ? f(id, params..., size) : d(params..., size); } }; -template -const std::size_t default_mapping_policy::table[default_mapping_policy::classes_size] = { - /* 1 - 8 ~ 32 */ - 0 , 1 , 2 , 3 , - /* 2 - 48 ~ 256 */ - 5 , 5 , 7 , 7 , 9 , 9 , 11, 11, 13, 13, 15, 15, 17, 17, - 19, 19, 21, 21, 23, 23, 25, 25, 27, 27, 29, 29, 31, 31 -}; - -template