Repository navigation
bench: V2 scan decompression on the segment IO protocol - #10569
joseph-isaacs wants to merge 2 commits into
Conversation
Merging this PR will degrade performance by 25.8%4 warnings, 1 note
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
|
CodSpeed Performance Analysis flags one regression:
No fix is needed, and CodSpeed can't be re-run from here. The result this PR exists for is the compression benchmark ( Generated by Claude Code |
Polar Signals Profiling ResultsLatest Run
Previous Runs (1)
Powered by Polar Signals Cloud |
Benchmarks: Compression 📖Commits: PR vortex / vortex-file-compressed / ns (1.005x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / bytes (1.000x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / ratio (1.006x ➖, 0↑ 0↓)
vortex / parquet / ns (0.996x ➖, 0↑ 0↓)
vortex / parquet / bytes (1.000x ➖, 0↑ 0↓)
vortex / arrow-ipc / ns (0.993x ➖, 0↑ 0↓)
vortex / arrow-ipc / bytes (1.000x ➖, 0↑ 0↓)
|
Adds `vortex_io::segments`, keyed by segment source and source request, next
to the byte-range `vortex_io::request` protocol that the planner-driven scan
still uses.
- A request names `IoKey { source: SegmentSourceId, request: SourceRequest }`,
where `SourceRequest ::= Size | Segment(id)`, with an `IoIntent`: `Fetch`,
`Prefetch` or `Announce`. One service serves many segment sources, and reads
resolve to a `SourceResult` (`Size(u64)` or `Bytes(BufferHandle)`).
- `SegmentIoSession::submit` registers a whole batch before any read starts and
returns one `IoHandle` per request. The session holds fetches and prefetches
until they finish; an announcement is withdrawn by dropping its handles.
- `poll_ready` reports every fetch's owner once it finishes and drives the
session's prefetches, through the shared `FetchTracker` helper.
`SegmentIoService::session` opens one session per scope, and
`RegisteredSource` is a source's registration with a service.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4PmceDHg8rFe5bgkhGFU9
Signed-off-by: Claude <noreply@anthropic.com>
Switches the planner-driven scan from the byte-range `vortex_io::request` protocol to `vortex_io::segments`, and serves it with a session-wide `FileSegmentIo` that reads through files' v1 segment sources. - vortex-scan: `Planner` and `Morsel` drop the `IoConsumer` supertrait, publish `NeedsIO(Vec<IoRequest>)`, and receive `deliver(key, result)` once per successful fetch. `Run`/`Driver` submit each root's requests to its `SegmentIoSession` and hold the handles; each item's fetches finish through its own `FuturesUnordered`, so a `poll_ready` report yields exactly the finished fetches. `Run::poll_io` replaces `Run::complete`. The scripted harness is a recording `SegmentIoSession`. - vortex-layout: `ScanAdaptor` fetches each segment once by `IoKey::segment` while any scan read of it is outstanding, and hands the result to every waiting read. The filter planner announces each segment once. `ScanFile` carries the file's `RegisteredSource`, and each split reads through a new session of its service. `SegmentScanIo` and the cached byte-range index it needed are removed. - vortex-file: `FileSegmentIo`, one per `VortexSession`. Size requests are answered at submit; segment requests call `SegmentSource::request`, so they share the file's segment cache, request sharing and coalescing read driver. `VortexFile::scan_file` registers the file's segment source, and a caching file keeps one registration in its scan cache, renewed with its segment source. - vortex-datafusion: the V2 opener shares a file's segment source across partitions through `VortexFile::with_segment_source`. - vortex-io: `request` is removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4PmceDHg8rFe5bgkhGFU9 Signed-off-by: Claude <noreply@anthropic.com>
d3f81d8 to
a5654f2
Compare
Summary
Benchmark only, do not merge. This PR runs the compression benchmark on the stack of #10568 (the segment IO protocol) and #10527 (the V2 executor on that protocol, served by
FileSegmentIo). Its branch is the same tree as #10527, and it targetsdevelopso the label-triggered benchmark runs.The comparison is V2 decompression on the new segment IO against
develop's V2 on the byte-rangerequestprotocol, so the difference measured is the IO layer.See #10527 for the changes and the checks run.
🤖 Generated with Claude Code
https://claude.ai/code/session_01N4PmceDHg8rFe5bgkhGFU9