docs: add benchmarking page to the contributors guide#2075
Merged
Conversation
Document how Ballista is benchmarked at scale and record the current result set in one place. Covers the reference cluster shape and why it is shaped that way, the shared SQLBench-H query set, and self-contained commands for running TPC-H against Ballista, vanilla Spark, and Comet so a result can be reproduced without repo-specific tooling. Explains why Comet is the most informative comparison available -- it executes DataFusion physical plans using the same operators -- along with the caveats that keep it from being an operator-level A/B: Spark's optimizer and AQE produce the plan Comet accelerates, Comet falls back to the JVM for unsupported operators, and the two use different distribution models. Results are tracked as a single current set pinned to the exact commit they came from, with AQE on and AQE off reported side by side. Most entries are TBD pending measurement.
phillipleblanc
approved these changes
Jul 17, 2026
| | Per executor | 8 cores, 56 GiB, `--memory-pool-size=48GB` | | ||
| | Per task slot | 8 concurrent tasks → 6 GB pool each | | ||
| | Scheduler | 1 | | ||
| | Data | TPC-H SF1000 Parquet, node-local disk | |
Contributor
There was a problem hiding this comment.
May also be useful to specify how this data is generated (i.e. via the tpchgen-rs, partitioned, etc)
andygrove
marked this pull request as ready for review
July 17, 2026 08:00
Member
Author
|
This is the first clean run of the whole benchmark suite at this scale factor, so will merge this as a baseline and move onto debugging why performance is ~50% slower than Spark. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Which issue does this PR close?
Closes #2074.
Rationale for this change
Benchmark numbers currently circulate through issues and PR descriptions with their conditions attached informally, which makes it hard to tell whether any two numbers are comparable. Results from the static planner and the adaptive (AQE) planner are especially easy to conflate, even though they come from different planners with materially different join behaviour.
benchmarks/README.mdexplains how to generate TPC-H data and run the benchmark locally, but not what cluster the published numbers came from, how to reproduce one, how Spark and Comet were configured for a cross-engine comparison, or which known issues to keep in mind when a query looks slow.This adds one place that answers those questions and records the current result set.
What changes are included in this PR?
A new
docs/source/contributors-guide/benchmarking.md, wired into the Contributors Guide nav indocs/source/index.rst:apache/datafusion-benchmarks, which is what makes the comparison apples-to-apples.The result table is now complete. TPC-H SF1000, 2 executors x (8 cores / 56 GiB), node-local data, 1 iteration, full-suite runs. Ballista at
main@26b29391:All 22 queries completed on all four configurations — no FAIL or OOM entries to record. Row counts agreed across every engine except Q15.
Measurement details recorded on the page rather than smoothed over:
26b29391removed the static planner's sort-merge-join broadcast conversion, which changes the AQE-off path specifically, so results either side of that commit are not comparable. The page says why the exact commit is recorded.Ready for review.
Are there any user-facing changes?
No code changes. Adds a documentation page to the Contributors Guide.