benchmarks: add string compression benchmark - #9060
Conversation
| #[cfg(feature = "unstable_encodings")] | ||
| use string_bench::SerializedResult; | ||
| use string_bench::StringColumn; | ||
| use string_bench::StringEncoder; | ||
| use string_bench::bench_column; | ||
| #[cfg(feature = "unstable_encodings")] | ||
| use string_bench::bench_serialized_with_session; | ||
| use string_bench::load_clickbench_url; | ||
| use string_bench::load_tpch_l_comment; | ||
| use tabled::builder::Builder; | ||
| use tabled::settings::Style; | ||
| #[cfg(feature = "unstable_encodings")] | ||
| use vortex::VortexSessionDefault; | ||
| use vortex::array::VortexSessionExecute; | ||
| #[cfg(feature = "unstable_encodings")] | ||
| use vortex::io::runtime::BlockingRuntime; | ||
| #[cfg(feature = "unstable_encodings")] | ||
| use vortex::io::runtime::current::CurrentThreadRuntime; | ||
| #[cfg(feature = "unstable_encodings")] | ||
| use vortex::io::session::RuntimeSessionExt; | ||
| #[cfg(feature = "unstable_encodings")] |
There was a problem hiding this comment.
where did all the unstable encodings cfg come from?
| let run_codec = matches!(args.suite, BenchmarkSuite::Codec | BenchmarkSuite::Both); | ||
| let run_vortex = matches!(args.suite, BenchmarkSuite::Vortex | BenchmarkSuite::Both); | ||
|
|
||
| #[cfg(not(feature = "unstable_encodings"))] |
There was a problem hiding this comment.
use unstable encodings only
|
Looks reasonable |
| let mut columns: Vec<StringColumn> = Vec::new(); | ||
| if matches("URL") { | ||
| columns.push(load_clickbench_url(args.clickbench_shard, &mut ctx).await?); | ||
| } | ||
| if matches("l_comment") { | ||
| columns.push(load_tpch_l_comment(&mut ctx).await?); | ||
| } | ||
| if columns.is_empty() { |
There was a problem hiding this comment.
this this easy to extend with a type vec of columns you filter on maybe a trait would help, look at bench compress
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 not alter performance
Comparing Footnotes
|
Polar Signals Profiling ResultsLatest Run
Previous Runs (16)
Powered by Polar Signals Cloud |
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.993x ➖, 0↑ 1↓)
datafusion / vortex-compact / ns (1.006x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.012x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.098x ➖, 0↑ 4↓)
duckdb / vortex-compact / ns (0.974x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.987x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 1.008x ➖ datafusion / vortex-file-compressed / ns (1.008x ➖, 0↑ 0↓)
No file size changes detected. |
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
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.