From d94ab26e72646e1785d3c7ea8fd9434daa3e46ee Mon Sep 17 00:00:00 2001 From: ZeroJustMe <619378845@qq.com> Date: Tue, 14 Oct 2025 11:37:03 +0800 Subject: [PATCH 1/6] Checkpoint from VS Code for coding agent session --- src/index/ivf.cpp | 8 ++++---- src/operator/join_operator.cpp | 13 ++++++++----- src/utils/monitoring.cpp | 12 ++++++------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/index/ivf.cpp b/src/index/ivf.cpp index a1741c9..e4e84b9 100644 --- a/src/index/ivf.cpp +++ b/src/index/ivf.cpp @@ -20,9 +20,9 @@ void Ivf::debugDumpStateUnlocked() { size_t total_in_lists = 0; for (auto &kv : inverted_lists_) total_in_lists += kv.second.size(); SAGEFLOW_LOG_WARN("INDEX", "DEBUG_DUMP size_={} total_in_lists={} deleted_uids={} nlists={} attempts={} success={} missing={} miss_in_storage={} miss_not_in_storage={} underflow={} ", - size_.load(), total_in_lists, deleted_uids_.size(), inverted_lists_.size(), - erase_attempts_.load(), erase_success_.load(), erase_missing_.load(), - erase_missing_in_storage_.load(), erase_missing_not_in_storage_.load(), erase_underflow_.load()); + size_.load(), total_in_lists, deleted_uids_.size(), inverted_lists_.size(), + erase_attempts_.load(), erase_success_.load(), erase_missing_.load(), + erase_missing_in_storage_.load(), erase_missing_not_in_storage_.load(), erase_underflow_.load()); // 采样输出前几个非空列表的部分内容 int printed = 0; for (auto &kv : inverted_lists_) { @@ -30,7 +30,7 @@ void Ivf::debugDumpStateUnlocked() { std::string sample; size_t limit = std::min(kv.second.size(), 5); for (size_t i = 0; i < limit; ++i) { sample += std::to_string(kv.second[i]); sample.push_back(','); } - SAGEFLOW_LOG_DEBUG("INDEX", "list_id={} size={} sample=[{}]", kv.first, kv.second.size(), sample); + SAGEFLOW_LOG_DEBUG("INDEX", "list_id={} size={} sample=[{}]", kv.first, kv.second.size(), sample); if (++printed >= 5) break; } } diff --git a/src/operator/join_operator.cpp b/src/operator/join_operator.cpp index 8d07424..67d07ac 100644 --- a/src/operator/join_operator.cpp +++ b/src/operator/join_operator.cpp @@ -69,28 +69,31 @@ JoinOperator::JoinOperator(std::unique_ptr &join_func, if (createIndexPair(IndexType::IVF, "join_ivf")) { use_index_ = true; join_method_ = std::make_unique(left_index_id_, right_index_id_, - join_similarity_threshold_, concurrency_manager_); + join_similarity_threshold_, concurrency_manager_); } else { index_kind_ = InternalIndexKind::NONE; use_index_ = false; - join_method_ = std::make_unique(-1, -1, join_similarity_threshold_, concurrency_manager_); + join_method_ = std::make_unique( + -1, -1, join_similarity_threshold_, concurrency_manager_); } } else if (algo == "bruteforce" || algo == "bf" ) { index_kind_ = InternalIndexKind::BRUTEFORCE; if (createIndexPair(IndexType::BruteForce, "join_bf")) { use_index_ = true; join_method_ = std::make_unique(left_index_id_, right_index_id_, - join_similarity_threshold_, concurrency_manager_); + join_similarity_threshold_, concurrency_manager_); } else { index_kind_ = InternalIndexKind::NONE; use_index_ = false; - join_method_ = std::make_unique(-1, -1, join_similarity_threshold_, concurrency_manager_); + join_method_ = std::make_unique( + -1, -1, join_similarity_threshold_, concurrency_manager_); } } else { index_kind_ = InternalIndexKind::NONE; use_index_ = false; is_eager_ = false; - join_method_ = std::make_unique(-1, -1, join_similarity_threshold_, concurrency_manager_); + join_method_ = std::make_unique( + -1, -1, join_similarity_threshold_, concurrency_manager_); } } diff --git a/src/utils/monitoring.cpp b/src/utils/monitoring.cpp index 3381167..2ee5067 100644 --- a/src/utils/monitoring.cpp +++ b/src/utils/monitoring.cpp @@ -22,12 +22,12 @@ void PerformanceMonitor::StartProfiling() { if (!profiling_) { ProfilerStart(profile_output_file_.c_str()); profiling_ = true; - SAGEFLOW_LOG_INFO("MONITOR", "profiling_started file={} ", profile_output_file_); + SAGEFLOW_LOG_INFO("MONITOR", "profiling_started file={} ", profile_output_file_); } else { - SAGEFLOW_LOG_WARN("MONITOR", "profiling_already_running file={} ", profile_output_file_); + SAGEFLOW_LOG_WARN("MONITOR", "profiling_already_running file={} ", profile_output_file_); } #else - std::cerr << "Profiling not available: gperftools not found." << '\n'; + SAGEFLOW_LOG_ERROR("MONITOR", "Profiling not available: gperftools not found."); #endif } @@ -36,12 +36,12 @@ void PerformanceMonitor::StopProfiling() { if (profiling_) { ProfilerStop(); profiling_ = false; - SAGEFLOW_LOG_INFO("MONITOR", "profiling_stopped file={} ", profile_output_file_); + SAGEFLOW_LOG_INFO("MONITOR", "profiling_stopped file={} ", profile_output_file_); } else { - SAGEFLOW_LOG_WARN("MONITOR", "profiling_not_running file={} ", profile_output_file_); + SAGEFLOW_LOG_WARN("MONITOR", "profiling_not_running file={} ", profile_output_file_); } #else - std::cerr << "Profiling not available: gperftools not found." << '\n'; + SAGEFLOW_LOG_ERROR("MONITOR", "Profiling not available: gperftools not found."); #endif } From c4bcbeffef3481a5a8d44cb75757254cc307756e Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:56:04 +0800 Subject: [PATCH 2/6] Add type-safe index parameter system with dynamic IVF calculation based on join window vector count (#4) * Initial plan * Add IVF index parameter passing and window-based calculation - Added getWindowSize() method to ThreadSafeSlidingWindow and JoinFunction - Added new create_index overload accepting IVF parameters (nlist, rebuild_threshold, nprobes) - Added new createIndexPair overload in JoinOperator accepting IVF parameters - Updated JoinOperator constructor to calculate nlist as 4*sqrt(window_size) - Set default rebuild_threshold to 1.5 and nprobes to 10 for IVF indexes - All existing tests pass successfully Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Refactor index parameter passing with type-safe variant system - Replace index-specific parameters with IndexParameters variant - Add IVFParameters, HNSWParameters, and NoParameters structs - Update create_index to accept IndexParameters instead of individual params - Type-safe parameter passing prevents incorrect usage - Extensible design supports all current and future index types - Backward compatible with default parameters - All tests pass Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Update IVF nlist calculation to use window_size/step_size - Changed nlist calculation from sqrt(window_size) to sqrt(window_size/step_size) - Now calculates based on actual vector count in window - Added getStepSize() method to ThreadSafeSlidingWindow and JoinFunction - More accurate clustering based on data volume - All tests pass Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --- include/concurrency/concurrency_manager.h | 2 ++ include/function/join_function.h | 13 +++++++ include/index/index.h | 20 +++++++++++ include/operator/join_operator.h | 1 + src/concurrency/concurrency_manager.cpp | 44 +++++++++++++++++++++++ src/function/join_function.cpp | 8 +++++ src/operator/join_operator.cpp | 26 +++++++++++++- 7 files changed, 113 insertions(+), 1 deletion(-) diff --git a/include/concurrency/concurrency_manager.h b/include/concurrency/concurrency_manager.h index b568f4e..c4b0e6f 100644 --- a/include/concurrency/concurrency_manager.h +++ b/include/concurrency/concurrency_manager.h @@ -24,6 +24,8 @@ class ConcurrencyManager { ~ConcurrencyManager(); auto create_index(const std::string &name, const IndexType &index_type, int dimension) -> int; + auto create_index(const std::string &name, const IndexType &index_type, int dimension, + const IndexParameters& params) -> int; auto create_index(const std::string &name, int dimension) -> int; auto drop_index(const std::string &name) -> bool; diff --git a/include/function/join_function.h b/include/function/join_function.h index cdd05f3..6466b17 100644 --- a/include/function/join_function.h +++ b/include/function/join_function.h @@ -31,6 +31,16 @@ namespace sageFlow { lastEmitted = -1; } + auto getWindowSize() const -> int64_t { + std::lock_guard lock(mutex_); + return windowSize; + } + + auto getStepSize() const -> int64_t { + std::lock_guard lock(mutex_); + return stepSize; + } + auto windowTimeLimit(int64_t timestamp) const -> int64_t { std::lock_guard lock(mutex_); return timestamp - windowSize; @@ -118,6 +128,9 @@ namespace sageFlow { auto setOtherStream(std::shared_ptr other_plan) -> void; auto setWindow(int64_t time_window, int64_t stepsize) -> void; + + auto getWindowSize() const -> int64_t; + auto getStepSize() const -> int64_t; SlidingWindow windowL, windowR; ThreadSafeSlidingWindow threadSafeWindowL, threadSafeWindowR; diff --git a/include/index/index.h b/include/index/index.h index 1d77d72..525d3e4 100644 --- a/include/index/index.h +++ b/include/index/index.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include "compute_engine/compute_engine.h" #include "storage/storage_manager.h" @@ -18,6 +20,24 @@ enum class IndexType { // NOLINT Vectraflow }; +// Index-specific parameter structures +struct IVFParameters { + int nlist = 1000; + double rebuild_threshold = 1.5; + int nprobes = 10; +}; + +struct HNSWParameters { + int m = 20; + int ef_construction = 100; + int ef_search = 40; +}; + +struct NoParameters {}; + +// Variant to hold any index parameters +using IndexParameters = std::variant; + class Index { public: // data diff --git a/include/operator/join_operator.h b/include/operator/join_operator.h index e49b800..1925f2a 100644 --- a/include/operator/join_operator.h +++ b/include/operator/join_operator.h @@ -41,6 +41,7 @@ namespace sageFlow { void initializeIVFIndexes(int nlist, double rebuild_threshold, int nprobes); // 保留现有接口(暂未用到额外参数) bool createIndexPair(IndexType type, const std::string& prefix); + bool createIndexPair(IndexType type, const std::string& prefix, const IndexParameters& params); // 线程安全的窗口更新方法(容器改为 deque) auto updateSideThreadSafe( diff --git a/src/concurrency/concurrency_manager.cpp b/src/concurrency/concurrency_manager.cpp index 2343138..b155405 100644 --- a/src/concurrency/concurrency_manager.cpp +++ b/src/concurrency/concurrency_manager.cpp @@ -47,6 +47,50 @@ auto sageFlow::ConcurrencyManager::create_index(const std::string& name, const I return index->index_id_; } +auto sageFlow::ConcurrencyManager::create_index(const std::string& name, const IndexType& index_type, int dimension, + const IndexParameters& params) -> int { + std::shared_ptr index = nullptr; + switch (index_type) { + case IndexType::None: + return -1; + case IndexType::IVF: + if (auto* ivf_params = std::get_if(¶ms)) { + index = std::make_shared(ivf_params->nlist, ivf_params->rebuild_threshold, ivf_params->nprobes); + } else { + // Use default parameters if wrong type provided + index = std::make_shared(); + } + break; + case IndexType::HNSW: + if (auto* hnsw_params = std::get_if(¶ms)) { + index = std::make_shared(hnsw_params->m, hnsw_params->ef_construction, hnsw_params->ef_search); + } else { + // Use default parameters if wrong type provided + index = std::make_shared(); + } + break; + case IndexType::Vectraflow: + index = std::make_shared(); + break; + case IndexType::BruteForce: + default: + index = std::make_shared(); + break; + } + index->index_id_ = index_id_counter_++; + index->index_type_ = index_type; + index->dimension_ = dimension; + + index->storage_manager_ = storage_; + storage_->engine_ = std::make_shared(); + + const auto blank_controller = std::make_shared(index); + + controller_map_[index->index_id_] = blank_controller; + index_map_[name] = IdWithType{.id_ = index->index_id_, .index_type_ = index_type}; + return index->index_id_; +} + auto sageFlow::ConcurrencyManager::create_index(const std::string& name, int dimension) -> int { return create_index(name, IndexType::BruteForce, dimension); } diff --git a/src/function/join_function.cpp b/src/function/join_function.cpp index e636b3b..6a29d5c 100644 --- a/src/function/join_function.cpp +++ b/src/function/join_function.cpp @@ -51,4 +51,12 @@ auto sageFlow::JoinFunction::setWindow(int64_t windowsize, int64_t stepsize) -> windowR.setWindow(windowsize, stepsize); threadSafeWindowL.setWindow(windowsize, stepsize); threadSafeWindowR.setWindow(windowsize, stepsize); +} + +auto sageFlow::JoinFunction::getWindowSize() const -> int64_t { + return threadSafeWindowL.getWindowSize(); +} + +auto sageFlow::JoinFunction::getStepSize() const -> int64_t { + return threadSafeWindowL.getStepSize(); } \ No newline at end of file diff --git a/src/operator/join_operator.cpp b/src/operator/join_operator.cpp index 67d07ac..921741c 100644 --- a/src/operator/join_operator.cpp +++ b/src/operator/join_operator.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "utils/logger.h" @@ -28,6 +29,13 @@ bool JoinOperator::createIndexPair(IndexType type, const std::string& prefix) { return left_index_id_ != -1 && right_index_id_ != -1; } +bool JoinOperator::createIndexPair(IndexType type, const std::string& prefix, const IndexParameters& params) { + if (!concurrency_manager_) return false; + left_index_id_ = concurrency_manager_->create_index(prefix + "_left", type, join_func_->getDim(), params); + right_index_id_ = concurrency_manager_->create_index(prefix + "_right", type, join_func_->getDim(), params); + return left_index_id_ != -1 && right_index_id_ != -1; +} + static inline std::string to_lower_copy(std::string v) { std::transform(v.begin(), v.end(), v.begin(), [](unsigned char c){return char(std::tolower(c));}); return v; @@ -66,7 +74,23 @@ JoinOperator::JoinOperator(std::unique_ptr &join_func, if (algo == "ivf") { index_kind_ = InternalIndexKind::IVF; - if (createIndexPair(IndexType::IVF, "join_ivf")) { + // Calculate IVF parameters based on window size + // nlist = 4 * sqrt(window_size/step_size), rebuild_threshold = 1.5, nprobes = 10 + int64_t window_size = join_func_->getWindowSize(); + int64_t step_size = join_func_->getStepSize(); + // Calculate actual vector count in window + int64_t vector_count = (step_size > 0) ? (window_size / step_size) : window_size; + int nlist = static_cast(4.0 * std::sqrt(static_cast(vector_count))); + // Ensure nlist is at least 1 + if (nlist < 1) nlist = 1; + + IVFParameters ivf_params{ + .nlist = nlist, + .rebuild_threshold = 1.5, + .nprobes = 10 + }; + + if (createIndexPair(IndexType::IVF, "join_ivf", ivf_params)) { use_index_ = true; join_method_ = std::make_unique(left_index_id_, right_index_id_, join_similarity_threshold_, concurrency_manager_); From 4ecae8398b43f732209f84fdcc69a13019cb9c84 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 20:50:50 +0800 Subject: [PATCH 3/6] Fix parallel join algorithm issues in IVF method for high concurrency scenarios (#5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Checkpoint from VS Code for coding agent session * Initial analysis of parallel join algorithm issues Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix parallel join algorithm issues for IVF method - Fix IVF index race condition by copying candidate lists under lock - Fix expected_matches UID calculation by using consistent modulo base - Fix eager join wait logic to not require window draining - All parallelism levels (1,2,4,8,16,32) now pass with recall >= 0.93 Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix IVF nprobes calculation for better recall at higher parallelism - Increase nprobes to search 30% of clusters (was 8%) for better recall - Addresses recall degradation issue with large datasets and high parallelism - All parallelism levels (1-32) now achieve recall >= 0.926 with 1000 records Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix single-instance concurrency in join operator - Acquire both window locks before getting candidates and executing joins - Prevents race condition where one slot expires records while other queries - Add helper methods that work with locks already held - Significant recall improvement at high parallelism (p8: 0.983, p16: 0.989, p32: 0.985) Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * 优化数据源模式性能测试中的预期匹配计算和等待时间 --------- Co-authored-by: ZeroJustMe <619378845@qq.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --- config/perf_join_datasource_modes.toml | 87 ++--- include/operator/join_metrics.h | 4 + include/operator/join_operator.h | 18 + src/index/ivf.cpp | 29 +- src/operator/join_operator.cpp | 317 ++++++++++++------ test/IntegrationTest/test_pipeline_basic.cpp | 9 +- .../test_join_datasource_modes.cpp | 95 ++++-- test/Performance/test_join_perf_scaling.cpp | 66 ++-- test/data/generated_test_data.fvecs | Bin 0 -> 260000 bytes 9 files changed, 427 insertions(+), 198 deletions(-) create mode 100644 test/data/generated_test_data.fvecs diff --git a/config/perf_join_datasource_modes.toml b/config/perf_join_datasource_modes.toml index 00db08a..84891b5 100644 --- a/config/perf_join_datasource_modes.toml +++ b/config/perf_join_datasource_modes.toml @@ -2,11 +2,12 @@ # Test Mode 1: Generate-Save-Load (generate data, save to file, then load from file) name = "perf_join_gen_save_load_random" mode = "generate_save_load" -methods = ["bruteforce_eager", "ivf_eager"] -sizes = [2000] +#methods = ["bruteforce_eager", "ivf_eager"] +methods = ["ivf_eager"] +sizes = [1000] records_count = 10 vector_dim = 64 -parallelism = [1,2,4] +parallelism = [1,2,4,8,16,32] window_time_ms = [10000] window_trigger_ms = 50 time_interval = 10 @@ -19,43 +20,43 @@ type = "random" [performance_test.storage] format = "fvecs" # Options: "fvecs", "json" file_path = "test/data/generated_test_data.fvecs" - -[[performance_test]] -# Test Mode 2: Direct Load (load data directly from existing file) -name = "perf_join_direct_load_sift" -mode = "direct_load" -methods = ["bruteforce_eager", "ivf_eager"] -sizes = [1000] -records_count = 10 -vector_dim = 128 -parallelism = [1,2] -window_time_ms = [10000] -window_trigger_ms = 50 -time_interval = 10 -similarity_threshold = 0.8 - -[performance_test.data_source] -type = "dataset" -file_path = "data/siftsmall/siftsmall_query.fvecs" -expected_dim = 128 -loop = true - -[[performance_test]] -# Test Mode 3: Generate and Use Directly (no file I/O) -name = "perf_join_direct_use_random" -mode = "generate_direct_use" -methods = ["bruteforce_eager", "ivf_eager"] -sizes = [2000] -records_count = 10 -vector_dim = 64 -parallelism = [1,2,4] -window_time_ms = [10000] -window_trigger_ms = 50 -time_interval = 10 -similarity_threshold = 0.8 -seed = 42 - -[performance_test.data_source] -type = "random" - -log.level = "debug" +# +#[[performance_test]] +## Test Mode 2: Direct Load (load data directly from existing file) +#name = "perf_join_direct_load_sift" +#mode = "direct_load" +#methods = ["bruteforce_eager", "ivf_eager"] +#sizes = [2000] +#records_count = 10 +#vector_dim = 128 +#parallelism = [1,2,4] +#window_time_ms = [10000] +#window_trigger_ms = 50 +#time_interval = 10 +#similarity_threshold = 0.8 +# +#[performance_test.data_source] +#type = "dataset" +#file_path = "data/siftsmall/siftsmall_query.fvecs" +#expected_dim = 128 +#loop = true +# +#[[performance_test]] +## Test Mode 3: Generate and Use Directly (no file I/O) +#name = "perf_join_direct_use_random" +#mode = "generate_direct_use" +#methods = ["bruteforce_eager", "ivf_eager"] +#sizes = [2000] +#records_count = 10 +#vector_dim = 64 +#parallelism = [1,2,4] +#window_time_ms = [10000] +#window_trigger_ms = 50 +#time_interval = 10 +#similarity_threshold = 0.8 +#seed = 42 +# +#[performance_test.data_source] +#type = "random" +# +#log.level = "debug" diff --git a/include/operator/join_metrics.h b/include/operator/join_metrics.h index 7a38e04..a898593 100644 --- a/include/operator/join_metrics.h +++ b/include/operator/join_metrics.h @@ -20,6 +20,8 @@ struct JoinMetrics { std::atomic total_records_left{0}; std::atomic total_records_right{0}; std::atomic total_emits{0}; + std::atomic window_records_left_completed{0}; + std::atomic window_records_right_completed{0}; // 新增:apply 处理耗时与端到端延迟(单位:纳秒,均为累加值;另附计数) std::atomic apply_processing_ns{0}; @@ -33,6 +35,7 @@ struct JoinMetrics { void reset() { window_insert_ns = index_insert_ns = expire_ns = candidate_fetch_ns = similarity_ns = join_function_ns = emit_ns = lock_wait_ns = 0; total_records_left = total_records_right = total_emits = 0; + window_records_left_completed = window_records_right_completed = 0; apply_processing_ns = apply_processing_count = e2e_latency_ns = e2e_latency_count = 0; } void dump_tsv(const std::string& path) { @@ -43,6 +46,7 @@ struct JoinMetrics { #define EMIT(m) ofs<<#m"\t"<> getCandidates( const std::unique_ptr& data_ptr, int slot); + // 获取候选项的辅助方法(假定已持有两个窗口的锁) + std::vector> getCandidatesWithLocksHeld( + const std::unique_ptr& data_ptr, int slot); + // 验证候选项是否在指定窗口中的辅助方法(容器改为 deque) bool validateCandidateInWindow( const std::unique_ptr& candidate, @@ -68,12 +72,26 @@ namespace sageFlow { int slot, std::vector>>& local_return_pool); + // 执行join操作的辅助方法(假定已持有对面窗口的锁) + void executeJoinForCandidatesWithLockHeld( + const std::vector>& candidates, + const std::unique_ptr& data_ptr, + int slot, + const std::deque>& opposite_window, + std::vector>>& local_return_pool); + // Lazy模式的join执行辅助方法 void executeLazyJoin( const std::vector>& candidates, int slot, std::vector>>& local_return_pool); + // Lazy模式的join执行辅助方法(假定已持有两个窗口的锁) + void executeLazyJoinWithLocksHeld( + const std::vector>& candidates, + int slot, + std::vector>>& local_return_pool); + std::unique_ptr join_func_; std::shared_ptr mother_; std::unique_ptr join_method_; diff --git a/src/index/ivf.cpp b/src/index/ivf.cpp index e4e84b9..5ff5fc8 100644 --- a/src/index/ivf.cpp +++ b/src/index/ivf.cpp @@ -491,18 +491,23 @@ auto Ivf::query_for_join(const VectorRecord &record, double join_similarity_thre while (!probe_indices.empty()) { auto cluster_idx = probe_indices.top().second; probe_indices.pop(); - std::shared_lock list_lock(list_mutexes_[cluster_idx]); - if (inverted_lists_.find(cluster_idx) != inverted_lists_.end()) { - const auto& candidate_ids = inverted_lists_.at(cluster_idx); - for (const auto& id_val : candidate_ids) { - if (local_deleted_uids.find(id_val) != local_deleted_uids.end()) { - continue; - } - if (auto candidate = storage_manager_->getVectorByUid(id_val)) { - double similarity = storage_manager_->engine_->Similarity(record.data_, candidate->data_); - if (similarity - join_similarity_threshold > epsilon) { - results.emplace_back(id_val); - } + // Copy the candidate list under lock to avoid race condition + std::vector candidate_ids_copy; + { + std::shared_lock list_lock(list_mutexes_[cluster_idx]); + if (inverted_lists_.find(cluster_idx) != inverted_lists_.end()) { + candidate_ids_copy = inverted_lists_.at(cluster_idx); + } + } + // Process candidates without holding the lock + for (const auto& id_val : candidate_ids_copy) { + if (local_deleted_uids.find(id_val) != local_deleted_uids.end()) { + continue; + } + if (auto candidate = storage_manager_->getVectorByUid(id_val)) { + double similarity = storage_manager_->engine_->Similarity(record.data_, candidate->data_); + if (similarity - join_similarity_threshold > epsilon) { + results.emplace_back(id_val); } } } diff --git a/src/operator/join_operator.cpp b/src/operator/join_operator.cpp index 921741c..bef9288 100644 --- a/src/operator/join_operator.cpp +++ b/src/operator/join_operator.cpp @@ -6,6 +6,7 @@ #include "operator/join_operator_methods/join_methods.h" #include "operator/join_metrics.h" +#include #include #include #include @@ -75,19 +76,23 @@ JoinOperator::JoinOperator(std::unique_ptr &join_func, if (algo == "ivf") { index_kind_ = InternalIndexKind::IVF; // Calculate IVF parameters based on window size - // nlist = 4 * sqrt(window_size/step_size), rebuild_threshold = 1.5, nprobes = 10 + // nlist = 4 * sqrt(window_size/step_size), rebuild_threshold = 2.0 int64_t window_size = join_func_->getWindowSize(); int64_t step_size = join_func_->getStepSize(); // Calculate actual vector count in window int64_t vector_count = (step_size > 0) ? (window_size / step_size) : window_size; int nlist = static_cast(4.0 * std::sqrt(static_cast(vector_count))); // Ensure nlist is at least 1 - if (nlist < 1) nlist = 1; + nlist = std::max(nlist, 1); + + // Calculate nprobes to search at least 30% of clusters for better recall in high-concurrency scenarios + // Cap at 60% to maintain reasonable performance + int nprobes = std::max(15, std::min(nlist * 60 / 100, nlist * 30 / 100)); IVFParameters ivf_params{ .nlist = nlist, - .rebuild_threshold = 1.5, - .nprobes = 10 + .rebuild_threshold = 2.0, + .nprobes = nprobes }; if (createIndexPair(IndexType::IVF, "join_ivf", ivf_params)) { @@ -150,8 +155,12 @@ auto JoinOperator::updateSideThreadSafe( JoinMetrics::instance().lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); JoinMetrics::instance().window_insert_ns.fetch_add(waited, std::memory_order_relaxed); } - if (slot==0) JoinMetrics::instance().total_records_left.fetch_add(1,std::memory_order_relaxed); else JoinMetrics::instance().total_records_right.fetch_add(1,std::memory_order_relaxed); #endif + if (slot == 0) { + JoinMetrics::instance().total_records_left.fetch_add(1,std::memory_order_relaxed); + } else { + JoinMetrics::instance().total_records_right.fetch_add(1,std::memory_order_relaxed); + } // 窗口插入阶段(仅插入) { #ifdef SAGEFLOW_ENABLE_METRICS @@ -182,6 +191,7 @@ auto JoinOperator::updateSideThreadSafe( int64_t timelimit = window.windowTimeLimit(now_time_stamp); // 窗口过期阶段(包含过期判定与容器维护;索引删除单独计时) SAGEFLOW_LOG_DEBUG("JOIN", "Expiring records before timestamp {} now={} current_size={} ", timelimit, now_time_stamp, records.size()); + size_t expired_count = 0; try { // 过期阶段的容器维护开销:将每次 pop_front 计入 window_insert_ns,索引删除计入 index_insert_ns。 while (!records.empty() && records.front()->timestamp_ <= timelimit) { @@ -191,6 +201,7 @@ auto JoinOperator::updateSideThreadSafe( ScopedTimerAtomic t_window_expire_unit(JoinMetrics::instance().window_insert_ns); #endif records.pop_front(); + ++expired_count; } if (use_index_ && concurrency_manager_ && index_id_for_cc != -1) { #ifdef SAGEFLOW_ENABLE_METRICS @@ -205,6 +216,13 @@ auto JoinOperator::updateSideThreadSafe( } catch (const std::exception& e) { SAGEFLOW_LOG_ERROR("JOIN", "Exception during expiration: what={} ", e.what()); } + if (expired_count > 0) { + if (slot == 0) { + JoinMetrics::instance().window_records_left_completed.fetch_add(expired_count, std::memory_order_relaxed); + } else { + JoinMetrics::instance().window_records_right_completed.fetch_add(expired_count, std::memory_order_relaxed); + } + } SAGEFLOW_LOG_DEBUG("JOIN", "Before unlocking records mutex. size={} ", records.size()); lock.unlock(); @@ -253,8 +271,8 @@ auto JoinOperator::process(Response& input_data, int slot) -> std::optional> JoinOperator::getCandidates( - const std::unique_ptr& data_ptr, int slot) { +auto JoinOperator::getCandidates( + const std::unique_ptr& data_ptr, int slot) -> std::vector> { #ifdef SAGEFLOW_ENABLE_METRICS ScopedTimerAtomic t_fetch(JoinMetrics::instance().candidate_fetch_ns); #endif @@ -271,10 +289,9 @@ std::vector> JoinOperator::getCandidates( #ifdef SAGEFLOW_ENABLE_METRICS JoinMetrics::instance().lock_wait_ns.fetch_add(ScopedAccumulateAtomic::now_ns() - before_wait, std::memory_order_relaxed); #endif - for (auto &p : left_records_) - if (p) { - query_records_copy.emplace_back(std::make_unique(*p)); - } + for (auto &p : left_records_) { + if (p) query_records_copy.emplace_back(std::make_unique(*p)); + } } else { // 加锁等待计入 lock_wait #ifdef SAGEFLOW_ENABLE_METRICS @@ -292,9 +309,31 @@ std::vector> JoinOperator::getCandidates( return join_method_->ExecuteLazy(query_records_copy, slot); } -bool JoinOperator::validateCandidateInWindow( +auto JoinOperator::getCandidatesWithLocksHeld( + const std::unique_ptr& data_ptr, int slot) -> std::vector> { + // This version assumes both window locks are already held by caller +#ifdef SAGEFLOW_ENABLE_METRICS + ScopedTimerAtomic t_fetch(JoinMetrics::instance().candidate_fetch_ns); +#endif + if (is_eager_) { + return join_method_->ExecuteEager(*data_ptr, slot); + } + std::deque> query_records_copy; + if (slot == left_slot_id_) { + for (auto &p : left_records_) { + if (p) query_records_copy.emplace_back(std::make_unique(*p)); + } + } else { + for (auto &p : right_records_) { + if (p) query_records_copy.emplace_back(std::make_unique(*p)); + } + } + return join_method_->ExecuteLazy(query_records_copy, slot); +} + +auto JoinOperator::validateCandidateInWindow( const std::unique_ptr& candidate, - const std::deque>& window_records) { + const std::deque>& window_records) -> bool { if (!candidate) return false; for (auto &r : window_records) if (r && r->uid_ == candidate->uid_) return true; return false; @@ -309,6 +348,9 @@ void JoinOperator::executeJoinForCandidates( // 注:similarity_ns 仅用于粗粒度的候选比对阶段计时; ScopedTimerAtomic t_similarity(JoinMetrics::instance().similarity_ns); #endif + + // Critical fix: Lock the opposite window BEFORE validating candidates + // to prevent race condition where candidates expire between index query and validation if (slot == 0) { // 加锁等待计入 lock_wait #ifdef SAGEFLOW_ENABLE_METRICS @@ -318,41 +360,8 @@ void JoinOperator::executeJoinForCandidates( #ifdef SAGEFLOW_ENABLE_METRICS JoinMetrics::instance().lock_wait_ns.fetch_add(ScopedAccumulateAtomic::now_ns() - before_wait, std::memory_order_relaxed); #endif - for (auto &cand : candidates) { - if (validateCandidateInWindow(cand, right_records_)) { - auto left_copy = std::make_unique(*data_ptr); - auto right_copy = std::make_unique(*cand); - uint64_t log_left_uid = left_copy->uid_; - uint64_t log_right_uid = right_copy->uid_; - Response lhs{ResponseType::Record, std::move(left_copy)}; - Response rhs{ResponseType::Record, std::move(right_copy)}; -#ifdef SAGEFLOW_ENABLE_METRICS - { - ScopedTimerAtomic t_joinF(JoinMetrics::instance().join_function_ns); -#endif - try { - auto res = join_func_->Execute(lhs, rhs); - uint64_t result_uid = res.record_ ? res.record_->uid_ : 0; - if (res.record_) { - local_return_pool.emplace_back(left_slot_id_, std::move(res.record_)); - } - SAGEFLOW_LOG_DEBUG("JOIN_EXEC", "slot={} result_uid={} left_uid={} right_uid={} ", - slot, result_uid, log_left_uid, log_right_uid); - } catch (const std::exception& e) { - SAGEFLOW_LOG_ERROR("JOIN_EXEC", "slot={} left_dim={} right_dim={} left_uid={} right_uid={} what={} ", - slot, - (lhs.record_ ? lhs.record_->data_.dim_ : -1), - (rhs.record_ ? rhs.record_->data_.dim_ : -1), - (lhs.record_ ? lhs.record_->uid_ : 0), - (rhs.record_ ? rhs.record_->uid_ : 0), - e.what()); - throw; // 继续向上抛出以保持现有行为 - } -#ifdef SAGEFLOW_ENABLE_METRICS - } -#endif - } - } + // Now we hold the lock, validate and join each candidate + executeJoinForCandidatesWithLockHeld(candidates, data_ptr, slot, right_records_, local_return_pool); } else { // 加锁等待计入 lock_wait #ifdef SAGEFLOW_ENABLE_METRICS @@ -362,17 +371,42 @@ void JoinOperator::executeJoinForCandidates( #ifdef SAGEFLOW_ENABLE_METRICS JoinMetrics::instance().lock_wait_ns.fetch_add(ScopedAccumulateAtomic::now_ns() - before_wait, std::memory_order_relaxed); #endif - for (auto &cand : candidates) { - if (validateCandidateInWindow(cand, left_records_)) { - auto left_copy = std::make_unique(*cand); - auto right_copy = std::make_unique(*data_ptr); - uint64_t log_left_uid = left_copy->uid_; - uint64_t log_right_uid = right_copy->uid_; - Response lhs{ResponseType::Record, std::move(left_copy)}; - Response rhs{ResponseType::Record, std::move(right_copy)}; + // Now we hold the lock, validate and join each candidate + executeJoinForCandidatesWithLockHeld(candidates, data_ptr, slot, left_records_, local_return_pool); + } +} + +void JoinOperator::executeJoinForCandidatesWithLockHeld( + const std::vector>& candidates, + const std::unique_ptr& data_ptr, + int slot, + const std::deque>& opposite_window, + std::vector>>& local_return_pool) { #ifdef SAGEFLOW_ENABLE_METRICS - { - ScopedTimerAtomic t_joinF(JoinMetrics::instance().join_function_ns); + ScopedTimerAtomic t_similarity(JoinMetrics::instance().similarity_ns); +#endif + + for (auto &cand : candidates) { + // Validate candidate is still in window (lock already held by caller) + if (validateCandidateInWindow(cand, opposite_window)) { + std::unique_ptr left_copy; + std::unique_ptr right_copy; + + if (slot == 0) { + left_copy = std::make_unique(*data_ptr); + right_copy = std::make_unique(*cand); + } else { + left_copy = std::make_unique(*cand); + right_copy = std::make_unique(*data_ptr); + } + + uint64_t log_left_uid = left_copy->uid_; + uint64_t log_right_uid = right_copy->uid_; + Response lhs{ResponseType::Record, std::move(left_copy)}; + Response rhs{ResponseType::Record, std::move(right_copy)}; +#ifdef SAGEFLOW_ENABLE_METRICS + { + ScopedTimerAtomic t_joinF(JoinMetrics::instance().join_function_ns); #endif try { auto res = join_func_->Execute(lhs, rhs); @@ -393,9 +427,8 @@ void JoinOperator::executeJoinForCandidates( throw; } #ifdef SAGEFLOW_ENABLE_METRICS - } -#endif } +#endif } } } @@ -493,6 +526,73 @@ void JoinOperator::executeLazyJoin( } } +void JoinOperator::executeLazyJoinWithLocksHeld( + const std::vector>& candidates, + int slot, + std::vector>>& local_return_pool) { + // This version assumes both window locks are already held by caller +#ifdef SAGEFLOW_ENABLE_METRICS + ScopedTimerAtomic t_similarity(JoinMetrics::instance().similarity_ns); +#endif + if (slot == left_slot_id_) { + for (auto &l : left_records_) { + if (!l) continue; + for (auto &cand : candidates) { + if (validateCandidateInWindow(cand, right_records_)) { + auto left_copy = std::make_unique(*l); + auto right_copy = std::make_unique(*cand); + Response lhs{ResponseType::Record, std::move(left_copy)}; + Response rhs{ResponseType::Record, std::move(right_copy)}; + try { +#ifdef SAGEFLOW_ENABLE_METRICS + ScopedTimerAtomic t_joinF(JoinMetrics::instance().join_function_ns); +#endif + auto res = join_func_->Execute(lhs, rhs); + if (res.record_) local_return_pool.emplace_back(left_slot_id_, std::move(res.record_)); + } catch (const std::exception& e) { + SAGEFLOW_LOG_ERROR("JOIN_LAZY", "slot={} left_dim={} right_dim={} left_uid={} right_uid={} what={} ", + slot, + (lhs.record_ ? lhs.record_->data_.dim_ : -1), + (rhs.record_ ? rhs.record_->data_.dim_ : -1), + (lhs.record_ ? lhs.record_->uid_ : 0), + (rhs.record_ ? rhs.record_->uid_ : 0), + e.what()); + throw; + } + } + } + } + } else { + for (auto &r : right_records_) { + if (!r) continue; + for (auto &cand : candidates) { + if (validateCandidateInWindow(cand, left_records_)) { + auto left_copy = std::make_unique(*cand); + auto right_copy = std::make_unique(*r); + Response lhs{ResponseType::Record, std::move(left_copy)}; + Response rhs{ResponseType::Record, std::move(right_copy)}; + try { +#ifdef SAGEFLOW_ENABLE_METRICS + ScopedTimerAtomic t_joinF(JoinMetrics::instance().join_function_ns); +#endif + auto res = join_func_->Execute(lhs, rhs); + if (res.record_) local_return_pool.emplace_back(left_slot_id_, std::move(res.record_)); + } catch (const std::exception& e) { + SAGEFLOW_LOG_ERROR("JOIN_LAZY", "slot={} left_dim={} right_dim={} left_uid={} right_uid={} what={} ", + slot, + (lhs.record_ ? lhs.record_->data_.dim_ : -1), + (rhs.record_ ? rhs.record_->data_.dim_ : -1), + (lhs.record_ ? lhs.record_->uid_ : 0), + (rhs.record_ ? rhs.record_->uid_ : 0), + e.what()); + throw; + } + } + } + } + } +} + auto JoinOperator::apply(Response&& record, int slot, Collector& collector) -> void { #ifdef SAGEFLOW_ENABLE_METRICS // 统计 apply 处理总耗时(一次调用一次计数) @@ -514,63 +614,88 @@ auto JoinOperator::apply(Response&& record, int slot, Collector& collector) -> v return; } - auto candidates = getCandidates(data_ptr, slot); + // Critical fix for single-instance concurrency: + // When triggered, acquire BOTH window locks before getting candidates and executing join + // This prevents the opposite slot from expiring records while we're computing the join + std::vector>> local_return_pool; size_t left_sz = 0, right_sz = 0; - { - std::shared_lock lkL(left_records_mutex_); - left_sz = left_records_.size(); - } - { - std::shared_lock lkR(right_records_mutex_); - right_sz = right_records_.size(); - } + + // Acquire both locks in consistent order (left first, then right) to avoid deadlock +#ifdef SAGEFLOW_ENABLE_METRICS + uint64_t before_lock_L = ScopedAccumulateAtomic::now_ns(); +#endif + std::shared_lock lkL(left_records_mutex_); +#ifdef SAGEFLOW_ENABLE_METRICS + JoinMetrics::instance().lock_wait_ns.fetch_add(ScopedAccumulateAtomic::now_ns() - before_lock_L, std::memory_order_relaxed); + uint64_t before_lock_R = ScopedAccumulateAtomic::now_ns(); +#endif + std::shared_lock lkR(right_records_mutex_); +#ifdef SAGEFLOW_ENABLE_METRICS + JoinMetrics::instance().lock_wait_ns.fetch_add(ScopedAccumulateAtomic::now_ns() - before_lock_R, std::memory_order_relaxed); +#endif + + // Now holding both locks, get window sizes and candidates safely + left_sz = left_records_.size(); + right_sz = right_records_.size(); + + auto candidates = getCandidatesWithLocksHeld(data_ptr, slot); + SAGEFLOW_LOG_DEBUG("JOIN_APPLY", "slot={} cand={} left_win={} right_win={} eager={} use_index={} ", slot, candidates.size(), left_sz, right_sz, (is_eager_?1:0), (use_index_?1:0)); - std::vector>> local_return_pool; if (is_eager_) { - executeJoinForCandidates(candidates, data_ptr, slot, local_return_pool); + // Execute join while holding both locks to ensure consistency + executeJoinForCandidatesWithLockHeld(candidates, data_ptr, slot, + slot == left_slot_id_ ? right_records_ : left_records_, + local_return_pool); } else { - executeLazyJoin(candidates, slot, local_return_pool); - // 清理窗口前加锁等待计入 lock_wait 与 window_insert_ns(视为窗口阶段的一部分) + executeLazyJoinWithLocksHeld(candidates, slot, local_return_pool); + // Release locks before clearing for lazy mode + lkL.unlock(); + lkR.unlock(); + + // 清理窗口前加锁等待计入 lock_wait 与 window_insert_ns(视为窗口阶段的一部分) #ifdef SAGEFLOW_ENABLE_METRICS - uint64_t before_wait_L = ScopedAccumulateAtomic::now_ns(); + uint64_t before_wait_L = ScopedAccumulateAtomic::now_ns(); #endif - std::unique_lock lkL(left_records_mutex_); + std::unique_lock wlkL(left_records_mutex_); #ifdef SAGEFLOW_ENABLE_METRICS - { - uint64_t waited = ScopedAccumulateAtomic::now_ns() - before_wait_L; - JoinMetrics::instance().lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); - JoinMetrics::instance().window_insert_ns.fetch_add(waited, std::memory_order_relaxed); - } - uint64_t before_wait_R = ScopedAccumulateAtomic::now_ns(); + { + uint64_t waited = ScopedAccumulateAtomic::now_ns() - before_wait_L; + JoinMetrics::instance().lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); + JoinMetrics::instance().window_insert_ns.fetch_add(waited, std::memory_order_relaxed); + } + uint64_t before_wait_R = ScopedAccumulateAtomic::now_ns(); #endif - std::unique_lock lkR(right_records_mutex_); + std::unique_lock wlkR(right_records_mutex_); #ifdef SAGEFLOW_ENABLE_METRICS - { - uint64_t waited = ScopedAccumulateAtomic::now_ns() - before_wait_R; - JoinMetrics::instance().lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); - JoinMetrics::instance().window_insert_ns.fetch_add(waited, std::memory_order_relaxed); - } + { + uint64_t waited = ScopedAccumulateAtomic::now_ns() - before_wait_R; + JoinMetrics::instance().lock_wait_ns.fetch_add(waited, std::memory_order_relaxed); + JoinMetrics::instance().window_insert_ns.fetch_add(waited, std::memory_order_relaxed); + } #endif left_records_.clear(); right_records_.clear(); } + + // Locks released here automatically when going out of scope + #ifdef SAGEFLOW_ENABLE_METRICS { ScopedTimerAtomic t_emit(JoinMetrics::instance().emit_ns); #endif - for (auto &p : local_return_pool) { - Response out{ResponseType::Record, std::move(p.second)}; - collector.collect(std::make_unique(std::move(out)), p.first); + for (auto &p : local_return_pool) { + Response out{ResponseType::Record, std::move(p.second)}; + collector.collect(std::make_unique(std::move(out)), p.first); + JoinMetrics::instance().total_emits.fetch_add(1,std::memory_order_relaxed); #ifdef SAGEFLOW_ENABLE_METRICS - JoinMetrics::instance().total_emits.fetch_add(1,std::memory_order_relaxed); - // 端到端延迟:从 apply 进入到对应结果发射的时长(按每条结果计) - const uint64_t now_ns = ScopedAccumulateAtomic::now_ns(); - JoinMetrics::instance().e2e_latency_ns.fetch_add(now_ns - apply_enter_ns, std::memory_order_relaxed); - JoinMetrics::instance().e2e_latency_count.fetch_add(1, std::memory_order_relaxed); + // 端到端延迟:从 apply 进入到对应结果发射的时长(按每条结果计) + const uint64_t now_ns = ScopedAccumulateAtomic::now_ns(); + JoinMetrics::instance().e2e_latency_ns.fetch_add(now_ns - apply_enter_ns, std::memory_order_relaxed); + JoinMetrics::instance().e2e_latency_count.fetch_add(1, std::memory_order_relaxed); #endif - } + } #ifdef SAGEFLOW_ENABLE_METRICS } #endif diff --git a/test/IntegrationTest/test_pipeline_basic.cpp b/test/IntegrationTest/test_pipeline_basic.cpp index 32590da..953730d 100644 --- a/test/IntegrationTest/test_pipeline_basic.cpp +++ b/test/IntegrationTest/test_pipeline_basic.cpp @@ -37,9 +37,14 @@ static void wait_until_processed_and_stable(size_t expected_left, for (;;) { uint64_t l = JoinMetrics::instance().total_records_left.load(); uint64_t r = JoinMetrics::instance().total_records_right.load(); - if (l >= expected_left && r >= expected_right) break; + uint64_t completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t completed_right = JoinMetrics::instance().window_records_right_completed.load(); + if (l >= expected_left && r >= expected_right && + completed_left >= expected_left && completed_right >= expected_right) break; if (std::chrono::steady_clock::now() >= deadline) { - SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{}", l, expected_left, r, expected_right); + SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{} completed={}/{}|{}/{}", + l, expected_left, r, expected_right, + completed_left, expected_left, completed_right, expected_right); break; } std::this_thread::sleep_for(5ms); diff --git a/test/Performance/test_join_datasource_modes.cpp b/test/Performance/test_join_datasource_modes.cpp index f89595a..2a967d6 100644 --- a/test/Performance/test_join_datasource_modes.cpp +++ b/test/Performance/test_join_datasource_modes.cpp @@ -225,7 +225,7 @@ class JoinDataSourceModesTest : public ::testing::TestWithParam> right_records; right_records.reserve(left_records.size()); constexpr uint64_t kRightUidOffset = 500000; + constexpr uint64_t kModuloBase = 1000000ULL; for (auto& lr : left_records) { right_records.push_back(std::make_unique(lr->uid_ + kRightUidOffset, lr->timestamp_, lr->data_)); } @@ -372,8 +373,10 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { const size_t expected_left = left_records.size(); const size_t expected_right = right_records.size(); - // Compute expected matches - auto expected_matches = computeExpectedPairsByTraversal(left_records, right_records, mode_config.threshold, win_ms); + // Compute expected matches - use consistent UID mapping + auto expected_matches = + computeExpectedPairsByTraversal(left_records, right_records, mode_config.threshold, win_ms, 0.1, kModuloBase); + const uint64_t expected_emit_count = static_cast(expected_matches.size()); // Create stream sources auto left_source = std::make_shared("DataModeLeft", std::move(left_records)); @@ -394,7 +397,8 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { int64_t ts = std::max(left->timestamp_, right->timestamp_); return createVectorRecord(id, ts, out); }, mode_config.vector_dim); - join_func->setWindow(win_ms, mode_config.trig_ms); + uint64_t trigger_interval = static_cast(std::max(mode_config.time_interval_ms, 1)); + join_func->setWindow(win_ms, trigger_interval); // Collect matches std::mutex match_mutex; @@ -409,7 +413,7 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { }); // Build pipeline - left_source->join(right_source, std::move(join_func), method, mode_config.threshold, (size_t)parallelism) + left_source->join(right_source, std::move(join_func), method, mode_config.threshold, static_cast(parallelism)) ->writeSink(std::move(sink_func), 1); // Execute @@ -424,30 +428,71 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { // Wait for completion { using namespace std::chrono_literals; - const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(600); + bool timed_out = false; + const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(1000); + // For eager join, we only need to wait for inputs to be processed + // Windows won't drain fully until window time passes after last record + bool is_eager_method = (method.find("eager") != std::string::npos); for (;;) { uint64_t l = JoinMetrics::instance().total_records_left.load(); uint64_t r = JoinMetrics::instance().total_records_right.load(); - if (l >= expected_left && r >= expected_right) break; + uint64_t emitted = JoinMetrics::instance().total_emits.load(); + uint64_t completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t completed_right = JoinMetrics::instance().window_records_right_completed.load(); + bool inputs_drained = (l >= expected_left && r >= expected_right); + bool windows_drained = (completed_left >= expected_left && completed_right >= expected_right); + // For eager methods, just check if inputs are drained and output has stabilized + if (is_eager_method) { + if (inputs_drained) { + std::this_thread::sleep_for(10s); + uint64_t emitted_after_wait = JoinMetrics::instance().total_emits.load(); + if (emitted_after_wait == emitted) { + // Output has stabilized, we're done + break; + } + } + } else { + // For lazy methods, wait for windows to drain + if (inputs_drained && windows_drained) { + std::this_thread::sleep_for(500ms); + break; + } + } if (std::chrono::steady_clock::now() >= deadline) { - SAGEFLOW_LOG_WARN("TEST", "Timeout waiting for processing: left={}/{} right={}/{}", l, expected_left, r, expected_right); + timed_out = true; + SAGEFLOW_LOG_WARN("TEST", "Timeout waiting for processing: left={}/{} right={}/{} completed={}/{}|{}/{} emitted={}/{}", + l, expected_left, r, expected_right, + completed_left, expected_left, completed_right, expected_right, + emitted, expected_emit_count); break; } std::this_thread::sleep_for(5ms); } - - // Wait for output stabilization - const auto stable_window = 50ms; - const auto max_wait = std::chrono::seconds(5); - uint64_t last = JoinMetrics::instance().total_emits.load(); - auto stable_since = std::chrono::steady_clock::now(); - auto end_by = std::chrono::steady_clock::now() + max_wait; - while (std::chrono::steady_clock::now() < end_by) { - std::this_thread::sleep_for(5ms); - uint64_t cur = JoinMetrics::instance().total_emits.load(); - if (cur != last) { last = cur; stable_since = std::chrono::steady_clock::now(); } - if (std::chrono::steady_clock::now() - stable_since >= stable_window) break; + + if (!timed_out) { + // Wait for output stabilization + const auto stable_window = 50ms; + const auto max_wait = std::chrono::seconds(5); + uint64_t last = JoinMetrics::instance().total_emits.load(); + auto stable_since = std::chrono::steady_clock::now(); + auto end_by = std::chrono::steady_clock::now() + max_wait; + while (std::chrono::steady_clock::now() < end_by) { + std::this_thread::sleep_for(5ms); + uint64_t cur = JoinMetrics::instance().total_emits.load(); + if (cur != last) { last = cur; stable_since = std::chrono::steady_clock::now(); } + if (std::chrono::steady_clock::now() - stable_since >= stable_window) break; + } } + uint64_t final_left = JoinMetrics::instance().total_records_left.load(); + uint64_t final_right = JoinMetrics::instance().total_records_right.load(); + uint64_t final_completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t final_completed_right = JoinMetrics::instance().window_records_right_completed.load(); + uint64_t final_emitted = JoinMetrics::instance().total_emits.load(); + EXPECT_FALSE(timed_out) << "Join pipeline did not drain within 1000s: processed left=" << final_left + << "/" << expected_left << " right=" << final_right << "/" << expected_right + << " completed_left=" << final_completed_left << "/" << expected_left + << " completed_right=" << final_completed_right << "/" << expected_right + << " emitted=" << final_emitted << "/" << expected_emit_count; } env.stop(); @@ -461,13 +506,15 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { if (expected_matches.count(ap)) match_count++; } - double recall = expected_matches.empty() ? 1.0 : static_cast(match_count) / static_cast(expected_matches.size()); - double precision = actual_pairs.empty() ? 0.0 : static_cast(match_count) / static_cast(actual_pairs.size()); + double recall = + expected_matches.empty() ? 1.0 : static_cast(match_count) / static_cast(expected_matches.size()); + double precision = + actual_pairs.empty() ? 0.0 : static_cast(match_count) / static_cast(actual_pairs.size()); double f1 = (precision + recall) > 0 ? 2 * precision * recall / (precision + recall) : 0.0; SAGEFLOW_LOG_INFO("TEST", "Result: name={} mode={} method={} size={} parallelism={} time_ms={} matches={}/{} recall={:.3f} precision={:.3f} f1={:.3f}", - mode_config.name, mode_config.mode, method, data_size, parallelism, duration.count(), - match_count, expected_matches.size(), recall, precision, f1); + mode_config.name, mode_config.mode, method, data_size, parallelism, duration.count(), + match_count, expected_matches.size(), recall, precision, f1); // Write to report file try { diff --git a/test/Performance/test_join_perf_scaling.cpp b/test/Performance/test_join_perf_scaling.cpp index ec2706e..891b191 100644 --- a/test/Performance/test_join_perf_scaling.cpp +++ b/test/Performance/test_join_perf_scaling.cpp @@ -62,7 +62,7 @@ class JoinPerformanceTest : public ::testing::Test { } // 创建JoinFunction(使用 test_data_adapter 助手),支持配置维度与窗口 - std::unique_ptr createSimpleJoinFunction(int vector_dim, uint64_t win_ms, uint64_t trig_ms) { + std::unique_ptr createSimpleJoinFunction(int vector_dim, uint64_t win_ms, uint64_t trigger_interval_ms) { auto join_func_lambda = [](std::unique_ptr& left, std::unique_ptr& right) -> std::unique_ptr { auto lv = extractFloatVector(*left); @@ -76,7 +76,7 @@ class JoinPerformanceTest : public ::testing::Test { return createVectorRecord(id, ts, out); }; auto jf = std::make_unique("SimpleJoin", join_func_lambda, vector_dim); - jf->setWindow(win_ms, trig_ms); + jf->setWindow(win_ms, trigger_interval_ms); return jf; } @@ -302,10 +302,12 @@ TEST_P(JoinScalingTest, PerformanceScaling) { // 仅使用 perf_join.toml 的窗口与阈值配置(不再读取其他 toml) static PerfConfigSets g_sets = loadPerfConfig(); - uint64_t trig_ms = g_sets.trig_ms; double threshold_override = g_sets.threshold; + uint64_t trigger_interval_ms = static_cast(std::max(g_sets.time_interval_ms, 1)); + double threshold_override = g_sets.threshold; // 打印本轮的窗口/阈值等关键参数 - SAGEFLOW_LOG_INFO("TEST", "[PARAM] threshold={} win_ms={} trig_ms={} time_interval_ms={} ", threshold_override, win_ms, trig_ms, g_sets.time_interval_ms); + SAGEFLOW_LOG_INFO("TEST", "[PARAM] threshold={} win_ms={} trigger_interval_ms={} (time_interval_ms={}) ", + threshold_override, win_ms, trigger_interval_ms, g_sets.time_interval_ms); // 构建环境与 Source StreamEnvironment env; @@ -348,7 +350,7 @@ TEST_P(JoinScalingTest, PerformanceScaling) { int64_t ts = std::max(left->timestamp_, right->timestamp_); return createVectorRecord(id, ts, out); }, g_sets.vector_dim); - join_func->setWindow(win_ms, trig_ms); + join_func->setWindow(win_ms, trigger_interval_ms); // pipeline 构建 // 收集实际匹配对用于精准 recall @@ -375,19 +377,26 @@ TEST_P(JoinScalingTest, PerformanceScaling) { // 等待直到 JoinOperator 消费完所有输入(以指标计数为准),避免固定时间等待 { using namespace std::chrono_literals; + bool timed_out = false; const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(800); // 最长等待 800s for (;;) { - uint64_t l = JoinMetrics::instance().total_records_left.load(); - uint64_t r = JoinMetrics::instance().total_records_right.load(); - if (l >= expected_left && r >= expected_right) break; + uint64_t l = JoinMetrics::instance().total_records_left.load(); + uint64_t r = JoinMetrics::instance().total_records_right.load(); + uint64_t completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t completed_right = JoinMetrics::instance().window_records_right_completed.load(); + if (l >= expected_left && r >= expected_right && + completed_left >= expected_left && completed_right >= expected_right) break; if (std::chrono::steady_clock::now() >= deadline) { - SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{}", l, expected_left, r, expected_right); + timed_out = true; + SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{} completed={}/{}|{}/{}", + l, expected_left, r, expected_right, + completed_left, expected_left, completed_right, expected_right); break; } std::this_thread::sleep_for(5ms); } // 再等待输出稳定(total_emits 在短时间窗口内不再增长),避免在有在途计算时过早 stop - { + if (!timed_out) { const auto stable_window = 50ms; // 连续 50ms 无增长视为稳定 const auto max_wait = std::chrono::seconds(5); uint64_t last = JoinMetrics::instance().total_emits.load(); @@ -400,6 +409,14 @@ TEST_P(JoinScalingTest, PerformanceScaling) { if (std::chrono::steady_clock::now() - stable_since >= stable_window) break; } } + uint64_t final_left = JoinMetrics::instance().total_records_left.load(); + uint64_t final_right = JoinMetrics::instance().total_records_right.load(); + uint64_t final_completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t final_completed_right = JoinMetrics::instance().window_records_right_completed.load(); + EXPECT_FALSE(timed_out) << "Join pipeline did not drain within 800s: processed left=" << final_left + << "/" << expected_left << " right=" << final_right << "/" << expected_right + << " completed_left=" << final_completed_left << "/" << expected_left + << " completed_right=" << final_completed_right << "/" << expected_right; } env.stop(); env.awaitTermination(); @@ -421,8 +438,8 @@ TEST_P(JoinScalingTest, PerformanceScaling) { double precision = static_cast(match_count)/static_cast(actual_pairs.size()); double f1 = (precision+recall)>0 ? 2*precision*recall/(precision+recall):0.0; - SAGEFLOW_LOG_INFO("TEST", "Method={} Size={} Parallelism={} time_ms={} matches={} expected={} recall={} precision={} f1={} win_ms={} trig_ms={} ", - method, data_size, parallelism, duration.count(), match_count, expected_matches.size(), recall, precision, f1, win_ms, trig_ms); + SAGEFLOW_LOG_INFO("TEST", "Method={} Size={} Parallelism={} time_ms={} matches={} expected={} recall={} precision={} f1={} win_ms={} trigger_interval_ms={} ", + method, data_size, parallelism, duration.count(), match_count, expected_matches.size(), recall, precision, f1, win_ms, trigger_interval_ms); // 将结果追加写入报告 try { @@ -443,7 +460,7 @@ TEST_P(JoinScalingTest, PerformanceScaling) { return; // 放弃写报告,但不影响测试断言 } if (new_file) { - ofs << "method\tsize\tparallelism\ttime_ms\tmatches\texpected\trecall\tprecision\tf1\twin_ms\ttrig_ms\t" + ofs << "method\tsize\tparallelism\ttime_ms\tmatches\texpected\trecall\tprecision\tf1\twin_ms\ttrigger_interval_ms\t" "lock_wait_ms\twindow_ns\tindex_ns\tsim_ns\tjoinF_ns\temit_ns\tcandidate_fetch_ns\t" "input_tput_rps\toutput_tput_rps\tavg_apply_ms\tavg_e2e_ms\n"; } @@ -467,7 +484,7 @@ TEST_P(JoinScalingTest, PerformanceScaling) { } ofs << method << '\t' << data_size << '\t' << parallelism << '\t' << duration.count() << '\t' << match_count << '\t' << expected_matches.size() << '\t' << recall << '\t' << precision << '\t' << f1 << '\t' - << win_ms << '\t' << trig_ms << '\t' << lock_wait_ms << '\t' + << win_ms << '\t' << trigger_interval_ms << '\t' << lock_wait_ms << '\t' << JoinMetrics::instance().window_insert_ns.load() << '\t' << JoinMetrics::instance().index_insert_ns.load() << '\t' << JoinMetrics::instance().similarity_ns.load() << '\t' @@ -514,12 +531,14 @@ INSTANTIATE_TEST_SUITE_P(JoinPerformanceTests, JoinScalingTest, TEST_F(JoinPerformanceTest, MethodSpeedComparison) { // 从配置读取 sizes、parallelism、methods 以及窗口与阈值 auto sets = loadPerfConfig(); + uint64_t trigger_interval_ms = static_cast(std::max(sets.time_interval_ms, 1)); for (auto data_size : sets.sizes) { for (auto par : sets.parallelism) { for (auto win_ms : sets.win_ms_list) { - SAGEFLOW_LOG_INFO("TEST", "[BEGIN] MethodSpeedComparison size={} parallelism={} win_ms={} ", data_size, par, win_ms); - SAGEFLOW_LOG_INFO("TEST", "[PARAM] threshold={} win_ms={} trig_ms={} ", sets.threshold, win_ms, sets.trig_ms); + SAGEFLOW_LOG_INFO("TEST", "[BEGIN] MethodSpeedComparison size={} parallelism={} win_ms={} ", data_size, par, win_ms); + SAGEFLOW_LOG_INFO("TEST", "[PARAM] threshold={} win_ms={} trigger_interval_ms={} (time_interval_ms={}) ", + sets.threshold, win_ms, trigger_interval_ms, sets.time_interval_ms); std::vector> method_times; @@ -554,7 +573,7 @@ TEST_F(JoinPerformanceTest, MethodSpeedComparison) { auto left_source = std::make_shared("MSLeft", std::move(left_records)); auto right_source = std::make_shared("MSRight", std::move(right_records)); - auto join_func = createSimpleJoinFunction(sets.vector_dim, win_ms, sets.trig_ms); + auto join_func = createSimpleJoinFunction(sets.vector_dim, win_ms, trigger_interval_ms); std::atomic match_count{0}; auto sink_func = std::make_unique("MSSink", [&](std::unique_ptr& rec){ if (rec) match_count++; }); @@ -576,9 +595,14 @@ TEST_F(JoinPerformanceTest, MethodSpeedComparison) { for (;;) { uint64_t l = JoinMetrics::instance().total_records_left.load(); uint64_t r = JoinMetrics::instance().total_records_right.load(); - if (l >= expected_left && r >= expected_right) break; + uint64_t completed_left = JoinMetrics::instance().window_records_left_completed.load(); + uint64_t completed_right = JoinMetrics::instance().window_records_right_completed.load(); + if (l >= expected_left && r >= expected_right && + completed_left >= expected_left && completed_right >= expected_right) break; if (std::chrono::steady_clock::now() >= deadline) { - SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{}", l, expected_left, r, expected_right); + SAGEFLOW_LOG_WARN("TEST", "wait_for_processed timeout l={}/{} r={}/{} completed={}/{}|{}/{}", + l, expected_left, r, expected_right, + completed_left, expected_left, completed_right, expected_right); break; } std::this_thread::sleep_for(5ms); @@ -590,8 +614,8 @@ TEST_F(JoinPerformanceTest, MethodSpeedComparison) { auto duration = std::chrono::duration_cast(end - start); method_times.emplace_back(method, duration.count()); - SAGEFLOW_LOG_INFO("TEST", "Method={} Size={} Par={} time_ms={} matches={} win_ms={} trig_ms={} ", - method, data_size, par, duration.count(), (size_t)match_count.load(), win_ms, sets.trig_ms); + SAGEFLOW_LOG_INFO("TEST", "Method={} Size={} Par={} time_ms={} matches={} win_ms={} trigger_interval_ms={} ", + method, data_size, par, duration.count(), (size_t)match_count.load(), win_ms, trigger_interval_ms); } // 验证:在较大规模(>=5000)下 IVF 应当快于 Bruteforce(放宽倍数关系以避免偶然波动) diff --git a/test/data/generated_test_data.fvecs b/test/data/generated_test_data.fvecs new file mode 100644 index 0000000000000000000000000000000000000000..268d1ebb627817889d01a61133e67b0b9a8f421a GIT binary patch literal 260000 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

