Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
57ff482
feat(morsel): add the P1 morsel-driven scan executor spine
joseph-isaacs Aug 27, 2026
cca7f7a
feat(morsel): evaluate the P1 spine against the V1 LayoutReader
joseph-isaacs Aug 27, 2026
dabd419
fix(morsel): remove the decoded-chunk cache the V1 LayoutReader does …
joseph-isaacs Aug 27, 2026
f22008b
feat(morsel): recover cross-morsel decode reuse with leased shared cells
joseph-isaacs Aug 27, 2026
27cf7d4
feat(morsel): benchmark real TPC-H queries end to end on both executors
joseph-isaacs Aug 27, 2026
e9fd51f
docs(morsel): record the real TPC-H SF=1 results
joseph-isaacs Aug 27, 2026
6867f49
docs(morsel): explain the four-thread win, and add a handoff
joseph-isaacs Aug 27, 2026
287d005
feat(morsel): add affinity scheduler and background IO
joseph-isaacs Aug 28, 2026
ec00f09
feat(morsel): integrate push-read SQL scan benchmarks
joseph-isaacs Aug 29, 2026
ab32824
feat(morsel-push): import shared push primitives
joseph-isaacs Aug 29, 2026
960a997
feat(morsel-push): import optimized push reader tree
joseph-isaacs Aug 29, 2026
069a77f
feat(morsel): select independent v1 pull or push readers
joseph-isaacs Aug 29, 2026
624142e
docs(morsel-push): document scoped upstream refresh
joseph-isaacs Aug 29, 2026
f67e595
refactor(morsel): isolate SQL backend selection
joseph-isaacs Aug 29, 2026
314836c
fix(morsel): preserve selection through stats pruning
joseph-isaacs Aug 29, 2026
ee252f7
chore(morsel-push): verify scoped upstream refreshes
joseph-isaacs Aug 29, 2026
f2b439a
perf(morsel): avoid dense pruning mask intersections
joseph-isaacs Aug 29, 2026
aedee32
Drive DuckDB morsels on scan threads
joseph-isaacs Aug 29, 2026
d7cf588
feat(morsel): optimize SSD random access execution
joseph-isaacs Aug 29, 2026
ce2c3aa
Merge remote-tracking branch 'origin/ji/morsel-push-pull-ci' into ji/…
joseph-isaacs Aug 29, 2026
38b460c
Merge remote-tracking branch 'origin/develop' into ji/morsel-perfect-…
joseph-isaacs Aug 29, 2026
ce227ce
feat(morsel): record and replay exact in-memory I/O demand
joseph-isaacs Aug 29, 2026
f3980d9
bench(morsel): run real ClickBench scans on all engines
joseph-isaacs Aug 29, 2026
4974fd1
test(morsel): compare dictionary scans through ScanBuilder
joseph-isaacs Sep 1, 2026
bcc5469
refactor(morsel): scan through a dedicated MorselScanBuilder
joseph-isaacs Sep 2, 2026
75ed9d5
refactor(morsel): hand I/O out of plan execution
joseph-isaacs Sep 2, 2026
2b9df23
fix(morsel): address review findings and add a primer
joseph-isaacs Sep 2, 2026
606de89
fix(morsel): cancel scans by output lifetime and cap unfiltered limits
joseph-isaacs Sep 2, 2026
c16effe
fix(morsel): honour cancellation at startup and cap external outputs
joseph-isaacs Sep 2, 2026
ddd6bae
refactor(morsel): extract the layout planner, node blueprint, and ans…
joseph-isaacs Sep 3, 2026
9134b75
refactor(morsel): route every planning path through the planner registry
joseph-isaacs Sep 3, 2026
181e561
refactor(morsel): tighten the planner and blueprint contracts
joseph-isaacs Sep 3, 2026
07babbc
docs(morsel): explain the pull and push execution models side by side
joseph-isaacs Sep 3, 2026
da1ffec
refactor(morsel): make the row demand a hint and apply the selection …
joseph-isaacs Sep 7, 2026
c5b547e
refactor(morsel): keep every batch dense and let leaves answer unwant…
joseph-isaacs Sep 7, 2026
2410ba2
docs(morsel): record the dense-batch measurements and cache the place…
joseph-isaacs Sep 7, 2026
0243e99
refactor(morsel): drop the planning budget and let planning block fro…
joseph-isaacs Sep 8, 2026
9eaa0c3
test(morsel): trace one morsel end to end
joseph-isaacs Sep 8, 2026
11e7520
feat(morsel): record what every top-level plan and execute poll returned
joseph-isaacs Sep 8, 2026
bd1f3cb
wip(morsel): checkpoint pull operators and scan integration
joseph-isaacs Sep 10, 2026
381487e
fix(layout): specify the identity map type in the plan test
joseph-isaacs Sep 10, 2026
4934e3b
refactor(morsel): keep only physical push pipelines
joseph-isaacs Sep 10, 2026
2c3f7f8
feat(morsel): batch and prioritize scan IO
joseph-isaacs Sep 10, 2026
442e385
feat(morsel): prune scans and support row indices
joseph-isaacs Sep 11, 2026
f4ca226
wip(morsel): checkpoint I/O follow-ups
joseph-isaacs Sep 11, 2026
714d20e
feat(morsel): add grouped I/O frontier API
joseph-isaacs Sep 12, 2026
7e64ed6
feat(morsel): schedule bounded frontier I/O
joseph-isaacs Sep 12, 2026
fa9dd59
test(morsel): cover grouped frontier scheduling
joseph-isaacs Sep 12, 2026
cb2dddb
bench(morsel): compare push frontier I/O
joseph-isaacs Sep 12, 2026
08d146a
docs(morsel): record frontier I/O experiment
joseph-isaacs Sep 12, 2026
2022bd5
bench(morsel): default comparisons to frontier path
joseph-isaacs Sep 12, 2026
c69bd62
feat: add fair push-frontier scan routing
joseph-isaacs Sep 12, 2026
0b1eef5
feat: add exact push-frontier benchmark verification
joseph-isaacs Sep 12, 2026
9fc6989
docs: record push-frontier benchmark protocol
joseph-isaacs Sep 12, 2026
ade2bee
fix(datafusion): leave unsupported projections above scans
joseph-isaacs Sep 12, 2026
6d08d4f
docs: record FineWeb and TPC-DS correctness
joseph-isaacs Sep 12, 2026
eab26ff
bench: separate correctness matrix policy
joseph-isaacs Sep 12, 2026
10e6135
bench: gate matrix measurements on correctness
joseph-isaacs Sep 12, 2026
ae8c638
bench: record TPC-H frontier matrix
joseph-isaacs Sep 12, 2026
568fcb5
bench: record ClickBench frontier matrix
joseph-isaacs Sep 12, 2026
4bae722
bench: record FineWeb frontier matrix
joseph-isaacs Sep 12, 2026
f102ab2
bench: record TPC-DS frontier matrix
joseph-isaacs Sep 12, 2026
121a045
perf: increase push frontier lookahead
joseph-isaacs Sep 12, 2026
761ff9f
revert: reject push frontier lookahead trial
joseph-isaacs Sep 12, 2026
d25daa1
perf: increase frontier morsel target
joseph-isaacs Sep 12, 2026
fbb232a
perf: reject larger frontier morsels
joseph-isaacs Sep 12, 2026
f2822e7
feat: publish push scan metrics
joseph-isaacs Sep 12, 2026
7b0b268
docs: record Q6 I/O metrics isolation
joseph-isaacs Sep 12, 2026
d36cd71
perf: cohort frontier predicate reads
joseph-isaacs Sep 12, 2026
58e2012
revert: reject predicate frontier cohorts
joseph-isaacs Sep 12, 2026
104297a
feat: add scan attribution diagnostics
joseph-isaacs Sep 12, 2026
8295653
checkpoint(io): park bounded frontier I/O work
joseph-isaacs Sep 13, 2026
ad0749e
checkpoint(io): document DuckDB frontier W8 performance
joseph-isaacs Sep 14, 2026
e199904
perf(duckdb): retain frontier prefetch and add paired SQL CI
joseph-isaacs Sep 15, 2026
09edaaa
DCO Remediation Commit for Joe Isaacs <joe.isaacs@live.co.uk>
joseph-isaacs Sep 15, 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
108 changes: 108 additions & 0 deletions .github/workflows/duckdb-frontier-bench.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Same-binary DuckDB comparisons on real SF10 and full partitioned ClickBench files.
name: DuckDB Frontier Comparison

