Skip to content

perf(parquet): pre-size values in OffsetBuffer::extend_from_dictionary - #10690

Closed
AarryaSaraf wants to merge 3 commits into
apache:mainfrom
AarryaSaraf:dict-extend-reserve-values
Closed

perf(parquet): pre-size values in OffsetBuffer::extend_from_dictionary#10690
AarryaSaraf wants to merge 3 commits into
apache:mainfrom
AarryaSaraf:dict-extend-reserve-values

Conversation

@AarryaSaraf

@AarryaSaraf AarryaSaraf commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Part of #10694, but does not close it. That issue reports a ~2x gap against
parquet-cpp on large distinct dictionary-encoded values; this addresses one
contributing cause and moves about a fifth of it. The residual stays open there.

Rationale for this change

OffsetBuffer::extend_from_dictionary reserves offsets but not values, so
every gathered dictionary value is appended to an unreserved Vec<u8> and
amortized doubling re-copies roughly all gathered data one extra time. For a
column of large dictionary-encoded values that cost is measurable; for the small
values the crate's benchmarks cover, it is not.

#5250 raised the same allocation profile and proposed an exact-sum reserve —
a second pass over the keys summing each referenced value's length. It was
withdrawn after regressing the small-string dictionary benchmarks by ~10-15%. We
reproduced that on 59.1.0: +8-18% across the three
arrow_array_reader/StringArray/dictionary encoded cases. At ~19 byte values the
second bounds-checked pass over the keys costs more than the copy it saves.

This PR uses an O(1) estimate instead: keys.len() × (dict_values.len() / dict_entry_count). No per-key pass, exact when value lengths are uniform, and an
ordinary reservation hint when they are not.

Note that OffsetBuffer::with_capacity deliberately does not pre-size values
("its size is unpredictable"). That remains true in general; this change is
scoped to the dictionary path, where the dictionary page gives a cheap size
signal.

What changes are included in this PR?

A reservation hint at the top of extend_from_dictionary. No behavior change: it
is skipped for an empty dictionary, and it only pre-sizes the same Vec the loop
was already growing.

The reservation uses try_reserve rather than reserve. A skewed dictionary — a
few very large entries with most keys selecting small ones — can inflate an
average-based estimate far above the true output size, and the dictionary comes
from an untrusted file, so a failed reserve would abort the process. With
try_reserve that case degrades to the current growth behavior instead.

Are these changes tested?

No new test, per review. The reservation is a capacity hint that cannot alter
output, and the arithmetic is total by construction

Performance, Linux, parquet 59.1.0 read from
Python over the C data interface, against pyarrow 24.0.0. The file is 256 MiB,
1024 rows, a binary() column of 256 KiB distinct values written with PyArrow
defaults, so dictionary encoded end to end. Wall time at the read operation,
3 repeats per arm:

metric before after
read wall, median 1.2167 s 1.0700 s
read wall, min 1.0922 s 1.0261 s
ratio vs parquet-cpp (pq.read_table) 1.98 1.74

3 of 3 runs rank-matched not-worse; the honest band on the improvement is
−6% to −12%. Two caveats: n = 3 with overlapping spreads, and the parquet-cpp
baseline comes from a different run than the patched arm, because the in-run
baselines drifted structurally against each other. So this is a direction plus a
rough size, not a precise figure.

This recovers part of the gap against parquet-cpp on this shape and not all of
it — we had predicted the reserve would close it, and it moved about a fifth of
the way. The rest is tracked in #10694.

The three existing small-string dictionary cases measure at parity — the property
the exact-sum variant in #5250 failed. Patched vs baseline means: 267.2 vs
257.7 µs, 261.9 vs 260.6 µs, 248.4 vs 252.4 µs, i.e. scattered around zero, with
a null control on the same machine at −0.6% (p = 0.40).

The large-value benchmark added in #10691 does not separate the two on my
Apple hardware. Interleaving stock and patched runs against a common baseline,
7 stock and 5 patched:

median min mean
stock 6.512 ms 6.364 ms 6.673 ms
patched 6.431 ms 6.281 ms 6.520 ms

The distributions overlap almost entirely, and a null control on the same box —
stock re-run against its own saved baseline, byte-identical code — reports
−9.3% (p = 0.00). A single-digit effect is not resolvable there, which is why the
table above comes from Linux and our own harness rather than from this benchmark.

That is the main thing I would value from review: a run of #10691's case on your
reference hardware. It is the measurement I cannot produce.

For the same reason we are not quoting macOS magnitudes for the large-value case
at all. An earlier null control there reported "+43.6% regressed, p = 0.00" on
byte-identical code, and one case read 24.6 / 37.1 / 30.9 / 35.4 ms across four
builds, two of which were provably identical. The small-string cases quoted above
are stable on that machine; the large-value ones are not.

Are there any user-facing changes?

No.

AI disclosure

The patch and this description were drafted with AI assistance and reviewed by me
line by line. The measurements are my own runs. I verified the reservation cannot
change decode output — it only affects Vec capacity — and worked through the
skewed-dictionary over-estimate case by hand, which is why try_reserve is used.