-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 Date: Mon, 20 Oct 2025 23:14:26 +0800 Subject: [PATCH 4/6] Add CI performance testing workflow and configuration (#7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Checkpoint from VS Code for coding agent session * Initial analysis of parallel join algorithm issues Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix parallel join algorithm issues for IVF method - Fix IVF index race condition by copying candidate lists under lock - Fix expected_matches UID calculation by using consistent modulo base - Fix eager join wait logic to not require window draining - All parallelism levels (1,2,4,8,16,32) now pass with recall >= 0.93 Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix IVF nprobes calculation for better recall at higher parallelism - Increase nprobes to search 30% of clusters (was 8%) for better recall - Addresses recall degradation issue with large datasets and high parallelism - All parallelism levels (1-32) now achieve recall >= 0.926 with 1000 records Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * Fix single-instance concurrency in join operator - Acquire both window locks before getting candidates and executing joins - Prevents race condition where one slot expires records while other queries - Add helper methods that work with locks already held - Significant recall improvement at high parallelism (p8: 0.983, p16: 0.989, p32: 0.985) Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> * 优化数据源模式性能测试中的预期匹配计算和等待时间 * [WIP] Add new performance test file for ci (#6) * Checkpoint from VS Code for coding agent session * Add CI performance testing workflow and configuration - Created perf-ci-tests.yml workflow for parallel join performance testing - Created perf_join_datasource_modes_ci.toml with smaller dataset (1000 records) - Tests parallelism levels 1, 2, 4, 8, 16, 32 for both bruteforce_eager and ivf_eager - Verified locally: tests pass with recall > 0.98 (above 0.85 threshold) Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --------- Co-authored-by: ZeroJustMe <619378845@qq.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: ZeroJustMe <13223093+ZeroJustMe@users.noreply.github.com> --- .github/workflows/perf-ci-tests.yml | 90 +++++++++++++++++++++++ config/perf_join_datasource_modes.toml | 86 +++++++++++----------- config/perf_join_datasource_modes_ci.toml | 20 +++++ 3 files changed, 153 insertions(+), 43 deletions(-) create mode 100644 .github/workflows/perf-ci-tests.yml create mode 100644 config/perf_join_datasource_modes_ci.toml diff --git a/.github/workflows/perf-ci-tests.yml b/.github/workflows/perf-ci-tests.yml new file mode 100644 index 0000000..09093ad --- /dev/null +++ b/.github/workflows/perf-ci-tests.yml @@ -0,0 +1,90 @@ +name: Performance Testing - Parallel Join + +on: + pull_request: + branches: [ main, main-dev ] + push: + branches: [ main ] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + performance-test: + name: ${{ matrix.os }} | Performance Test + runs-on: ${{ matrix.os }} + env: + # Set log level to info for CI performance tests + SAGEFLOW_LOG_LEVEL: info + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + build_type: [ Release ] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Install C++ toolchain (consistent with main-ci-tests.yml) + - name: Install C++ toolchain (Ubuntu) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + build-essential \ + cmake \ + pkg-config + + - name: Show compiler versions + if: runner.os == 'Linux' + run: | + g++ --version || true + gcc --version || true + cmake --version || true + + - name: Configure CMake + run: | + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ + -DBUILD_TESTING=ON \ + -DSAGEFLOW_ENABLE_METRICS=ON \ + -DSAGEFLOW_BUILD_PYBIND=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + + - name: Build + run: | + cmake --build build --config ${{ matrix.build_type }} --parallel + + - name: Run parallel join performance tests + run: | + # Run performance test with CI-specific configuration + # Using the perf_join_datasource_modes_ci.toml configuration + cd build + # Copy the CI config to the expected location for the test + cp ../config/perf_join_datasource_modes_ci.toml ../config/perf_join_datasource_modes.toml.bak + # Temporarily use CI config + mv ../config/perf_join_datasource_modes.toml ../config/perf_join_datasource_modes.toml.orig || true + cp ../config/perf_join_datasource_modes_ci.toml ../config/perf_join_datasource_modes.toml + # Run the performance test + ctest --test-dir . --output-on-failure -R "test_join_datasource_modes" -L PERF + # Restore original config + mv ../config/perf_join_datasource_modes.toml.orig ../config/perf_join_datasource_modes.toml || true + + - name: Upload performance metrics + if: always() + uses: actions/upload-artifact@v4 + with: + name: performance-metrics + path: | + build/metrics/** + test/result/** + + - name: Upload test logs on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: ctest-logs-perf + path: | + build/Testing/** + build/*.log diff --git a/config/perf_join_datasource_modes.toml b/config/perf_join_datasource_modes.toml index 84891b5..6d3040b 100644 --- a/config/perf_join_datasource_modes.toml +++ b/config/perf_join_datasource_modes.toml @@ -2,9 +2,9 @@ # Test Mode 1: Generate-Save-Load (generate data, save to file, then load from file) name = "perf_join_gen_save_load_random" mode = "generate_save_load" -#methods = ["bruteforce_eager", "ivf_eager"] -methods = ["ivf_eager"] -sizes = [1000] +methods = ["bruteforce_eager", "ivf_eager"] +#methods = ["ivf_eager"] +sizes = [4000] records_count = 10 vector_dim = 64 parallelism = [1,2,4,8,16,32] @@ -20,43 +20,43 @@ type = "random" [performance_test.storage] format = "fvecs" # Options: "fvecs", "json" file_path = "test/data/generated_test_data.fvecs" -# -#[[performance_test]] -## Test Mode 2: Direct Load (load data directly from existing file) -#name = "perf_join_direct_load_sift" -#mode = "direct_load" -#methods = ["bruteforce_eager", "ivf_eager"] -#sizes = [2000] -#records_count = 10 -#vector_dim = 128 -#parallelism = [1,2,4] -#window_time_ms = [10000] -#window_trigger_ms = 50 -#time_interval = 10 -#similarity_threshold = 0.8 -# -#[performance_test.data_source] -#type = "dataset" -#file_path = "data/siftsmall/siftsmall_query.fvecs" -#expected_dim = 128 -#loop = true -# -#[[performance_test]] -## Test Mode 3: Generate and Use Directly (no file I/O) -#name = "perf_join_direct_use_random" -#mode = "generate_direct_use" -#methods = ["bruteforce_eager", "ivf_eager"] -#sizes = [2000] -#records_count = 10 -#vector_dim = 64 -#parallelism = [1,2,4] -#window_time_ms = [10000] -#window_trigger_ms = 50 -#time_interval = 10 -#similarity_threshold = 0.8 -#seed = 42 -# -#[performance_test.data_source] -#type = "random" -# -#log.level = "debug" + +[[performance_test]] +# Test Mode 2: Direct Load (load data directly from existing file) +name = "perf_join_direct_load_sift" +mode = "direct_load" +methods = ["bruteforce_eager", "ivf_eager"] +sizes = [2000] +records_count = 10 +vector_dim = 128 +parallelism = [1,2,4,8,16,32] +window_time_ms = [10000] +window_trigger_ms = 50 +time_interval = 10 +similarity_threshold = 0.8 + +[performance_test.data_source] +type = "dataset" +file_path = "data/siftsmall/siftsmall_query.fvecs" +expected_dim = 128 +loop = true + +[[performance_test]] +# Test Mode 3: Generate and Use Directly (no file I/O) +name = "perf_join_direct_use_random" +mode = "generate_direct_use" +methods = ["bruteforce_eager", "ivf_eager"] +sizes = [2000] +records_count = 10 +vector_dim = 64 +parallelism = [1,2,4,8,16,32] +window_time_ms = [10000] +window_trigger_ms = 50 +time_interval = 10 +similarity_threshold = 0.8 +seed = 42 + +[performance_test.data_source] +type = "random" + +log.level = "debug" diff --git a/config/perf_join_datasource_modes_ci.toml b/config/perf_join_datasource_modes_ci.toml new file mode 100644 index 0000000..b46493c --- /dev/null +++ b/config/perf_join_datasource_modes_ci.toml @@ -0,0 +1,20 @@ +[[performance_test]] +# CI Performance Test: Generate-Direct-Use (no file I/O for faster CI execution) +# Using smaller dataset size optimized for CI environment +name = "ci_perf_join_parallel_test" +mode = "generate_direct_use" +methods = ["bruteforce_eager", "ivf_eager"] +sizes = [1000] # Smaller size for CI - fast execution while testing parallelism +records_count = 1000 +vector_dim = 64 +parallelism = [1, 2, 4, 8, 16, 32] # Test all parallelism levels from 1 to 32 +window_time_ms = [10000] +window_trigger_ms = 50 +time_interval = 10 +similarity_threshold = 0.8 +seed = 42 + +[performance_test.data_source] +type = "random" + +log.level = "info" From 2bca13f8ad18bdb43ac6174324b303a70091a0e4 Mon Sep 17 00:00:00 2001 From: Ziao Wang <619378845@qq.com> Date: Mon, 27 Oct 2025 10:33:55 +0800 Subject: [PATCH 5/6] Update test/Performance/test_join_datasource_modes.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- test/Performance/test_join_datasource_modes.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Performance/test_join_datasource_modes.cpp b/test/Performance/test_join_datasource_modes.cpp index 2a967d6..a5cf2ab 100644 --- a/test/Performance/test_join_datasource_modes.cpp +++ b/test/Performance/test_join_datasource_modes.cpp @@ -374,8 +374,9 @@ TEST_P(JoinDataSourceModesTest, DataSourceModePerformance) { const size_t expected_right = right_records.size(); // Compute expected matches - use consistent UID mapping + constexpr double kAlpha = 0.1; auto expected_matches = - computeExpectedPairsByTraversal(left_records, right_records, mode_config.threshold, win_ms, 0.1, kModuloBase); + computeExpectedPairsByTraversal(left_records, right_records, mode_config.threshold, win_ms, kAlpha, kModuloBase); const uint64_t expected_emit_count = static_cast(expected_matches.size()); // Create stream sources From 7805b6a7cd496a181774522493c1163ed7dd3fc8 Mon Sep 17 00:00:00 2001 From: Ziao Wang <619378845@qq.com> Date: Mon, 27 Oct 2025 11:06:09 +0800 Subject: [PATCH 6/6] Update src/operator/join_operator.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/operator/join_operator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/operator/join_operator.cpp b/src/operator/join_operator.cpp index bef9288..91c628c 100644 --- a/src/operator/join_operator.cpp +++ b/src/operator/join_operator.cpp @@ -688,8 +688,8 @@ auto JoinOperator::apply(Response&& record, int slot, Collector& collector) -> v for (auto &p : local_return_pool) { Response out{ResponseType::Record, std::move(p.second)}; collector.collect(std::make_unique(std::move(out)), p.first); - JoinMetrics::instance().total_emits.fetch_add(1,std::memory_order_relaxed); #ifdef SAGEFLOW_ENABLE_METRICS + JoinMetrics::instance().total_emits.fetch_add(1,std::memory_order_relaxed); // 端到端延迟:从 apply 进入到对应结果发射的时长(按每条结果计) const uint64_t now_ns = ScopedAccumulateAtomic::now_ns(); JoinMetrics::instance().e2e_latency_ns.fetch_add(now_ns - apply_enter_ns, std::memory_order_relaxed);