Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
85f89dc
fix
iaojnh May 20, 2026
9e58670
Merge branch 'main' into fix/exclude-arrow
iaojnh May 20, 2026
46bf9aa
Merge branch 'alibaba:main' into main
iaojnh May 21, 2026
d6547aa
Merge branch 'alibaba:main' into main
iaojnh May 25, 2026
c9a4d94
Merge branch 'alibaba:main' into main
iaojnh May 26, 2026
5bff8b6
Merge branch 'alibaba:main' into main
iaojnh May 29, 2026
10f1dee
Merge branch 'alibaba:main' into main
iaojnh Jun 1, 2026
7da1228
buffer read storage
iaojnh Jun 1, 2026
d07b74b
Merge branch 'main' into feat/buffer-read-storage
iaojnh Jun 2, 2026
ad6ac3a
Merge branch 'alibaba:main' into main
iaojnh Jun 2, 2026
5c045b0
Merge branch 'alibaba:main' into main
iaojnh Jun 3, 2026
570da53
Merge branch 'alibaba:main' into main
iaojnh Jun 8, 2026
d3fecea
Merge branch 'alibaba:main' into main
iaojnh Jun 9, 2026
4f07741
Merge branch 'alibaba:main' into main
iaojnh Jun 10, 2026
9e900c5
Merge branch 'alibaba:main' into main
iaojnh Jun 11, 2026
556c28d
Merge branch 'main' into feat/buffer-read-storage
iaojnh Jun 12, 2026
4761640
Merge branch 'alibaba:main' into main
iaojnh Jun 15, 2026
a842e22
Merge branch 'alibaba:main' into main
iaojnh Jun 15, 2026
e2b0c00
Merge branch 'main' into feat/buffer-read-storage
iaojnh Jun 15, 2026
c577132
upd
iaojnh Jun 16, 2026
ef0b1b3
fix
iaojnh Jun 16, 2026
8bb7e53
Merge branch 'alibaba:main' into main
iaojnh Jun 17, 2026
5fc30a3
upd
iaojnh Jun 17, 2026
8293dd7
Merge branch 'main' into feat/buffer-storage-io
iaojnh Jun 17, 2026
c38d04c
rm dead code
iaojnh Jun 17, 2026
d9af524
Merge branch 'alibaba:main' into main
iaojnh Jun 22, 2026
50560ab
fix
iaojnh Jun 22, 2026
3e0c044
upd
iaojnh Jun 23, 2026
e1c5750
upd log type
iaojnh Jun 23, 2026
d6c7d5e
rm useless code
iaojnh Jun 23, 2026
5839e1d
fix
iaojnh Jun 23, 2026
90c6577
upd
iaojnh Jun 23, 2026
099b96c
upd
iaojnh Jun 23, 2026
2efc8dd
fix
iaojnh Jun 24, 2026
973d233
Merge branch 'alibaba:main' into main
iaojnh Jun 24, 2026
43cb151
Merge branch 'alibaba:main' into main
iaojnh Jun 25, 2026
0f0ef65
fix
iaojnh Jun 25, 2026
2534f68
Merge branch 'main' into feat/buffer-storage-io
iaojnh Jun 25, 2026
8c83e05
Merge branch 'feat/buffer-read-storage' into feat/buffer-storage-io
iaojnh Jun 25, 2026
c54c0fd
Merge branch 'fix/ivf-bugfix' into feat/buffer-storage-io
iaojnh Jun 25, 2026
3180820
fix
iaojnh Jun 25, 2026
eebedf8
add ivf prefetch
iaojnh Jun 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/ailego/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ set(EXTRA_LIBS ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})

if(UNIX AND NOT APPLE)
list(APPEND EXTRA_LIBS ${LIB_RT})
find_library(LIB_AIO NAMES aio)
if(LIB_AIO)
list(APPEND EXTRA_LIBS ${LIB_AIO})
endif()
endif()

if(NOT ANDROID AND AUTO_DETECT_ARCH)
Expand Down Expand Up @@ -123,3 +127,8 @@ cc_library(
LIBS ${EXTRA_LIBS}
VERSION "${GIT_SRCS_VER}"
)

if(LIB_AIO)
target_compile_definitions(zvec_ailego PUBLIC ZVEC_HAS_LIBAIO)
message(STATUS "Found libaio: ${LIB_AIO} (HNSW async prefetch enabled)")
endif()
35 changes: 34 additions & 1 deletion src/ailego/buffer/block_eviction_queue.cc
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,30 @@ bool BlockEvictionQueue::add_single_block(const BlockType &block,
return true;
}

MemoryLimitPool::~MemoryLimitPool() {
drain_free_list();
}

void MemoryLimitPool::drain_free_list() {
std::lock_guard<std::mutex> lock(free_list_mutex_);
size_t drained = 0;
while (free_list_head_) {
char *buf = free_list_head_;
free_list_head_ = *reinterpret_cast<char **>(buf);
ailego_free(buf);
++drained;
}
free_list_count_ = 0;
if (drained > 0) {
LOG_INFO("MemoryLimitPool: drained %zu cached buffers from free list",
drained);
}
}

int MemoryLimitPool::init(size_t pool_size) {
pool_size_ = 0;
BlockEvictionQueue::get_instance().recycle();
drain_free_list();
pool_size_ = pool_size;
LOG_INFO("MemoryLimitPool initialized with pool size: %lu", pool_size_);
return 0;
Expand All @@ -96,6 +117,15 @@ bool MemoryLimitPool::try_acquire_buffer(const size_t buffer_size,
}
desired = expected + buffer_size;
} while (!used_size_.compare_exchange_weak(expected, desired));
{
std::lock_guard<std::mutex> lock(free_list_mutex_);
if (free_list_head_) {
buffer = free_list_head_;
free_list_head_ = *reinterpret_cast<char **>(buffer);
--free_list_count_;
return true;
}
}
buffer = (char *)ailego_aligned_malloc(buffer_size, 4096);
if (!buffer) {
used_size_.fetch_sub(buffer_size);
Expand All @@ -119,7 +149,10 @@ void MemoryLimitPool::release_buffer(char *buffer, const size_t buffer_size) {
desired = expected - buffer_size;
assert(expected >= buffer_size);
} while (!used_size_.compare_exchange_weak(expected, desired));
ailego_free(buffer);
std::lock_guard<std::mutex> lock(free_list_mutex_);
*reinterpret_cast<char **>(buffer) = free_list_head_;
free_list_head_ = buffer;
++free_list_count_;
}

void MemoryLimitPool::release_external(const size_t buffer_size) {
Expand Down
Loading