@github-actions github-actions Bot added the parquet Changes to the parquet crate label Aug 14, 2026
extend_from_dictionary reserves the offsets buffer but not values, so
every gathered dictionary value lands in an unreserved Vec and amortized
doubling re-copies roughly all gathered data one extra time. For large
dictionary values (e.g. binary image columns, which common writers
dictionary-encode because the dictionary-size limit is checked lazily)
that extra copy dominates the decode.

An exact-sum reserve was proposed and withdrawn in apache#5250: the second
bounds-checked pass over the keys regresses small-value dictionaries by
10-15% on the crate's own benchmarks (reproduced at 8-18% on 59.1.0).
This uses an O(1) estimate instead - keys.len() times the dictionary's
average value length - which is exact for uniform value lengths and an
ordinary reservation hint otherwise, with no per-key pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: im not sure the test_offset_buffer_extend_from_dictionary_size_hint is needed. the arithmetic makes sense and it already accounts for dividing by zero. this is essentially optionally pre-allocating space in a vector, nothing logically has changed.

The reservation is a capacity hint and cannot change decode output, so a test
asserting the output is unchanged carries no signal. Removed it.

The guard it partly covered is folded into the arithmetic instead: `checked_div`
returns None for both an empty dictionary and one with zero entries, replacing
the separate `checked_sub(1).filter(|n| *n > 0)`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@AarryaSaraf

Copy link
Copy Markdown
Contributor Author

nit: im not sure the test_offset_buffer_extend_from_dictionary_size_hint is needed. the arithmetic makes sense and it already accounts for dividing by zero. this is essentially optionally pre-allocating space in a vector, nothing logically has changed.

Agreed, removed.

etseidl pushed a commit that referenced this pull request Aug 19, 2026
# Which issue does this PR close?

None. This is benchmark coverage split out of #10690, so that the change
proposed there can be measured against a benchmark that already exists
on `main`.
It covers the shape reported in #10694.

# Rationale for this change

Every dictionary-encoded case in `arrow_reader` decodes ~20 byte values:
`build_dictionary_encoded_string_page_iterator` builds `"Dictionary
value {x}"`
at 1% unique. Two properties of that shape keep the dictionary gather
out of the
measurement entirely — values are small enough that per-key overhead
dominates
(RLE index decoding, the per-key bounds check), and the dictionary is a
couple of
KiB, so it stays cached for the whole decode.

Columns of large binary payloads invert both. A writer's dictionary size
limit is
checked lazily, so such a column is often dictionary encoded all the way
to the
end, with the dictionary page holding the entire column and each entry
referenced
exactly once. The gather then gets its data from a source far too large
to cache,
and it is the gather rather than the per-key work that dominates.

No benchmark in the crate covers that, so changes to
`OffsetBuffer::extend_from_dictionary` currently have nothing to be
measured
against.

# What changes are included in this PR?

One generator and one case in the existing `BinaryArray` group:

- `build_dictionary_encoded_large_value_page_iterator` — 64 KiB values,
all
distinct, 128 per page, mandatory (no NULLs), otherwise the same
row-group and
  page geometry as the existing generators.
- `arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no
NULLs, large values`

One iteration decodes 64 MiB of output from a 32 MiB dictionary.
Measured on
`main` (Apple M-series):

```
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs, large values
                        time:   [7.6857 ms 7.8982 ms 8.1303 ms]
```

# Are these changes tested?

This is a benchmark. It asserts its decoded value count on each run, as
the
surrounding cases do.

# Are there any user-facing changes?

No.

# AI disclosure

This benchmark was drafted with AI assistance and reviewed by me.
@etseidl

etseidl commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

