enhance: expr: [2.6] only prefetch chunks once (#45555)

issue: https://github.com/milvus-io/milvus/issues/43611
pr: #45554

Signed-off-by: Shawn Wang <shawn.wang@zilliz.com>
This commit is contained in:
sparknack 2025-11-17 14:56:27 +08:00 committed by GitHub
parent c33d6a0f49
commit aa5cd951a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -762,12 +762,15 @@ class SegmentExpr : public Expr {
size_t start_chunk = process_all_chunks ? 0 : current_data_chunk_; size_t start_chunk = process_all_chunks ? 0 : current_data_chunk_;
// prefetch chunks to reduce cache miss latency // prefetch chunks to reduce cache miss latency
std::vector<int64_t> pf_chunk_ids; if (!prefetched_) {
pf_chunk_ids.reserve(num_data_chunk_ - start_chunk); std::vector<int64_t> pf_chunk_ids;
for (size_t i = start_chunk; i < num_data_chunk_; i++) { pf_chunk_ids.reserve(num_data_chunk_ - start_chunk);
pf_chunk_ids.push_back(i); for (size_t i = start_chunk; i < num_data_chunk_; i++) {
pf_chunk_ids.push_back(i);
}
segment_->prefetch_chunks(op_ctx_, field_id_, pf_chunk_ids);
prefetched_ = true;
} }
segment_->prefetch_chunks(op_ctx_, field_id_, pf_chunk_ids);
for (size_t i = start_chunk; i < num_data_chunk_; i++) { for (size_t i = start_chunk; i < num_data_chunk_; i++) {
auto data_pos = auto data_pos =
@ -1456,6 +1459,8 @@ class SegmentExpr : public Expr {
// sometimes need to skip index and using raw data // sometimes need to skip index and using raw data
// default true means use index as much as possible // default true means use index as much as possible
bool use_index_{true}; bool use_index_{true};
// used for reducing cache miss latency in tiered storage
bool prefetched_{false};
std::vector<PinWrapper<const index::IndexBase*>> pinned_index_{}; std::vector<PinWrapper<const index::IndexBase*>> pinned_index_{};
int64_t active_count_{0}; int64_t active_count_{0};