Optimize partial Flat random access with blocking I/O - #9415
Optimize partial Flat random access with blocking I/O#9415joseph-isaacs wants to merge 19 commits into
Conversation
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
52bbf7d to
7cc750c
Compare
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
Signed-off-by: Joseph Isaacs <joe.isaacs@live.co.uk>
7cc750c to
41615a2
Compare
Merging this PR will degrade performance by 7.91%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | sparse_is_constant |
559.8 µs | 891.2 µs | -37.18% |
| ❌ | Simulation | compact_sliced[(4096, 90)] |
1.6 µs | 1.9 µs | -13.97% |
| ❌ | Simulation | compact_sliced[(16384, 90)] |
1.8 µs | 2 µs | -13.01% |
| ❌ | Simulation | warm[(64, 256)] |
10.8 ms | 12.2 ms | -11.58% |
| ❌ | Simulation | compress_fsst[(1000, 64, 8)] |
1 ms | 1.2 ms | -11.54% |
| ❌ | Simulation | compress_fsst[(10000, 64, 4)] |
8.6 ms | 9.7 ms | -10.54% |
| ⚡ | WallTime | words_gather_scalar[65536] |
9.4 µs | 8.2 µs | +13.63% |
| ⚡ | Simulation | nullable_polygons_x_nullable_points |
664.9 µs | 587.2 µs | +13.24% |
| ⚡ | Simulation | nullable_polygons_90pct_x_constant_point |
548.3 µs | 487.3 µs | +12.52% |
| 🆕 | Simulation | arrow_export_100_predecoded_arrays |
N/A | 1.5 ms | N/A |
| 🆕 | Simulation | concat_100_canonical_one_row_arrays |
N/A | 131.6 µs | N/A |
| 🆕 | Simulation | container_concat_100_alprd_one_row_arrays |
N/A | 134.5 µs | N/A |
| 🆕 | Simulation | extract_100_prebuilt_arrays_to_arrow |
N/A | 5.6 ms | N/A |
| 🆕 | Simulation | rebuild_100_flat_arrays_from_resident_buffers |
N/A | 4.1 ms | N/A |
| 🆕 | Simulation | rebuild_100_flat_arrays_with_eager_leaf_decode |
N/A | 8.9 ms | N/A |
| 🆕 | Simulation | rebuild_and_extract_100_arrays_to_arrow |
N/A | 9.8 ms | N/A |
| 🆕 | Simulation | rebuild_with_eager_extract_100_arrays_to_arrow |
N/A | 10.2 ms | N/A |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/partial-flat-random-access-blocking (41615a2) with develop (b363fb7)
Footnotes
-
89 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Polar Signals Profiling ResultsLatest Run
Previous Runs (1)
Powered by Polar Signals Cloud |
Benchmarks: Random Access 📖Verdict: No clear signal (medium confidence) How to read Verdict and Engines
random-access / vortex-file-compressed / ns (0.982x ➖, 5↑ 6↓)
random-access / parquet / ns (0.993x ➖, 0↑ 0↓)
random-access / lance / ns (0.993x ➖, 0↑ 0↓)
|
Summary
Why
Uniform feature-vector random access was spending significant CPU in request orchestration, repeated metadata validation, patch handling, and reconstruction. The updated path computes the selected ranges together, shares one exact batch, and reconstructs from the resolved buffers.
This PR is the blocking-I/O control variant. Applying the
action/bench-random-accesslabel runs the existing random-access workflow without enabling io_uring.Measured results
On 8 pinned cores with hot page cache:
Validation
cargo test -p vortex-arraycargo test -p vortex-layoutcargo test -p vortex-io --lib(109 tests)cargo clippy -p vortex-io --lib --all-features -- -D warningscargo test --doc -p vortex-io