Skip to content

Add IVF sampled ADC start-point router - #1279

Closed
xwj-ox wants to merge 1 commit into
mainfrom
codex/ivf-sampled-adc-router
Closed

Add IVF sampled ADC start-point router#1279
xwj-ox wants to merge 1 commit into
mainfrom
codex/ivf-sampled-adc-router

Conversation

@xwj-ox

@xwj-ox xwj-ox commented Jul 28, 2026

Copy link
Copy Markdown

Summary

  • add a focused IVF posting-list sampled ADC start-point router for disk search
  • build and load an IVF+PQ router artifact with centroids, posting offsets, posting IDs, and fallback medoid
  • route queries by probing IVF cells, strided sampling posting lists, scoring sampled IDs with existing global PQ ADC, and seeding disk Vamana traversal
  • wire benchmark build/search config for ivf_pq_router_build and start_point_router
  • include bilingual RFC for the sampled ADC design

Scope

This intentionally excludes residual PQ, PQ sidecars, block routers, hierarchy, posting-order PQ layout, mmap artifact loading, and experiment result artifacts.

Validation

  • cargo fmt --all --check
  • cargo test -p diskann-disk ivf -- --nocapture
  • cargo test -p diskann-benchmark --features disk-index ivf_pq -- --nocapture
  • cargo clippy -p diskann-disk --tests -- -D warnings
  • cargo clippy -p diskann-benchmark --features disk-index --bins --tests -- -D warnings

Copilot AI review requested due to automatic review settings July 28, 2026 07:22

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an IVF+PQ posting-list sampled ADC start-point router for DiskANN disk search, including artifact build/load support, query-time routing to seed disk Vamana traversal, and benchmark plumbing to configure and report router metrics. It also adds a bilingual RFC documenting the design and experimental operating points.

Changes:

  • Add IVF+PQ router artifact format + builder (centroids + posting IDs + offsets + optional fallback medoid) and query-time routing integration for disk search.
  • Extend disk search statistics and benchmark reporting to include router time and sampled-ADC diagnostics.
  • Add benchmark configuration schema for ivf_pq_router_build and start_point_router, plus RFC documentation (EN/ZH).

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
rfcs/00001-ivf-pq-posting-list-sampled-adc-router.zh.md Chinese RFC describing sampled ADC router design, metrics, and rollout plan
rfcs/00001-ivf-pq-posting-list-sampled-adc-router.en.md English RFC describing sampled ADC router design, metrics, and rollout plan
diskann-disk/src/utils/statistics.rs Adds router timing and diagnostic counters to QueryStatistics
diskann-disk/src/search/start_point_router.rs Introduces StartPointRouter enum wrapper for query-time routing
diskann-disk/src/search/provider/disk_provider.rs Integrates router into disk search path; records router stats; adds routing helpers + unit tests
diskann-disk/src/search/mod.rs Exposes new ivf_pq_router and start_point_router modules
diskann-disk/src/search/ivf_pq_router.rs Implements IVF router artifact build/serialize/deserialize and query-time router parameters
diskann-benchmark/src/inputs/disk.rs Adds JSON config for router artifact build and start-point router selection
diskann-benchmark/src/disk_index/search.rs Loads router artifacts, passes router into disk searcher, and reports new router metrics
diskann-benchmark/src/disk_index/build.rs Builds IVF+PQ router artifacts during benchmark disk-index build step

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +390 to +392
if data.len() != num_points * dim {
return Err(index_error("data length must equal num_points * dim"));
}
Comment on lines +354 to +365
let mut centroids = vec![0.0; num_centroids * dim];
for value in &mut centroids {
*value = reader.read_f32::<LittleEndian>()?;
}
let mut offsets = vec![0usize; num_centroids + 1];
for offset in &mut offsets {
*offset = usize::try_from(reader.read_u64::<LittleEndian>()?)?;
}
let mut posting_ids = vec![0u32; num_postings];
for id in &mut posting_ids {
*id = reader.read_u32::<LittleEndian>()?;
}
Comment on lines 1516 to 1518
query_stats.cpu_time_us = query_stats.total_execution_time_us
- query_stats.io_time_us
- query_stats.query_pq_preprocess_time_us;
| Parameter | Value |
|---|---:|
| IVF cells | 2048 |
| load mode | mmap |
| 参数 | 值 |
|---|---:|
| IVF cells | 2048 |
| load mode | mmap |
@codecov-commenter

codecov-commenter commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.64246% with 246 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.31%. Comparing base (e197b43) to head (200b6f7).

Files with missing lines Patch % Lines
diskann-disk/src/search/ivf_pq_router.rs 67.62% 146 Missing ⚠️
diskann-disk/src/search/provider/disk_provider.rs 65.21% 88 Missing ⚠️
diskann-benchmark/src/inputs/disk.rs 0.00% 8 Missing ⚠️
diskann-disk/src/search/start_point_router.rs 0.00% 4 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1279      +/-   ##
==========================================
- Coverage   91.50%   91.31%   -0.20%     
==========================================
  Files         497      499       +2     
  Lines       95524    96230     +706     
==========================================
+ Hits        87411    87874     +463     
- Misses       8113     8356     +243     
Flag Coverage Δ
miri 91.31% <65.64%> (-0.20%) ⬇️
unittests 91.28% <65.64%> (-0.19%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
diskann-disk/src/utils/statistics.rs 100.00% <ø> (ø)
diskann-disk/src/search/start_point_router.rs 0.00% <0.00%> (ø)
diskann-benchmark/src/inputs/disk.rs 1.41% <0.00%> (-0.03%) ⬇️
diskann-disk/src/search/provider/disk_provider.rs 88.94% <65.21%> (-4.98%) ⬇️
diskann-disk/src/search/ivf_pq_router.rs 67.62% <67.62%> (ø)

... and 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@xwj-ox xwj-ox closed this Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants