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: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.994x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (0.992x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.011x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.008x ➖, 1↑ 1↓)
duckdb / vortex-compact / ns (1.006x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
duckdb / duckdb / ns (1.006x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.000x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.004x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.002x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.002x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.991x ➖, 1↑ 0↓)
duckdb / duckdb / ns (1.005x ➖, 0↑ 0↓)
No file size changes detected. |
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>
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.