benchmarks: add string compression benchmark - #9060
Conversation
|
Looks reasonable |
e20260e to
5378034
Compare
0e98156 to
391ac87
Compare
d751c68 to
aa32bc0
Compare
aa32bc0 to
a394e13
Compare
Benchmarks: String Encoding 📖No baseline is available for this benchmark yet; PR measurements are shown without comparison. vortex / vortex-file-compressed / ms (no group data, 0↑ 0↓)
vortex / vortex-file-compressed / % (no group data, 0↑ 0↓)
|
Merging this PR will improve performance by 27.76%
Performance Changes
Tip Curious why this is faster? Comment Comparing Footnotes
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.858x ➖, 1↑ 0↓)
datafusion / vortex-compact / ns (0.962x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.905x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.072x ➖, 1↑ 2↓)
duckdb / vortex-compact / ns (1.435x ❌, 0↑ 3↓)
duckdb / parquet / ns (1.003x ➖, 0↑ 0↓)
|
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.998x ➖, 0↑ 2↓)
datafusion / vortex-compact / ns (1.000x ➖, 0↑ 1↓)
datafusion / parquet / ns (0.994x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed / ns (1.001x ➖, 4↑ 3↓)
duckdb / vortex-compact / ns (0.994x ➖, 3↑ 2↓)
duckdb / parquet / ns (1.010x ➖, 3↑ 7↓)
duckdb / duckdb / ns (0.987x ➖, 3↑ 2↓)
No file size changes detected. |
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.003x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.994x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.980x ➖, 5↑ 1↓)
duckdb / parquet / ns (0.992x ➖, 1↑ 0↓)
duckdb / duckdb / ns (1.019x ➖, 0↑ 1↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (0.919x ➖, 4↑ 2↓)
duckdb / vortex-compact / ns (0.958x ➖, 3↑ 2↓)
duckdb / parquet / ns (0.995x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.003x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.008x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
duckdb / duckdb / ns (0.999x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.006x ➖, 1↑ 1↓)
datafusion / parquet / ns (1.015x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.980x ➖, 2↑ 0↓)
duckdb / parquet / ns (0.996x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.001x ➖, 0↑ 0↓)
File Size Changes (201 files changed, +0.0% overall, 106↑ 95↓)
Totals:
|
Benchmarks: Random Access 📖Vortex (geomean): 0.980x ➖ vortex / vortex-file-compressed / ns (0.980x ➖, 1↑ 0↓)
vortex / parquet / ns (0.999x ➖, 0↑ 0↓)
vortex / lance / ns (1.007x ➖, 0↑ 0↓)
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.001x ➖, 1↑ 1↓)
datafusion / vortex-compact / ns (0.944x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.931x ➖, 3↑ 1↓)
duckdb / vortex-file-compressed / ns (1.048x ➖, 0↑ 1↓)
duckdb / vortex-compact / ns (0.981x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.017x ➖, 0↑ 0↓)
|
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
Benchmarks: Vortex queries 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.007x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.999x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.944x ➖, 1↑ 0↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Compression 📖vortex / vortex-file-compressed / ns (1.004x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / bytes (1.000x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / ratio (1.004x ➖, 0↑ 0↓)
vortex / parquet / ns (0.998x ➖, 0↑ 0↓)
vortex / parquet / bytes (1.000x ➖, 0↑ 0↓)
|
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
string-bench now reports size, write and read per (column, encoder) in place of the staged open/scan/canonicalize breakdown. The read fuses the canonical decode into each row split's scan task and drops each chunk before the next split runs, so it measures the production shape with one chunk of steady-state memory. The default suite is the Vortex file path, so CI no longer runs the codec microbenchmark; it stays available locally as --suite codec. Metric names lose their file/ prefix and the four read phases collapse into one, so these metrics restart their benchmark history. Document the baseline every metric normalizes against: one 16-byte view per row plus the bytes of the strings too long to inline. Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
76097b8 to
9bfd0e9
Compare
develop added benchmarks/string-bench (#9060), which uses vortex_onpair::DEFAULT_DICT12_CONFIG. This branch removes that constant in favour of re-exporting upstream onpair's DEFAULT_CONFIG, which holds the same values (dict-12, threshold 0.15, seed 42), so string-bench is updated to the new name. No textual conflicts. Signed-off-by: Francesco Gargiulo <gargiulo.fr@gmail.com>
Adds focused PR benchmark triggers: - `action/bench-random-access` - `action/bench-compress` - `action/bench-string` (#9060) - `action/bench-sql` (excludes Vortex Compact) - `action/bench-sql-compact` (Vortex Compact plus Parquet controls) - `action/bench-all` (random access, compression, string encoding, and SQL, while GPU remains separate) Each trigger dispatches a role-specific reusable workflow. PR benchmarks check out `github.event.pull_request.head.sha`. SQL coverage stays in the Python catalog and is resolved into a matrix at runtime. The all-CPU path uses a single `pr-all` preset (the exact union of `pr` and `pr-compact`), so shared SQL jobs run once instead of twice. Benchmark reporting now: - Keeps the latest rerun for each logical timing or file-size result. - Includes Parquet controls in `pr-compact` to distinguish code changes from runner drift. - Namespaces remote datasets by preset to prevent concurrent jobs from clobbering each other. TODO: After merge, delete the legacy `action/benchmark*` labels once `develop` uses the new dispatcher. --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Rationale for this change
This adds benchmarks for evaluating Vortex string encoders on representative datasets.
It also fixes mixed-unit benchmark reporting. Previously, Compression results were grouped as
unknown / unknown, byte values were labelledns, and fractional ratios were truncated; for example, this previous Compression report.What changes are included in this PR?
codec: Direct whole-column codec compression.vortex: End-to-end in-memory Vortex write, open, scan, and canonicalization.developto establish its baseline.What APIs are changed? Are there any user-facing changes?
No production Vortex APIs are changed. This PR adds the
string-benchCLI and improves benchmark PR reports.