on:
workflow_call: { }

permissions:
contents: read

jobs:
build:
if: github.repository == 'vortex-data/vortex' && github.event_name == 'workflow_dispatch'
timeout-minutes: 60
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/runner=bench-dedicated/family=c6id.8xlarge/tag=frontier-build/extras=s3-cache', github.run_id)
|| 'ubuntu-latest' }}
steps:
- uses: runs-on/action@v2
if: github.repository == 'vortex-data/vortex'
with:
sccache: s3
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: ./.github/actions/setup-rust
with:
enable-sccache: ${{ github.repository == 'vortex-data/vortex' && 'true' || 'false' }}
- name: Build comparison drivers and data generator
env:
RUSTFLAGS: "-C target-cpu=native -C force-frame-pointers=yes"
run: >-
cargo build --bin data-gen --bin tpch-attribution --bin clickbench-attribution
--profile release_debug --features unstable_encodings
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: frontier-binaries
path: |
target/release_debug/data-gen
target/release_debug/tpch-attribution
target/release_debug/clickbench-attribution
target/release_debug/build/vortex-duckdb-cache/duckdb-lib-*-prebuilt/libduckdb.so

bench:
needs: build
timeout-minutes: 120
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/runner=bench-dedicated/family=c6id.metal/tag=frontier-bench/extras=s3-cache', github.run_id)
|| 'ubuntu-latest' }}
steps:
- uses: runs-on/action@v2
if: github.repository == 'vortex-data/vortex'
with:
sccache: s3
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- name: Install uv
uses: spiraldb/actions/.github/actions/setup-uv@a746510eafaa926484c354541cfc49b2ec06cc63 # 0.18.6
with:
sync: false
- uses: ./.github/actions/setup-duckdb
- uses: ./.github/actions/system-info
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: frontier-binaries
path: target/release_debug/
- name: Make binaries executable
run: chmod +x target/release_debug/{data-gen,tpch-attribution,clickbench-attribution}
- name: Generate real datasets
id: generate
run: |
uv run --project bench-orchestrator vx-bench prepare-data tpch --formats-json '["parquet", "vortex"]' --opt scale-factor=10.0
uv run --project bench-orchestrator vx-bench prepare-data clickbench --formats-json '["parquet", "vortex"]'
- name: Isolate benchmark CPUs and stabilize clocks
id: isolate
run: sudo bash scripts/setup-benchmark.sh
- name: Compare all TPC-H SF10 queries
run: >-
bash scripts/bench-taskset.sh python3 scripts/duckdb-frontier-ci.py
--suite tpch --data vortex-bench/data/tpch/10.0
--binary target/release_debug/tpch-attribution
--output frontier-results/tpch --threads 14 --rounds 6
- name: Compare all ClickBench queries
if: ${{ !cancelled() && steps.isolate.outcome == 'success' }}
run: >-
bash scripts/bench-taskset.sh python3 scripts/duckdb-frontier-ci.py
--suite clickbench --data vortex-bench/data/clickbench_partitioned
--binary target/release_debug/clickbench-attribution
--output frontier-results/clickbench --threads 14 --rounds 6
- name: Publish comparison tables
if: always()
shell: bash
run: |
for summary in frontier-results/*/SUMMARY.md; do
if [ -f "$summary" ]; then
cat "$summary" >> "$GITHUB_STEP_SUMMARY"
fi
done
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
name: duckdb-frontier-results
path: frontier-results/
if-no-files-found: error
7 changes: 7 additions & 0 deletions .github/workflows/pr-bench-sql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ on:
- "pr-compact"
- "pr-all"
- "pr-full"
- "pr-frontier"

permissions:
contents: read
Expand All @@ -37,8 +38,14 @@ permissions:

jobs:
sql:
if: inputs.matrix_preset != 'pr-frontier'
uses: ./.github/workflows/sql-bench-matrix.yml
secrets: inherit
with:
mode: "pr"
matrix_preset: ${{ inputs.matrix_preset }}

frontier:
if: inputs.matrix_preset == 'pr-frontier'
uses: ./.github/workflows/duckdb-frontier-bench.yml
secrets: inherit
57 changes: 57 additions & 0 deletions Cargo.lock

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

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ members = [
"vortex-compressor",
"vortex-btrblocks",
"vortex-layout",
"vortex-morsel-push",
"vortex-morsel-scan",
"vortex-scan",
"vortex-file",
"vortex-ipc",
Expand Down Expand Up @@ -325,6 +327,8 @@ vortex-pco = { version = "0.1.0", path = "./encodings/pco", default-features = f
vortex-proto = { version = "0.1.0", path = "./vortex-proto", default-features = false }
vortex-row = { version = "0.1.0", path = "./vortex-row", default-features = false }
vortex-runend = { version = "0.1.0", path = "./encodings/runend", default-features = false }
vortex-morsel-push = { version = "0.1.0", path = "./vortex-morsel-push", default-features = false }
vortex-morsel-scan = { version = "0.1.0", path = "./vortex-morsel-scan", default-features = false }
vortex-scan = { version = "0.1.0", path = "./vortex-scan", default-features = false }
vortex-sequence = { version = "0.1.0", path = "encodings/sequence", default-features = false }
vortex-session = { version = "0.1.0", path = "./vortex-session", default-features = false }
Expand Down
1 change: 1 addition & 0 deletions benchmarks/compress-bench/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ vortex = { workspace = true }
vortex-arrow = { workspace = true }
vortex-bench = { workspace = true }
vortex-cuda = { workspace = true, optional = true }
vortex-morsel-push = { workspace = true }

[features]
cuda = ["dep:tempfile", "dep:vortex-cuda"]
Expand Down
Loading
Loading