From 5dd43fff53c207d628b77df4b6ddc10403ac4e02 Mon Sep 17 00:00:00 2001 From: Yongqiang YANG <98214048+dataroaring@users.noreply.github.com> Date: Fri, 1 Jul 2022 16:05:48 +0800 Subject: [PATCH] [improvement] alloc aligned memory for block bloom filter to work with jemalloc (#10446) --- be/src/exprs/block_bloom_filter.hpp | 2 -- be/src/exprs/block_bloom_filter_impl.cc | 9 +++++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/be/src/exprs/block_bloom_filter.hpp b/be/src/exprs/block_bloom_filter.hpp index e1d64013af..b75350b56e 100644 --- a/be/src/exprs/block_bloom_filter.hpp +++ b/be/src/exprs/block_bloom_filter.hpp @@ -202,8 +202,6 @@ private: } DISALLOW_COPY_AND_ASSIGN(BlockBloomFilter); - - std::unique_ptr _mem_holder; }; } // namespace doris diff --git a/be/src/exprs/block_bloom_filter_impl.cc b/be/src/exprs/block_bloom_filter_impl.cc index c8cf9b049b..1cdab38605 100644 --- a/be/src/exprs/block_bloom_filter_impl.cc +++ b/be/src/exprs/block_bloom_filter_impl.cc @@ -69,8 +69,12 @@ Status BlockBloomFilter::init_internal(const int log_space_bytes, uint32_t hash_ const size_t alloc_size = directory_size(); close(); // Ensure that any previously allocated memory for directory_ is released. - _mem_holder.reset(new char[alloc_size]); - _directory = (Bucket*)_mem_holder.get(); + DCHECK(_directory == nullptr); + int rc = posix_memalign((void**)&_directory, 32, alloc_size); + if (rc != 0) { + return Status::InternalError("block_bloom_filter alloc fail"); + } + _hash_seed = hash_seed; return Status::OK(); } @@ -100,6 +104,7 @@ Status BlockBloomFilter::init_from_directory(int log_space_bytes, const Slice& d void BlockBloomFilter::close() { if (_directory != nullptr) { + free(_directory); _directory = nullptr; } }