Skip to content

Reader benchmark parity

Issue #470 compares the extracted reader with the frozen Delta Funnel source from issue #459. The baseline source is commit e2650427ff5e2e1a7a4e5ef9eaf30969b217fec3; its benchmark source blob is 52284e22a5deb0cddce4aa7257012468dc88f25e.

Only the 12 controlled reader cases move with this crate. Delta Funnel keeps its synthetic policy, host probe, write workflow, tracing, Python, and SQL Server benchmark modes.

Method

Both release-profile binaries used their locked dependency graphs on the same Linux x86_64 host, with the baseline and extracted runs alternated per case. Each case ran two warm-up repetitions in a separate invocation followed by five measured repetitions. Inputs retained the frozen seed, fixture, query, backend, storage model, scheduling profile, Parquet controls, and schema-22 CSV fields.

The current equivalent invocation is:

cargo bench --locked -p delta-arrow-reader --bench reader --all-features -- \
  --mode provider-exec --seed 0 \
  --provider-exec-storage-profile local \
  --provider-exec-workload provider_few_larger_files \
  --provider-exec-query full_rows \
  --provider-exec-backend direct_parquet \
  --provider-exec-scheduling-profile prefetch_2_ap_target_scan_3x \
  --provider-exec-parquet-metadata-size-hint-bytes 65536 \
  --provider-exec-parquet-full-file-read-threshold-bytes disabled \
  --provider-exec-repetitions 5 \
  --output target/delta-arrow-reader-benchmark.csv

The captured rows predate the backend naming cleanup and retain their original schema-22 native_async and official_kernel values. The current harness uses direct_parquet and delta_kernel and writes schema 30. The workloads and measurements are unchanged.

Change only the workload, query, backend, storage profile, and Parquet controls to reproduce the other frozen cases listed below. The harness rejects cases outside that matrix, validates each fixture fingerprint, and validates output schema and row count before accepting a sample.

Controlled result

Captured on 2026-08-10. Times are microseconds. The range is the minimum and maximum of the five measured repetitions. Source rows per second is the raw schema-22 value.

Case Baseline p50 Baseline range Extracted p50 Extracted range Ratio Baseline rows/s Extracted rows/s
local-native-dv 1300 1214-2887 922 813-2092 0.71x 25206153 35540130
local-native-full 926 777-2247 797 719-1962 0.86x 35386609 41114178
local-native-full-read-eligible 994 904-1949 943 773-2232 0.95x 32965794 34748674
local-native-full-read-ineligible 1188 823-2847 903 813-2170 0.76x 27582491 36287929
local-native-many-small 1803 1673-4207 1916 1880-4681 1.06x 4543538 4275574
local-native-metadata-disabled 981 832-2112 910 890-2128 0.93x 33402650 36008791
local-native-metadata-undersized 962 866-2805 1050 820-2720 1.09x 34062370 31207619
local-native-projection 721 641-1723 664 615-2001 0.92x 45447988 49349397
local-native-pruned-unequal 1649 1455-4087 1628 1489-4203 0.99x 44089751 44658476
local-official-dv 1157 1069-2809 1035 908-2400 0.89x 28321521 31659903
local-official-full 1433 1323-3369 1402 1257-3195 0.98x 22866713 23372325
throttled-native-full 97507 92857-100125 94272 89223-101477 0.97x 336057 347589

All deterministic CSV fields matched exactly, including fixture size and fingerprint, planned and completed work, produced rows and batches, deletion vector counters, Parquet request and byte counters, and configured bounds. The measured ratios range from 0.71x to 1.09x, with no material extraction regression outside the observed sample spread.

The redacted raw schema-22 rows are committed in benchmark-parity-results.csv. Its implementation and comparison_case prefix columns identify each baseline and extracted pair; the remaining 80 columns are the unmodified benchmark output. Each row records the five-repetition summary, including p50, p95, p99, minimum, and maximum timing observations.

Frozen test audit

The focused benchmark_harness integration target includes the applicable frozen assertions for the 12-case matrix, accepted and rejected options, fixture shapes and fingerprints, retained-fixture ownership, unequal-file pruning, delayed HTTP reads, percentile and optional-value edges, Linux memory parsing, CSV width, deletion-vector fields, and the Delta Kernel backend's unavailable Parquet I/O metrics.

The remaining tests from the 71-test frozen benchmark binary stay in Delta Funnel because they exercise code that did not move: synthetic partition policy, host probes and local-I/O probes, tracing and detailed profiling, large product-mimic schemas, phase-aligned write workflows, and the multi-mode runner's unrelated CLI and CSV fields.

The per-invocation working files remain ignored under target/issue-470-comparison/; the committed result file above is the durable comparison evidence.