run benchmark arrow_reader

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5347364903-1771-drcpf 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                                                      dict-extend-reserve-values             main
-----                                                                                                      --------------------------             ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.00    839.8±9.15µs        ? ?/sec    1.00   840.8±13.48µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.00    945.6±4.63µs        ? ?/sec    1.00    943.2±4.30µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.01    846.0±9.67µs        ? ?/sec    1.00    838.0±9.70µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.06    292.0±0.27µs        ? ?/sec    1.00    276.2±0.13µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs, large values                       1.00     40.9±0.30ms        ? ?/sec    1.00     40.9±0.32ms        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.02    389.7±0.76µs        ? ?/sec    1.00    383.7±0.66µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.03    295.6±0.24µs        ? ?/sec    1.00    287.4±0.27µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.01    410.2±7.84µs        ? ?/sec    1.00    404.6±4.37µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.01    467.9±4.02µs        ? ?/sec    1.00    462.4±3.07µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.02    415.1±4.33µs        ? ?/sec    1.00    408.9±4.68µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     81.2±0.03µs        ? ?/sec    1.00     80.8±0.05µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    109.1±0.07µs        ? ?/sec    1.00    108.9±0.09µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.00     85.1±0.08µs        ? ?/sec    1.00     84.8±0.05µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.01    148.4±0.60µs        ? ?/sec    1.00    146.9±0.82µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.15    163.5±2.47µs        ? ?/sec    1.00    141.7±0.31µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.13   166.7±10.69µs        ? ?/sec    1.00    147.8±1.23µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.00    151.6±0.33µs        ? ?/sec    1.02    154.0±0.34µs        ? ?/sec
arrow_array_reader/BooleanArray/plain encoded, mandatory, no NULLs                                         1.00    228.1±1.25µs        ? ?/sec    1.06    240.9±0.49µs        ? ?/sec
arrow_array_reader/BooleanArray/plain encoded, optional, half NULLs                                        1.00    243.7±1.70µs        ? ?/sec    1.07    261.2±1.54µs        ? ?/sec
arrow_array_reader/BooleanArray/plain encoded, optional, no NULLs                                          1.00    233.1±0.80µs        ? ?/sec    1.06    246.0±0.53µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.08  1048.8±57.94µs        ? ?/sec    1.00    966.9±0.54µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.00    671.8±0.49µs        ? ?/sec    1.00    672.3±0.44µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.03   996.9±24.39µs        ? ?/sec    1.00    971.4±0.66µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    188.9±0.30µs        ? ?/sec    1.01    190.5±0.27µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    294.1±0.37µs        ? ?/sec    1.00    295.0±0.29µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00    195.2±0.21µs        ? ?/sec    1.00    194.7±0.25µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.01    132.1±0.20µs        ? ?/sec    1.00    131.0±0.24µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.01    185.1±0.25µs        ? ?/sec    1.00    183.5±0.23µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.03    135.1±0.34µs        ? ?/sec    1.00    131.1±0.37µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.02     60.0±0.03µs        ? ?/sec    1.00     59.1±0.04µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.01    147.8±0.09µs        ? ?/sec    1.00    146.9±0.13µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     62.8±0.04µs        ? ?/sec    1.01     63.1±0.06µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.00    803.3±0.45µs        ? ?/sec    1.00    802.8±0.62µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.00    509.5±0.43µs        ? ?/sec    1.00    511.4±0.78µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.00    807.9±0.57µs        ? ?/sec    1.00    807.3±0.62µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.05     24.1±0.04µs        ? ?/sec    1.00     22.9±0.05µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.01    131.6±0.35µs        ? ?/sec    1.00    131.0±0.12µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.05     28.4±0.12µs        ? ?/sec    1.00     27.0±0.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.06     79.1±0.17µs        ? ?/sec    1.00     74.8±0.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.01    130.9±0.11µs        ? ?/sec    1.00    130.1±0.14µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.02     81.7±0.19µs        ? ?/sec    1.00     79.8±0.29µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.02      5.5±0.02µs        ? ?/sec    1.00      5.4±0.01µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.01     93.7±0.08µs        ? ?/sec    1.00     93.2±0.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00      8.8±0.03µs        ? ?/sec    1.00      8.8±0.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.06    152.6±0.57µs        ? ?/sec    1.00    144.6±0.68µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    201.9±0.21µs        ? ?/sec    1.00    200.9±0.19µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.04    156.7±0.29µs        ? ?/sec    1.00    150.6±0.33µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00      7.5±0.01µs        ? ?/sec    1.00      7.5±0.01µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.01    128.9±0.07µs        ? ?/sec    1.00    127.8±0.08µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     11.0±0.02µs        ? ?/sec    1.00     11.0±0.04µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.02    308.4±0.90µs        ? ?/sec    1.00    302.6±0.77µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.00    270.7±0.46µs        ? ?/sec    1.00    271.0±0.36µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.03    312.2±0.81µs        ? ?/sec    1.00    303.8±0.76µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.00     12.0±0.02µs        ? ?/sec    1.02     12.2±0.01µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.02    126.0±2.40µs        ? ?/sec    1.00    123.5±0.15µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.06     16.6±0.03µs        ? ?/sec    1.00     15.6±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed increasing value                                    1.00     87.3±0.84µs        ? ?/sec    1.00     87.1±0.64µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed single value                                        1.01     79.3±0.77µs        ? ?/sec    1.00     78.9±0.69µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip increasing value                               1.00     50.5±0.36µs        ? ?/sec    1.00     50.7±0.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip single value                                   1.00     46.0±0.55µs        ? ?/sec    1.00     45.8±0.48µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip stepped increasing value                       1.01     74.7±0.87µs        ? ?/sec    1.00     74.3±0.10µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00     88.9±0.13µs        ? ?/sec    1.00     89.2±0.28µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00     89.6±0.12µs        ? ?/sec    1.00     89.6±0.11µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00     91.4±0.20µs        ? ?/sec    1.00     91.0±0.16µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed stepped increasing value                            1.00    106.5±0.11µs        ? ?/sec    1.01    107.4±0.21µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    125.3±0.22µs        ? ?/sec    1.00    125.7±0.27µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    147.9±0.18µs        ? ?/sec    1.00    147.6±0.22µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    129.3±0.28µs        ? ?/sec    1.00    129.4±0.31µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     54.0±0.08µs        ? ?/sec    1.00     54.0±0.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    111.2±0.08µs        ? ?/sec    1.00    111.5±0.19µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.01     57.7±0.07µs        ? ?/sec    1.00     57.3±0.06µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01     84.7±0.11µs        ? ?/sec    1.00     84.1±0.05µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.00    128.9±0.15µs        ? ?/sec    1.00    128.4±0.10µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.01     88.6±0.11µs        ? ?/sec    1.00     87.6±0.07µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.02     48.5±0.10µs        ? ?/sec    1.00     47.7±0.04µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.01    108.3±0.08µs        ? ?/sec    1.00    107.4±0.09µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     50.8±0.05µs        ? ?/sec    1.00     50.6±0.04µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed increasing value                                    1.00     78.5±0.19µs        ? ?/sec    1.00     78.7±0.70µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed single value                                        1.00     74.9±0.09µs        ? ?/sec    1.00     75.2±0.90µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip increasing value                               1.00     43.7±0.08µs        ? ?/sec    1.00     43.8±0.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip single value                                   1.00     41.9±0.05µs        ? ?/sec    1.02     42.6±0.43µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip stepped increasing value                       1.00     67.5±0.08µs        ? ?/sec    1.01     68.0±0.31µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01     80.6±1.78µs        ? ?/sec    1.00     80.0±0.22µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00     86.5±0.08µs        ? ?/sec    1.00     86.5±0.13µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.00     82.0±0.27µs        ? ?/sec    1.00     81.9±0.18µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed stepped increasing value                            1.00     99.6±0.16µs        ? ?/sec    1.00     99.9±0.27µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    115.5±0.17µs        ? ?/sec    1.00    115.6±0.41µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.00    145.1±0.16µs        ? ?/sec    1.00    145.0±0.26µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    119.3±0.13µs        ? ?/sec    1.00    119.1±0.39µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.01     83.9±0.07µs        ? ?/sec    1.00     83.4±0.07µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    128.1±0.11µs        ? ?/sec    1.00    128.3±0.09µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     87.9±0.11µs        ? ?/sec    1.00     87.5±0.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01     88.1±0.24µs        ? ?/sec    1.00     87.2±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    133.0±0.21µs        ? ?/sec    1.00    132.0±0.12µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00     91.3±0.07µs        ? ?/sec    1.00     90.9±0.06µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     54.5±0.06µs        ? ?/sec    1.01     54.9±0.04µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.00    113.4±0.17µs        ? ?/sec    1.00    113.1±0.16µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     58.5±0.07µs        ? ?/sec    1.00     58.8±0.06µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed increasing value                                               1.00     53.8±0.55µs        ? ?/sec    1.00     53.6±0.54µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed single value                                                   1.01     45.8±0.78µs        ? ?/sec    1.00     45.5±0.43µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip increasing value                                          1.01     33.6±0.35µs        ? ?/sec    1.00     33.4±0.33µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip single value                                              1.01     29.1±0.53µs        ? ?/sec    1.00     28.9±0.38µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip stepped increasing value                                  1.00     57.0±0.09µs        ? ?/sec    1.00     56.9±0.06µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00     72.0±0.16µs        ? ?/sec    1.00     72.0±0.26µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.00     72.6±0.20µs        ? ?/sec    1.00     72.6±0.15µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.00     74.0±0.13µs        ? ?/sec    1.00     74.0±0.23µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed stepped increasing value                                       1.00     73.6±0.12µs        ? ?/sec    1.00     73.5±0.12µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00     92.0±0.31µs        ? ?/sec    1.00     92.1±0.19µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    113.6±0.23µs        ? ?/sec    1.00    113.9±0.18µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00     95.5±0.30µs        ? ?/sec    1.00     96.0±0.24µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     21.1±0.04µs        ? ?/sec    1.00     21.1±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00     77.4±0.08µs        ? ?/sec    1.00     77.7±0.19µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.00     24.9±0.06µs        ? ?/sec    1.00     24.9±0.03µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.01     51.8±0.05µs        ? ?/sec    1.00     51.4±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.01     95.4±0.09µs        ? ?/sec    1.00     94.9±0.08µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.01     55.6±0.06µs        ? ?/sec    1.00     55.0±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     13.9±0.06µs        ? ?/sec    1.00     13.9±0.04µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.00     75.1±0.15µs        ? ?/sec    1.00     74.7±0.09µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.01     17.8±0.08µs        ? ?/sec    1.00     17.6±0.04µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed increasing value                                               1.00     50.1±0.60µs        ? ?/sec    1.00     50.1±0.60µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed single value                                                   1.00     42.0±0.50µs        ? ?/sec    1.00     42.0±0.43µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip increasing value                                          1.00     31.6±0.37µs        ? ?/sec    1.00     31.5±0.31µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip single value                                              1.00     27.1±0.38µs        ? ?/sec    1.00     27.0±0.39µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip stepped increasing value                                  1.00     55.1±0.07µs        ? ?/sec    1.00     55.1±0.25µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00     70.2±0.34µs        ? ?/sec    1.00     70.2±0.28µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00     71.4±0.08µs        ? ?/sec    1.00     71.3±0.11µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00     72.6±0.34µs        ? ?/sec    1.00     72.7±0.24µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed stepped increasing value                                       1.00     69.8±0.09µs        ? ?/sec    1.00     69.8±0.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00     88.9±0.23µs        ? ?/sec    1.00     89.0±0.20µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    112.1±0.18µs        ? ?/sec    1.00    111.9±0.16µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00     92.9±0.28µs        ? ?/sec    1.00     92.6±0.23µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     17.4±0.04µs        ? ?/sec    1.01     17.6±0.02µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00     74.4±0.06µs        ? ?/sec    1.00     74.4±0.06µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     21.0±0.07µs        ? ?/sec    1.00     21.1±0.02µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.01     48.2±0.06µs        ? ?/sec    1.00     47.8±0.03µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.02     93.0±0.25µs        ? ?/sec    1.00     91.3±0.08µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.02     52.2±0.14µs        ? ?/sec    1.00     51.4±0.04µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.00      9.9±0.03µs        ? ?/sec    1.01     10.0±0.03µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.01     71.8±0.05µs        ? ?/sec    1.00     71.3±0.07µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.00     13.8±0.04µs        ? ?/sec    1.00     13.8±0.03µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed increasing value                                               1.00     41.1±0.16µs        ? ?/sec    1.00     41.2±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed single value                                                   1.00     37.9±0.09µs        ? ?/sec    1.00     37.9±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip increasing value                                          1.00     24.6±0.05µs        ? ?/sec    1.00     24.7±0.06µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip single value                                              1.00     22.8±0.03µs        ? ?/sec    1.01     22.9±0.06µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip stepped increasing value                                  1.00     48.5±0.10µs        ? ?/sec    1.00     48.6±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     61.1±0.05µs        ? ?/sec    1.00     60.9±0.09µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00     67.7±0.07µs        ? ?/sec    1.00     67.8±0.07µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.01     63.4±0.06µs        ? ?/sec    1.00     62.9±0.08µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed stepped increasing value                                       1.00     62.4±0.15µs        ? ?/sec    1.00     62.5±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00     78.2±0.17µs        ? ?/sec    1.00     78.1±0.17µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.01    108.4±0.14µs        ? ?/sec    1.00    107.4±0.10µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00     82.1±0.16µs        ? ?/sec    1.00     82.0±0.13µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     46.3±0.04µs        ? ?/sec    1.00     46.4±0.04µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.01     91.9±0.20µs        ? ?/sec    1.00     91.0±0.08µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00     50.7±0.04µs        ? ?/sec    1.00     50.7±0.03µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.01     50.8±0.03µs        ? ?/sec    1.00     50.1±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.02     96.2±0.15µs        ? ?/sec    1.00     94.7±0.10µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.01     54.4±0.06µs        ? ?/sec    1.00     53.8±0.05µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     16.4±0.03µs        ? ?/sec    1.01     16.5±0.02µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.00     76.7±0.09µs        ? ?/sec    1.00     76.8±0.11µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     20.1±0.03µs        ? ?/sec    1.00     20.1±0.03µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed increasing value                                                1.00     53.2±0.60µs        ? ?/sec    1.00     53.4±0.52µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed single value                                                    1.00     44.5±0.40µs        ? ?/sec    1.02     45.2±0.42µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip increasing value                                           1.00     33.3±0.34µs        ? ?/sec    1.00     33.3±0.29µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip single value                                               1.00     28.3±0.35µs        ? ?/sec    1.01     28.7±0.36µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip stepped increasing value                                   1.00     56.9±0.10µs        ? ?/sec    1.00     56.8±0.13µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     71.5±0.09µs        ? ?/sec    1.00     71.7±0.17µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00     72.5±0.08µs        ? ?/sec    1.00     72.5±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.01     74.2±0.10µs        ? ?/sec    1.00     73.8±0.05µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed stepped increasing value                                        1.00     73.2±0.11µs        ? ?/sec    1.00     73.4±0.24µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00     91.8±0.16µs        ? ?/sec    1.00     91.9±0.09µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    113.6±0.13µs        ? ?/sec    1.00    114.1±0.13µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00     95.9±0.16µs        ? ?/sec    1.00     95.6±0.10µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     20.7±0.05µs        ? ?/sec    1.01     20.9±0.05µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.00     77.3±0.08µs        ? ?/sec    1.00     77.1±0.06µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.01     24.8±0.04µs        ? ?/sec    1.00     24.7±0.03µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.00     51.5±0.04µs        ? ?/sec    1.00     51.3±0.03µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.01     95.6±0.08µs        ? ?/sec    1.00     94.9±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.01     55.3±0.07µs        ? ?/sec    1.00     54.9±0.04µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.01     13.9±0.04µs        ? ?/sec    1.00     13.7±0.03µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.02     75.5±0.05µs        ? ?/sec    1.00     74.3±0.12µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.02     17.6±0.04µs        ? ?/sec    1.00     17.3±0.03µs        ? ?/sec
arrow_array_reader/ListArray/Fixed32List/90pct NULLs                                                       1.00    915.3±2.88µs        ? ?/sec    1.00    914.8±2.87µs        ? ?/sec
arrow_array_reader/ListArray/Fixed32List/99pct NULLs                                                       1.00   446.3±14.59µs        ? ?/sec    1.00   446.8±14.63µs        ? ?/sec
arrow_array_reader/ListArray/Fixed32List/half NULLs                                                        1.00      2.2±0.01ms        ? ?/sec    1.01      2.3±0.01ms        ? ?/sec
arrow_array_reader/ListArray/Fixed32List/no NULLs                                                          1.02      3.1±0.02ms        ? ?/sec    1.00      3.1±0.01ms        ? ?/sec
arrow_array_reader/ListArray/Int32List/90pct NULLs                                                         1.00    906.5±3.24µs        ? ?/sec    1.00    905.1±3.42µs        ? ?/sec
arrow_array_reader/ListArray/Int32List/99pct NULLs                                                         1.00   447.3±15.02µs        ? ?/sec    1.00   446.9±14.94µs        ? ?/sec
arrow_array_reader/ListArray/Int32List/half NULLs                                                          1.00      2.0±0.01ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_array_reader/ListArray/Int32List/no NULLs                                                            1.00      2.8±0.00ms        ? ?/sec    1.00      2.8±0.00ms        ? ?/sec
arrow_array_reader/ListArray/StringList/90pct NULLs                                                        1.00    965.7±4.16µs        ? ?/sec    1.01    974.8±3.12µs        ? ?/sec
arrow_array_reader/ListArray/StringList/99pct NULLs                                                        1.00   450.3±14.86µs        ? ?/sec    1.00   449.9±14.70µs        ? ?/sec
arrow_array_reader/ListArray/StringList/half NULLs                                                         1.00      3.0±0.01ms        ? ?/sec    1.00      3.1±0.01ms        ? ?/sec
arrow_array_reader/ListArray/StringList/no NULLs                                                           1.00      4.9±0.02ms        ? ?/sec    1.01      5.0±0.02ms        ? ?/sec
arrow_array_reader/PlainStringToDictionary/high cardinality                                                1.00  1655.7±13.23µs        ? ?/sec    1.00  1662.4±14.10µs        ? ?/sec
arrow_array_reader/PlainStringToDictionary/low cardinality                                                 1.00   1463.5±6.50µs        ? ?/sec    1.00  1458.5±18.16µs        ? ?/sec
arrow_array_reader/PlainStringToDictionary/medium cardinality 1                                            1.00  1652.8±12.58µs        ? ?/sec    1.00  1653.3±20.28µs        ? ?/sec
arrow_array_reader/PlainStringToDictionary/medium cardinality 2                                            1.00   1490.6±9.58µs        ? ?/sec    1.00  1493.9±17.69µs        ? ?/sec
arrow_array_reader/StringArray/const delta byte array encoded, mandatory, no NULLs                         1.00    543.1±2.18µs        ? ?/sec    1.01    546.6±1.85µs        ? ?/sec
arrow_array_reader/StringArray/const delta length byte array encoded, mandatory, no NULLs                  1.02    224.9±1.00µs        ? ?/sec    1.00    221.5±0.87µs        ? ?/sec
arrow_array_reader/StringArray/const prefix delta byte array encoded, mandatory, no NULLs                  1.00   788.8±41.14µs        ? ?/sec    1.01   798.1±30.14µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.02    291.0±0.78µs        ? ?/sec    1.00    284.9±0.15µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.01    390.5±0.97µs        ? ?/sec    1.00    387.7±0.62µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.00    277.6±0.76µs        ? ?/sec    1.04    290.0±0.24µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.02    447.1±1.91µs        ? ?/sec    1.00    437.9±1.76µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.00    490.9±2.78µs        ? ?/sec    1.00    488.9±2.37µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.00    452.9±4.26µs        ? ?/sec    1.00    451.0±3.39µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.00    247.5±0.68µs        ? ?/sec    1.01    248.8±0.67µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    264.0±0.92µs        ? ?/sec    1.05    276.5±1.14µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.00    251.0±0.69µs        ? ?/sec    1.01    252.7±0.64µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00     81.3±0.06µs        ? ?/sec    1.00     81.1±0.04µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.01    109.6±0.08µs        ? ?/sec    1.00    109.0±0.09µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.01     85.2±0.05µs        ? ?/sec    1.00     84.7±0.04µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    224.1±0.30µs        ? ?/sec    1.00    223.5±0.35µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.01    187.3±2.96µs        ? ?/sec    1.00    185.6±1.88µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    231.0±0.26µs        ? ?/sec    1.00    231.4±0.32µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed increasing value                                              1.00     53.7±0.60µs        ? ?/sec    1.00     53.6±0.54µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed single value                                                  1.00     45.1±0.59µs        ? ?/sec    1.01     45.6±0.45µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip increasing value                                         1.00     33.5±0.34µs        ? ?/sec    1.00     33.5±0.35µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip single value                                             1.00     28.6±0.40µs        ? ?/sec    1.01     28.8±0.36µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip stepped increasing value                                 1.00     56.9±0.11µs        ? ?/sec    1.00     56.8±0.05µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.00     75.7±0.16µs        ? ?/sec    1.01     76.2±0.05µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00     74.9±0.19µs        ? ?/sec    1.01     75.5±0.08µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.00     78.2±0.17µs        ? ?/sec    1.00     78.5±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed stepped increasing value                                      1.00     73.2±0.11µs        ? ?/sec    1.00     73.4±0.11µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00     97.5±0.13µs        ? ?/sec    1.01     98.0±0.08µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    117.2±0.17µs        ? ?/sec    1.01    118.0±0.14µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    101.1±0.13µs        ? ?/sec    1.01    101.9±0.07µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     21.1±0.09µs        ? ?/sec    1.00     21.0±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.00     77.6±0.26µs        ? ?/sec    1.00     77.4±0.08µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.01     24.9±0.08µs        ? ?/sec    1.00     24.6±0.02µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.00     51.6±0.12µs        ? ?/sec    1.00     51.5±0.05µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.00     95.4±0.38µs        ? ?/sec    1.00     95.2±0.09µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.00     55.5±0.08µs        ? ?/sec    1.00     55.5±0.05µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     13.9±0.04µs        ? ?/sec    1.00     13.9±0.04µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.00     74.6±0.09µs        ? ?/sec    1.00     74.9±0.07µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.00     17.6±0.03µs        ? ?/sec    1.01     17.8±0.04µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed increasing value                                              1.00     50.0±0.57µs        ? ?/sec    1.00     50.2±0.58µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed single value                                                  1.00     41.8±0.43µs        ? ?/sec    1.01     42.1±0.42µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip increasing value                                         1.00     31.5±0.36µs        ? ?/sec    1.00     31.6±0.33µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip single value                                             1.00     26.8±0.33µs        ? ?/sec    1.01     27.1±0.40µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip stepped increasing value                                 1.00     55.1±0.06µs        ? ?/sec    1.00     55.0±0.07µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00     70.4±0.32µs        ? ?/sec    1.00     70.3±0.23µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00     71.2±0.14µs        ? ?/sec    1.00     71.2±0.16µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00     72.6±0.33µs        ? ?/sec    1.00     72.7±0.28µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed stepped increasing value                                      1.00     69.9±0.11µs        ? ?/sec    1.00     69.9±0.12µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00     88.9±0.31µs        ? ?/sec    1.00     88.9±0.15µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.01    111.7±0.20µs        ? ?/sec    1.00    111.1±0.19µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00     93.0±0.32µs        ? ?/sec    1.00     92.8±0.21µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     17.6±0.04µs        ? ?/sec    1.00     17.6±0.04µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00     74.0±0.06µs        ? ?/sec    1.01     74.4±0.08µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.01     21.2±0.04µs        ? ?/sec    1.00     21.1±0.02µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.01     48.3±0.03µs        ? ?/sec    1.00     47.9±0.03µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.02     92.7±0.09µs        ? ?/sec    1.00     91.2±0.08µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.01     51.9±0.04µs        ? ?/sec    1.00     51.5±0.05µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     10.2±0.04µs        ? ?/sec    1.00     10.2±0.04µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00     71.5±0.07µs        ? ?/sec    1.00     71.9±0.06µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     14.0±0.04µs        ? ?/sec    1.00     13.9±0.03µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed increasing value                                              1.00     41.5±0.15µs        ? ?/sec    1.01     41.8±0.21µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed single value                                                  1.00     38.0±0.10µs        ? ?/sec    1.01     38.5±0.06µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip increasing value                                         1.00     24.7±0.06µs        ? ?/sec    1.01     25.0±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip single value                                             1.00     23.0±0.04µs        ? ?/sec    1.00     22.9±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip stepped increasing value                                 1.00     48.6±0.08µs        ? ?/sec    1.00     48.6±0.10µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.05     64.2±1.30µs        ? ?/sec    1.00     61.0±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.01     67.9±0.07µs        ? ?/sec    1.00     67.4±0.05µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     63.0±0.09µs        ? ?/sec    1.00     62.8±0.08µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed stepped increasing value                                      1.00     62.7±0.15µs        ? ?/sec    1.00     62.9±0.16µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00     78.5±0.15µs        ? ?/sec    1.00     78.4±0.13µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.01    108.8±0.19µs        ? ?/sec    1.00    107.6±0.10µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00     82.4±0.14µs        ? ?/sec    1.00     82.1±0.12µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00     45.9±0.04µs        ? ?/sec    1.00     45.8±0.04µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.00     91.6±0.10µs        ? ?/sec    1.00     91.3±0.09µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.00     49.6±0.04µs        ? ?/sec    1.00     49.7±0.03µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.01     51.1±0.05µs        ? ?/sec    1.00     50.3±0.07µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.02     96.5±0.09µs        ? ?/sec    1.00     94.8±0.09µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.01     54.7±0.09µs        ? ?/sec    1.00     54.1±0.07µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.01     16.6±0.05µs        ? ?/sec    1.00     16.5±0.03µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.01     77.1±0.08µs        ? ?/sec    1.00     76.6±0.10µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.02     20.5±0.04µs        ? ?/sec    1.00     20.1±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed increasing value                                               1.01     53.5±0.61µs        ? ?/sec    1.00     53.1±0.58µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed single value                                                   1.02     45.5±0.74µs        ? ?/sec    1.00     44.8±0.38µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip increasing value                                          1.01     33.4±0.34µs        ? ?/sec    1.00     33.2±0.32µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip single value                                              1.02     29.0±0.51µs        ? ?/sec    1.00     28.4±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip stepped increasing value                                  1.00     56.8±0.08µs        ? ?/sec    1.00     56.9±0.15µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00     75.1±0.06µs        ? ?/sec    1.01     75.6±0.05µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00     74.3±0.06µs        ? ?/sec    1.00     74.3±0.08µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00     77.4±0.06µs        ? ?/sec    1.00     77.7±0.05µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed stepped increasing value                                       1.00     73.1±0.11µs        ? ?/sec    1.00     73.3±0.24µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00     96.4±0.08µs        ? ?/sec    1.00     96.6±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    116.2±0.10µs        ? ?/sec    1.00    116.3±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    100.3±0.07µs        ? ?/sec    1.00    100.5±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     21.7±0.07µs        ? ?/sec    1.01     22.0±0.04µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.00     77.4±0.08µs        ? ?/sec    1.00     77.4±0.06µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.00     24.7±0.04µs        ? ?/sec    1.00     24.7±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.01     51.5±0.05µs        ? ?/sec    1.00     51.1±0.04µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.01     95.6±0.08µs        ? ?/sec    1.00     94.7±0.12µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.00     55.2±0.05µs        ? ?/sec    1.00     55.1±0.05µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     13.8±0.05µs        ? ?/sec    1.00     13.7±0.03µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.02     75.1±0.08µs        ? ?/sec    1.00     73.5±0.07µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     17.4±0.04µs        ? ?/sec    1.01     17.6±0.04µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, half NULLs            1.02     72.4±0.07µs        ? ?/sec    1.00     71.2±0.06µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, mandatory struct, optional data, no NULLs              1.00     14.0±0.04µs        ? ?/sec    1.00     14.1±0.02µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, half NULLs             1.01    132.5±0.15µs        ? ?/sec    1.00    131.6±0.18µs        ? ?/sec
arrow_array_reader/struct/Int32Array/plain encoded, optional struct, optional data, no NULLs               1.00     65.5±0.06µs        ? ?/sec    1.00     65.5±0.07µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 3015.7s
Peak memory 187.4 MiB
Avg memory 37.4 MiB
CPU user 2999.0s
CPU sys 12.5s
Peak spill 0 B

