Split Parquet tail work into morsels#22924
Conversation
|
run benchmarks |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (740db64) to 883c38e (merge-base) diff using: tpch File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (740db64) to 883c38e (merge-base) diff using: clickbench_partitioned File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (740db64) to 883c38e (merge-base) diff using: tpcds File an issue against this benchmark runner |
|
Thank you for opening this pull request! Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch). Details |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usagetpch — base (merge-base)
tpch — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usagetpcds — base (merge-base)
tpcds — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usageclickbench_partitioned — base (merge-base)
clickbench_partitioned — branch
File an issue against this benchmark runner |
A stream that found the shared work queue empty terminated immediately, so by the time a donor finished planning a large file and donated its surplus morsels, no sibling was left to steal them (and the split hint often reported a single active worker, suppressing the split entirely). Popping a file now registers a FileLease on the shared work source; while any lease is alive, an idle sibling yields Poll::Pending and re-polls instead of finishing, then steals donated morsels once the donor publishes them. The lease is released when the donation window closes (the first morsel starts streaming) or the file is abandoned. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
run benchmarks |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (7bb5a20) to 883c38e (merge-base) diff using: clickbench_partitioned File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (7bb5a20) to 883c38e (merge-base) diff using: tpcds File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing codex/parquet-morsel-splitting (7bb5a20) to 883c38e (merge-base) diff using: tpch File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usagetpch — base (merge-base)
tpch — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usagetpcds — base (merge-base)
tpcds — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usageclickbench_partitioned — base (merge-base)
clickbench_partitioned — branch
File an issue against this benchmark runner |
Which issue does this PR close?
N/A.
Rationale for this change
This change lets Parquet split remaining large row groups into smaller, page-aligned morsels when sibling streams would otherwise go idle.
What changes are included in this PR?
Are these changes tested?
Are there any user-facing changes?
Yes. A new Parquet read configuration option,
datafusion.execution.parquet.morsel_split_size, controls the target compressed byte size for tail-work morsel splitting. Setting it toNULLdisables splitting.