adriangb commented on PR #10745: URL: https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339165212
### Runner results (`c4a-highmem-16`), three ways, with controls Filtered = `BENCH_FILTER: ^(small|medium|large)_string_(shared_prefix|partial_prefix|distinct)` (the delta-byte-array benches, ~8-minute jobs, tight numbers). Means of three runs with per-run deltas; the control column is what identical code reports on the same job type. #### Stacked on #10554 (`6584407`), vs #10554 — isolates this change Runs [1](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339115935) [2](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339120747) [3](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339125526), control [10554-vs-10554](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337355027), full `arrow_writer` ×2 [1](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5338017189) [2](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5338019469). | benchmark | per run | mean | control | |---|---|---|---| | `large_string_shared_prefix_nullable/delta_byte_array` | −23.3 / −26.9 / −22.9 | **−24.4%** | +0.8 | | `large_string_shared_prefix_nullable_trailing/delta_byte_array` | −23.6 / −24.7 / −21.2 | **−23.2%** | −0.2 | | `large_string_shared_prefix_nullable_dense/delta_byte_array` | −22.4 / −22.4 / −21.1 | **−22.0%** | +0.7 | | `large_string_shared_prefix/delta_byte_array` (non-null) | −23.0 / −21.3 / −21.4 | **−21.9%** | −0.7 | | `medium_string_shared_prefix_nullable/delta_byte_array` | −6.4 / −4.5 / −10.8 | −7.2% | +4.9 | | `large_string_distinct_nullable/delta_byte_array` | −7.2 / −4.4 / −4.6 | **−5.4%** | −0.8 | | `large_string_distinct/delta_byte_array` | −5.0 / −2.6 / −4.3 | −4.0% | −0.2 | | `large_string_*/plain`, `small_string_*/delta_byte_array` | −3.5 … +0.8 | | | The two full runs agree (`shared_prefix` −25.2%, `_trailing` −26.4%, `_dense` −20.8%, `_nullable` −17.4%, `medium` −17.8%, `distinct_nullable` −6.8%, `distinct` −7.3%) and show nothing else moving in both runs the same way outside what the main-vs-main control moves. Why the split between −22% and −5%: values with a shared prefix are written in increasing order, so the mini-batch max beats the running max every time and only the min copy is saved (one of two, on every value); `distinct*` values are also increasing, but there a page holds two values, so the copy is only saved on the second — half as often. #### Stacked on #10554, vs #10505 (`2d2d4ad`) — what #10554 looks like once this is under it Runs [1](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337355337) [2](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339125945) [3](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5339126320). | benchmark | #10554 alone vs #10505 | #10554 + this vs #10505 (per run) | mean | |---|---|---|---| | `large_string_distinct_nullable/delta_byte_array` | +14.7% | +1.8 / +5.1 / +9.4 | **+5.4%** | | `large_string_shared_prefix_nullable/delta_byte_array` | +18.3% | −12.5 / −13.0 / −15.2 | **−13.6%** | | `large_string_shared_prefix_nullable_dense/delta_byte_array` | +2.0% | −29.1 / −21.7 / −21.7 | **−24.2%** | | `large_string_shared_prefix_nullable_trailing/delta_byte_array` | −24.9% | −44.4 / −40.2 / −40.9 | **−41.9%** | | `medium_string_shared_prefix_nullable/delta_byte_array` | +3.0% | −6.8 / −11.1 / −6.2 | −8.0% | | `large_string_shared_prefix/delta_byte_array` (non-null) | +0.9% | −32.5 / −19.0 / −21.7 | −24.4% | | `large_string_distinct/delta_byte_array` (non-null) | −3.0% | −7.0 / −12.5 / −4.0 | −7.8% | #### Alone, vs `main` (`177bde8`) Filtered [1](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5336684411) [2](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5336687519) [3](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5336689766) + [control](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5336747380); full `arrow_writer` [1](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337331144) [2](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337333595) [3](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337394280) + [control](https://github.com/apache/arrow-rs/pull/10745#issuecomment-5337404259). - The over-limit DBA benches are flat (runs 1–2 within ±1%; run 3 is a noise wave the control also shows). Expected: on `main` every over-limit value already opens its own page (the bug #10505 fixes), `flush_data_page` takes the running min/max on every mini-batch, and both copies happen regardless. - `large_string_non_null/*` (1024 × 256 KiB, default properties): **−7.4 … −8.9%** in all three full runs (`default` −5.7 / −8.4 / −12.5, `parquet_2` −5.9 / −8.0 / −12.5, `zstd` −5.7 / −7.8 / −12.5, `bloom_filter` −5.0 / −7.2 / −10.0) with the control at −0.1 … −1.1. So it does pay on `main` wherever a page holds more than one mini-batch of large values. - Nothing else in the full suite moves consistently; `string/parquet_2` (+53 / +9 / +8) is the bench the main-vs-main control moved +56% on identical code yesterday. **Bottom line:** −22% on large-value shared-prefix `DELTA_BYTE_ARRAY` columns and −5% on distinct ones once #10505 is in, −7…−9% on `large_string_non_null` on `main` today, nothing negative anywhere. It turns #10554's one regression (+15% vs #10505) into +5%, and its other shapes into further wins. Independent of both PRs; rebasing onto `main` and marking ready. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