branch

Metric Value
Wall time 3010.7s
Peak memory 168.7 MiB
Avg memory 35.9 MiB
CPU user 2993.2s
CPU sys 12.5s
Peak spill 0 B

File an issue against this benchmark runner

@etseidl

etseidl commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

run benchmark arrow_reader

env:
  BENCH_FILTER: large values

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5348493472-1779-6lgq7 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader
env:
  BENCH_FILTER: "large values"

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader
env:
  BENCH_FILTER: "large values"
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                                   dict-extend-reserve-values             main
-----                                                                                   --------------------------             ----
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs, large values    1.04     41.3±0.44ms        ? ?/sec    1.00     39.6±0.27ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 20.0s
Peak memory 185.3 MiB
Avg memory 89.1 MiB
CPU user 2.4s
CPU sys 11.4s
Peak spill 0 B

branch

Metric Value
Wall time 15.0s
Peak memory 187.7 MiB
Avg memory 125.0 MiB
CPU user 1.4s
CPU sys 11.6s
Peak spill 0 B

File an issue against this benchmark runner

@etseidl

etseidl commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

run benchmark arrow_reader

env:
  BENCH_FILTER: BinaryArr

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5348774264-1780-fnm9v 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader
env:
  BENCH_FILTER: "BinaryArr"

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_reader
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing dict-extend-reserve-values (294292b) to f271113 (merge-base) diff

Run configuration
run benchmark arrow_reader
env:
  BENCH_FILTER: "BinaryArr"
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                                                   dict-extend-reserve-values             main
-----                                                                                   --------------------------             ----
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                  1.00    280.7±0.21µs        ? ?/sec    1.01    283.1±0.19µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs, large values    1.00     41.2±0.38ms        ? ?/sec    1.04     42.7±0.38ms        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                 1.00    385.7±0.64µs        ? ?/sec    1.00    387.2±0.64µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                   1.00    280.9±0.19µs        ? ?/sec    1.02    287.3±0.27µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                       1.00    405.7±4.18µs        ? ?/sec    1.01    411.5±6.07µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                      1.01    469.5±4.30µs        ? ?/sec    1.00    466.9±4.13µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                        1.00    411.9±4.14µs        ? ?/sec    1.00    413.0±5.86µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 80.0s
Peak memory 177.8 MiB
Avg memory 45.6 MiB
CPU user 63.3s
CPU sys 12.5s
Peak spill 0 B

branch

Metric Value
Wall time 80.0s
Peak memory 181.9 MiB
Avg memory 45.1 MiB
CPU user 62.0s
CPU sys 12.1s
Peak spill 0 B

File an issue against this benchmark runner

@etseidl

etseidl commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

On my x86 mac laptop:

group                                                                                   main_bytearr                           pr_bytearr
-----                                                                                   ------------                           ----------
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                  1.00   517.3±32.36µs        ? ?/sec    1.07   555.8±35.44µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs, large values    1.00     55.1±2.75ms        ? ?/sec    1.05     57.6±2.80ms        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                 1.00   654.6±41.15µs        ? ?/sec    1.04   683.2±43.57µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                   1.00   547.3±32.93µs        ? ?/sec    1.03   562.5±29.80µs        ? ?/sec

@etseidl

etseidl commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

I'll try on my linux WS tomorrow, but so far not seeing much of an improvement.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants