Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
e8d0564
Add live per-node filtered search + multiple-filter test report
Sanhaoji2 Jul 15, 2026
2c5766b
diskann-label-filter: add flat-CSR live filter provider
Sanhaoji2 Jul 27, 2026
e377dea
diskann-label-filter: add live-filter is_match microbenchmark
Sanhaoji2 Jul 27, 2026
5567745
diskann-benchmark: add topk-multihop-live-filter-csr search type
Sanhaoji2 Jul 27, 2026
d0894b0
docs: add CSR live-filter optimization results to multiple-filter report
Sanhaoji2 Jul 27, 2026
b39b8da
diskann-tools: add bin_cast and tsv_to_diskann_bin data-prep tools
Sanhaoji2 Jul 27, 2026
42b8fc9
diskann-label-filter: add optimized live filter providers
Sanhaoji2 Jul 28, 2026
dff4a45
diskann-benchmark: wire optimized live filter searches
Sanhaoji2 Jul 28, 2026
6b10278
docs: compare optimized live filter strategies
Sanhaoji2 Jul 28, 2026
8eb344c
diskann-label-filter: add flat bitslice DNF evaluation
Sanhaoji2 Aug 6, 2026
9b77d7e
diskann-benchmark: add bitslice DNF search mode
Sanhaoji2 Aug 6, 2026
f4b0b33
diskann: reuse scratch in multihop expansion
Sanhaoji2 Aug 6, 2026
aede0d1
docs: record filtered search optimizations
Sanhaoji2 Aug 6, 2026
df41836
Merge origin/main into jegao/MutipleFilteredTest
Sanhaoji2 Aug 6, 2026
0893c67
diskann-benchmark: add inline Bitslice DNF search
Sanhaoji2 Aug 7, 2026
0322595
docs: compare filtered search strategies
Sanhaoji2 Aug 7, 2026
17b2be3
diskann-label-filter: add encoded label indexes
Sanhaoji2 Aug 7, 2026
f394424
diskann-label-index: isolate encoded label storage
Sanhaoji2 Aug 7, 2026
7b51f7e
diskann-label-index: decouple query storage
Sanhaoji2 Aug 7, 2026
a6451b8
diskann-label-index: add AST query expressions
Sanhaoji2 Aug 9, 2026
bae9e73
diskann-label-index: support recursive AST queries
Sanhaoji2 Aug 9, 2026
a5de3b6
diskann-benchmark: compare encoded filter expressions
Sanhaoji2 Aug 9, 2026
4c58e96
docs: record encoded expression benchmarks
Sanhaoji2 Aug 9, 2026
5eadb21
diskann-benchmark: include encoded query costs
Sanhaoji2 Aug 9, 2026
fa256c1
docs: report query-inclusive filter latency
Sanhaoji2 Aug 9, 2026
0aadf55
docs: summarize multi-filter ANN optimization
Sanhaoji2 Aug 11, 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
12 changes: 12 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ members = [
"diskann-providers",
"diskann-disk",
"diskann-label-filter",
"diskann-label-index",
"diskann-garnet",
"diskann-inmem",
# Infrastructure
Expand Down Expand Up @@ -64,6 +65,7 @@ diskann-providers = { path = "diskann-providers", default-features = false, vers
diskann-inmem = { path = "diskann-inmem", default-features = false, version = "0.55.0" }
diskann-disk = { path = "diskann-disk", version = "0.55.0" }
diskann-label-filter = { path = "diskann-label-filter", version = "0.55.0" }
diskann-label-index = { path = "diskann-label-index", version = "0.55.1-pre.1" }
# Infra
diskann-benchmark-runner = { path = "diskann-benchmark-runner", version = "0.55.0" }
diskann-benchmark-core = { path = "diskann-benchmark-core", version = "0.55.0" }
Expand Down
17 changes: 16 additions & 1 deletion diskann-benchmark-core/src/search/graph/knn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,11 @@ pub struct Summary {
/// This contains one entry per repetition in the batch.
pub p99_latencies: Vec<MicroSeconds>,

/// The 99.9th percentile latency for individual queries.
///
/// This contains one entry per repetition in the batch.
pub p999_latencies: Vec<MicroSeconds>,

/// The recall metrics for search.
///
/// This implementation assumes that search is deterministic and only
Expand Down Expand Up @@ -390,20 +395,29 @@ where
let mut mean_latencies = Vec::with_capacity(results.len());
let mut p90_latencies = Vec::with_capacity(results.len());
let mut p99_latencies = Vec::with_capacity(results.len());
let mut p999_latencies = Vec::with_capacity(results.len());

results.iter_mut().for_each(|r| {
match percentiles::compute_percentiles(r.latencies_mut()) {
Ok(values) => {
let percentiles::Percentiles { mean, p90, p99, .. } = values;
let percentiles::Percentiles {
mean,
p90,
p99,
p999,
..
} = values;
mean_latencies.push(mean);
p90_latencies.push(p90);
p99_latencies.push(p99);
p999_latencies.push(p999);
}
Err(_) => {
let zero = MicroSeconds::new(0);
mean_latencies.push(0.0);
p90_latencies.push(zero);
p99_latencies.push(zero);
p999_latencies.push(zero);
}
}
});
Expand All @@ -416,6 +430,7 @@ where
mean_latencies,
p90_latencies,
p99_latencies,
p999_latencies,
mean_cmps: utils::average_all(
results
.iter()
Expand Down
9 changes: 9 additions & 0 deletions diskann-benchmark-runner/src/utils/percentiles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub struct Percentiles<T> {
pub median: f64,
pub p90: T,
pub p99: T,
pub p999: T,
}

pub trait AsF64Lossy: Copy {
Expand Down Expand Up @@ -77,13 +78,15 @@ where

let p90 = x[((9 * len) / 10).min(len - 1)];
let p99 = x[((99 * len) / 100).min(len - 1)];
let p999 = x[((999 * len) / 1000).min(len - 1)];

Ok(Percentiles {
minimum: x[0],
mean,
median,
p90,
p99,
p999,
})
}

Expand Down Expand Up @@ -163,6 +166,7 @@ mod tests {
median: 10.0,
p90: 10,
p99: 10,
p999: 10,
};
assert_eq!(p, e);
}
Expand All @@ -177,6 +181,7 @@ mod tests {
median: 1.5,
p90: 2,
p99: 2,
p999: 2,
};
assert_eq!(p, e);
}
Expand All @@ -191,6 +196,7 @@ mod tests {
median: 2.0,
p90: 3,
p99: 3,
p999: 3,
};
assert_eq!(p, e);
}
Expand All @@ -205,6 +211,7 @@ mod tests {
median: 5.0,
p90: 9,
p99: 9,
p999: 9,
};
assert_eq!(p, e);
}
Expand All @@ -219,6 +226,7 @@ mod tests {
median: 5.5,
p90: 10,
p99: 10,
p999: 10,
};
assert_eq!(p, e);
}
Expand All @@ -233,6 +241,7 @@ mod tests {
median: 6.0,
p90: 10,
p99: 11,
p999: 11,
};
assert_eq!(p, e);
}
Expand Down
1 change: 1 addition & 0 deletions diskann-benchmark/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ tokio = { workspace = true, features = ["rt-multi-thread"] }
diskann-vector.workspace = true
diskann-wide.workspace = true
diskann-label-filter.workspace = true
diskann-label-index.workspace = true
diskann-tools = { workspace = true }
diskann-disk = { workspace = true, optional = true }
diskann-bftree = { workspace = true, optional = true }
Expand Down
Loading
Loading