Repository navigation
Conversation
Merging this PR will improve performance by 24.86%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ⚡ ℹ️ | Simulation | test_repeated_scan_scalar_at[int_float] |
486.7 µs | 368.2 µs | +32.21% |
| ⚡ | WallTime | filter_neon[80] |
2.9 µs | 2.5 µs | +17.91% |
Tip
Curious why performance improved? Comment @codspeedbot explain why performance improved on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ngates/segment-cache-loads (3e13bab) with develop (18aebea)
Resolve cache lookups before source registration, preserving eager registration for ready misses. Cover cold-read coalescing and cached neighboring segments with regressions and an explicit release benchmark. Signed-off-by: Nicholas Gates <nick@nickgates.com>
08c306e to
ddbda1f
Compare
Signed-off-by: Nicholas Gates <nick@nickgates.com>
|
We don't benchmark this anywhere do we? |
|
Do you have a benchmark? |
Constructing a segment request currently registers the underlying read before checking the cache. When neighboring cached requests have not yet been consumed, Vortex can coalesce them into a physical read and fetch bytes already cached.
Resolve the cache lookup before registering a source read. Eagerly poll one request future so ready cold misses retain registration and read coalescing. Suspend after registration until the caller demands the read, and retain pending cache lookups without restarting them. This avoids a separate owned-lookup future allocation. Cache errors still fall through to the source. No new public APIs or cross-open coordination.
Release benchmark with the real Vortex file coalescer, 16 adjacent 4 KiB segments, and the previous adapter compiled into the same binary as the control:
Physical counts and bytes held across 101 zero-latency repetitions and 9 repetitions with simulated 2 ms storage latency per case. Cold medians with simulated latency were approximately 3.44–3.45 ms before and after. Zero-latency cold medians were 22.8 → 21.1 µs for concurrent demand and 21.5 → 21.5 µs for ordered demand. These are local coalescing measurements, not remote storage or end-to-end scan performance claims. Ready lookups were measured with the built-in cache; a pending custom cache lookup must resolve before its read can be registered.
Regressions cover ready cache hits, eager miss registration without demanding I/O, pending hits/misses without restarting lookups, cold coalescing with concurrent and ordered demand, and cached bytes excluded from ordered coalesced reads. The release benchmark is an explicitly ignored test in
vortex-file/tests/segment_cache_coalescing.rs.Validation: 7 release cache unit cases and 3 release integration/benchmark cases passed. Reproduce with: