Skip to content

[Json] Replace ArrayData with typed Array construction in json-reader#9497

Merged
alamb merged 7 commits intoapache:mainfrom
liamzwbao:issue-9298-replace-array-data
Apr 2, 2026
Merged

[Json] Replace ArrayData with typed Array construction in json-reader#9497
alamb merged 7 commits intoapache:mainfrom
liamzwbao:issue-9298-replace-array-data

Conversation

@liamzwbao
Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

While implementing ListViewArrayDecoder in arrow-json, I noticed we could potentially retire ArrayDataBuilder inside ListArrayDecoder. Therefore, I'd like to use a small PR here to make sure there's no regression

What changes are included in this PR?

Replace ArrayDataBuilder with GenericListArray in ListArrayDecoder

Are these changes tested?

Covered by existing tests

Are there any user-facing changes?

No

@liamzwbao liamzwbao marked this pull request as ready for review March 2, 2026 02:28
@github-actions github-actions bot added the arrow Changes to the arrow crate label Mar 2, 2026
@liamzwbao
Copy link
Copy Markdown
Contributor Author

Hi @alamb @Jefffrey , would appreciate a review and a benchmark for this PR. Thanks!

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Mar 2, 2026

Any particular benchmark you want me to run?

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thanks @liamzwbao -- this looks good to me -- I have just one question

@liamzwbao
Copy link
Copy Markdown
Contributor Author

Any particular benchmark you want me to run?

This one should be good: https://github.com/apache/arrow-rs/blob/main/arrow-json/benches/json-reader.rs
I tested it locally (MacOS M3 MAX) and there's no regression. That's why I brought it up to see if we can get similar results on a cloud server

@liamzwbao
Copy link
Copy Markdown
Contributor Author

Hi @alamb, just noticed that we don't have benchmark for List yet. I will create one and get back to you later

@liamzwbao liamzwbao marked this pull request as draft March 4, 2026 02:29
alamb pushed a commit that referenced this pull request Mar 11, 2026
# Which issue does this PR close?

<!--
We generally require a GitHub issue to be filed for all bug fixes and
enhancements and this helps us generate change logs for our releases.
You can link an issue to this PR using the GitHub syntax.
-->

- Relates to #9497.

# Rationale for this change

<!--
Why are you proposing this change? If this is already explained clearly
in the issue then this section is not needed.
Explaining clearly why changes are proposed helps reviewers understand
your changes and offer better suggestions for fixes.
-->

Add benchmark for `ListArray` in `json_reader` to support the
performance evaluation of #9497

# What changes are included in this PR?

<!--
There is no need to duplicate the description in the issue here but it
is sometimes worth providing a summary of the individual changes in this
PR.
-->

- Benchmarks for decoding and serialize json list to `ListArray`.
- Benchmarks for `ListArray` and `FixedSizeListArray` json writer

# Are these changes tested?

<!--
We typically require tests for all PRs in order to:
1. Prevent the code from being accidentally broken by subsequent changes
2. Serve as another way to document the expected behavior of the code

If tests are not included in your PR, please explain why (for example,
are they covered by existing tests)?
-->

Benchmarks only

# Are there any user-facing changes?

<!--
If there are user-facing changes then we may require documentation to be
updated before approving the PR.

If there are any breaking changes to public APIs, please call them out.
-->

No
@liamzwbao liamzwbao force-pushed the issue-9298-replace-array-data branch from 6155c94 to 7daefe6 Compare March 12, 2026 00:55
@liamzwbao liamzwbao marked this pull request as ready for review March 12, 2026 00:57
@liamzwbao
Copy link
Copy Markdown
Contributor Author

Hi @alamb, this PR is ready for the benchmark, could you please run json_reader bench in arrow-json?

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Mar 12, 2026

run benchmark json_reader

@alamb-ghbot

This comment was marked as outdated.

@alamb-ghbot
Copy link
Copy Markdown

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing issue-9298-replace-array-data (7daefe6) to 6931d88 diff
BENCH_NAME=json_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench json_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=issue-9298-replace-array-data
Results will be posted here when complete

@alamb-ghbot
Copy link
Copy Markdown

🤖: Benchmark completed

Details

group                                        issue-9298-replace-array-data          main
-----                                        -----------------------------          ----
decode_binary_hex_json                       1.03     27.2±0.62ms        ? ?/sec    1.00     26.4±0.14ms        ? ?/sec
decode_binary_view_hex_json                  1.07     26.4±0.18ms        ? ?/sec    1.00     24.7±0.19ms        ? ?/sec
decode_fixed_binary_hex_json                 1.06     25.7±0.35ms        ? ?/sec    1.00     24.1±0.11ms        ? ?/sec
decode_list_long_i64_json/131072             1.01    509.1±3.11ms   153.8 MB/sec    1.00    502.5±3.59ms   155.8 MB/sec
decode_list_long_i64_serialize               1.02    465.6±2.79ms        ? ?/sec    1.00    457.9±3.14ms        ? ?/sec
decode_list_short_i64_json/131072            1.01     33.2±0.22ms   157.1 MB/sec    1.00     33.0±0.11ms   158.4 MB/sec
decode_list_short_i64_serialize              1.01     28.2±0.30ms        ? ?/sec    1.00     27.9±0.48ms        ? ?/sec
decode_wide_object_i64_json                  1.00  1029.8±14.18ms        ? ?/sec    1.00  1026.3±18.52ms        ? ?/sec
decode_wide_object_i64_serialize             1.00    864.7±7.48ms        ? ?/sec    1.01    876.1±9.59ms        ? ?/sec
decode_wide_projection_full_json/131072      1.01   1863.6±9.72ms    93.4 MB/sec    1.00  1848.8±10.87ms    94.1 MB/sec
decode_wide_projection_narrow_json/131072    1.00    793.3±4.84ms   219.3 MB/sec    1.01    799.6±5.73ms   217.6 MB/sec
large_bench_primitive                        1.02      2.4±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
small_bench_list                             1.11     12.9±0.18µs        ? ?/sec    1.00     11.7±0.19µs        ? ?/sec
small_bench_primitive                        1.00      6.1±0.19µs        ? ?/sec    1.01      6.2±0.18µs        ? ?/sec
small_bench_primitive_with_utf8view          1.04      6.4±0.08µs        ? ?/sec    1.00      6.2±0.13µs        ? ?/sec

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Mar 12, 2026

run benchmark json_reader

@alamb-ghbot
Copy link
Copy Markdown

🤖 ./gh_compare_arrow.sh gh_compare_arrow.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing issue-9298-replace-array-data (7daefe6) to 6931d88 diff
BENCH_NAME=json_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench json_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=issue-9298-replace-array-data
Results will be posted here when complete

@alamb-ghbot
Copy link
Copy Markdown

🤖: Benchmark completed

Details

group                                        issue-9298-replace-array-data          main
-----                                        -----------------------------          ----
decode_binary_hex_json                       1.03     27.2±0.16ms        ? ?/sec    1.00     26.4±0.13ms        ? ?/sec
decode_binary_view_hex_json                  1.05     26.3±0.46ms        ? ?/sec    1.00     25.0±0.09ms        ? ?/sec
decode_fixed_binary_hex_json                 1.07     25.6±0.24ms        ? ?/sec    1.00     23.8±0.20ms        ? ?/sec
decode_list_long_i64_json/131072             1.01    510.4±2.17ms   153.4 MB/sec    1.00    503.7±3.04ms   155.5 MB/sec
decode_list_long_i64_serialize               1.00    465.4±3.72ms        ? ?/sec    1.00    465.2±4.51ms        ? ?/sec
decode_list_short_i64_json/131072            1.01     33.2±0.27ms   157.1 MB/sec    1.00     32.9±0.09ms   158.7 MB/sec
decode_list_short_i64_serialize              1.03     28.7±0.70ms        ? ?/sec    1.00     27.7±0.53ms        ? ?/sec
decode_wide_object_i64_json                  1.02  1033.6±12.94ms        ? ?/sec    1.00  1010.8±12.48ms        ? ?/sec
decode_wide_object_i64_serialize             1.00    875.4±7.13ms        ? ?/sec    1.01    885.5±6.89ms        ? ?/sec
decode_wide_projection_full_json/131072      1.00  1888.0±13.86ms    92.2 MB/sec    1.01  1904.1±13.15ms    91.4 MB/sec
decode_wide_projection_narrow_json/131072    1.00    795.5±9.31ms   218.7 MB/sec    1.01    803.2±3.76ms   216.6 MB/sec
large_bench_primitive                        1.02      2.4±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
small_bench_list                             1.11     12.8±0.14µs        ? ?/sec    1.00     11.6±0.05µs        ? ?/sec
small_bench_primitive                        1.00      6.1±0.06µs        ? ?/sec    1.00      6.1±0.06µs        ? ?/sec
small_bench_primitive_with_utf8view          1.02      6.4±0.06µs        ? ?/sec    1.00      6.2±0.11µs        ? ?/sec

@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@alamb alamb changed the title Replace ArrayDataBuilder with GenericListArray in ListArrayDecoder Replace ArrayDataBuilder with GenericListArray in ListArrayDecoder in json-reader Mar 17, 2026
Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thank you for this PR @liamzwbao

the benchmarks seem to show that this PR is slower for some reason. Could you look into that and figure out why?

@adriangbot

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Sorry I forgot to commit my comment. Seems like you already found it though

@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@liamzwbao liamzwbao force-pushed the issue-9298-replace-array-data branch from ebb46dd to ab89d76 Compare March 31, 2026 14:50
@liamzwbao
Copy link
Copy Markdown
Contributor Author

Hi @alamb, this is ready for the json_reader bench again!

alamb

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thank you @liamzwbao -- this is really close -- I think there are a few small items for ListViewArray and the bugin the REE encoder.


pub struct ListLikeArrayDecoder<O, const IS_VIEW: bool> {
data_type: DataType,
field: FieldRef,
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.

this is a nice change (as this now clones an Arc rather than a DataType) 👍

data = data
.add_buffer(Buffer::from_vec(offsets))
.add_buffer(Buffer::from_vec(sizes));
let array = GenericListViewArray::<O>::try_new(
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.

This now does full validation for LIstViewArray I think -- which is more expensive than the previous creation via data.build_unchecked()

I can see two alternatives:

  1. Add a unsafe GenericListViewArray::new_unchecked methods
  2. Leave this code as is and create an ArrayRef directly from the ArrayData

I would selfishly suggest 2 (and then a follow on PR to add unsafe GenericListViewArray::new_unchecked / rework this code) to make reviewing this one eaiser on my

Copy link
Copy Markdown
Contributor Author

@liamzwbao liamzwbao Apr 1, 2026

Choose a reason for hiding this comment

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

Revert to use ArrayDataBuilder for ListView, will create an issue to support GenericListViewArray::new_unchecked and improve later. Created an issue #9646

}

let flat_data = self.decoder.decode(tape, pos)?;
let flat_array = self.decoder.decode(tape, pos)?;
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.

as pointed out, there is something wrong with this code -- I recommend reverting the extra optimization from this PR and adding it as a follow on PR

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Revert the REE optimization, will fix the partition API and reimplement the optimization later

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Created an issue #9645

@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Mar 31, 2026

decode_short_ree_runs_json/131072            1.00      6.9±0.01ms   251.4 MB/sec    2.69     18.5±0.24ms    93.5 MB/sec
decode_short_ree_runs_serialize              1.00      4.8±0.09ms        ? ?/sec    3.52     16.7±0.14ms        ? ?/sec

🐱 🚀

@liamzwbao
Copy link
Copy Markdown
Contributor Author

Hi @alamb, I have revert the refactor for ListView and the REE optimization as discussed. Also filed several followup issues. PTAL, thanks!

@liamzwbao liamzwbao changed the title Replace ArrayData with typed Array construction in json-reader [Json] Replace ArrayData with typed Array construction in json-reader Apr 1, 2026
@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

Copy link
Copy Markdown
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thank you @liamzwbao -- this looks great to me. I kicked off some benchmarks just to double check but i think this is a really nice improvement overall

I also ran the test from #9634 on this PR

And it passes:

  running 1 test
  test reader::tests::test_read_nested_run_end_encoded ... ok

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

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

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                                        issue-9298-replace-array-data          main
-----                                        -----------------------------          ----
decode_binary_hex_json                       1.00     13.9±0.06ms        ? ?/sec    1.00     14.0±0.03ms        ? ?/sec
decode_binary_view_hex_json                  1.00     13.9±0.03ms        ? ?/sec    1.02     14.2±0.02ms        ? ?/sec
decode_fixed_binary_hex_json                 1.03     14.3±0.58ms        ? ?/sec    1.00     13.9±0.07ms        ? ?/sec
decode_large_map_json/131072                 1.00    255.1±1.17ms   297.7 MB/sec    1.02    261.4±0.47ms   290.6 MB/sec
decode_large_map_serialize                   1.00    283.3±3.05ms        ? ?/sec    1.01    286.6±3.46ms        ? ?/sec
decode_long_list_i64_json/131072             1.00    304.4±1.02ms   257.2 MB/sec    1.00    304.4±0.37ms   257.2 MB/sec
decode_long_list_i64_serialize               1.00    175.9±4.71ms        ? ?/sec    1.18    207.6±4.99ms        ? ?/sec
decode_long_ree_runs_json/131072             1.05     18.8±0.25ms    80.6 MB/sec    1.00     18.0±0.28ms    84.4 MB/sec
decode_long_ree_runs_serialize               1.00     16.7±0.25ms        ? ?/sec    1.00     16.7±0.21ms        ? ?/sec
decode_short_list_i64_json/131072            1.00     19.8±0.03ms   263.6 MB/sec    1.00     19.7±0.02ms   264.4 MB/sec
decode_short_list_i64_serialize              1.00     11.2±0.16ms        ? ?/sec    1.03     11.5±0.18ms        ? ?/sec
decode_short_ree_runs_json/131072            1.05     19.9±0.53ms    87.0 MB/sec    1.00     19.0±0.41ms    91.0 MB/sec
decode_short_ree_runs_serialize              1.00     16.9±0.29ms        ? ?/sec    1.00     16.9±0.20ms        ? ?/sec
decode_small_map_json/131072                 1.00     29.9±0.06ms   275.2 MB/sec    1.02     30.4±0.11ms   270.5 MB/sec
decode_small_map_serialize                   1.04     20.5±0.29ms        ? ?/sec    1.00     19.8±0.38ms        ? ?/sec
decode_wide_object_i64_json                  1.00    472.7±5.17ms        ? ?/sec    1.00    471.8±3.96ms        ? ?/sec
decode_wide_object_i64_serialize             1.00   426.6±15.54ms        ? ?/sec    1.02    433.6±6.20ms        ? ?/sec
decode_wide_projection_full_json/131072      1.00    775.3±7.59ms   224.4 MB/sec    1.02   788.3±10.38ms   220.7 MB/sec
decode_wide_projection_narrow_json/131072    1.00    443.4±0.66ms   392.4 MB/sec    1.01    450.0±0.75ms   386.7 MB/sec
infer_json_schema/1000                       1.02  1560.6±14.83µs    80.9 MB/sec    1.00   1536.8±5.55µs    82.1 MB/sec
large_bench_primitive                        1.00   1494.3±2.51µs        ? ?/sec    1.02   1529.8±3.71µs        ? ?/sec
small_bench_list                             1.00      7.1±0.02µs        ? ?/sec    1.12      7.9±0.02µs        ? ?/sec
small_bench_primitive                        1.00      4.0±0.01µs        ? ?/sec    1.12      4.4±0.01µs        ? ?/sec
small_bench_primitive_with_utf8view          1.00      4.0±0.02µs        ? ?/sec    1.12      4.5±0.03µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 419.6s
Peak memory 3.1 GiB
Avg memory 2.6 GiB
CPU user 387.9s
CPU sys 31.4s
Disk read 0 B
Disk write 1.4 GiB

branch

Metric Value
Wall time 413.1s
Peak memory 3.2 GiB
Avg memory 2.7 GiB
CPU user 385.8s
CPU sys 27.2s
Disk read 0 B
Disk write 1.5 MiB

File an issue against this benchmark runner

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 1, 2026

run benchmarks json_reader

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 1, 2026

Benchmarks look as good or better to me

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4173181626-653-v4mmh 6.12.55+ #1 SMP Sun Feb 1 08:59:41 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 issue-9298-replace-array-data (5469fac) to 61b5763 (merge-base) diff
BENCH_NAME=json_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench json_reader
BENCH_FILTER=
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)

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                                        issue-9298-replace-array-data          main
-----                                        -----------------------------          ----
decode_binary_hex_json                       1.00     13.8±0.08ms        ? ?/sec    1.00     13.8±0.08ms        ? ?/sec
decode_binary_view_hex_json                  1.00     13.8±0.06ms        ? ?/sec    1.03     14.2±0.10ms        ? ?/sec
decode_fixed_binary_hex_json                 1.00     13.5±0.08ms        ? ?/sec    1.03     13.9±0.09ms        ? ?/sec
decode_large_map_json/131072                 1.00    254.5±0.56ms   298.5 MB/sec    1.02    260.0±0.60ms   292.1 MB/sec
decode_large_map_serialize                   1.00    267.1±2.86ms        ? ?/sec    1.06    284.1±5.44ms        ? ?/sec
decode_long_list_i64_json/131072             1.01    305.8±4.32ms   256.0 MB/sec    1.00    304.1±0.92ms   257.5 MB/sec
decode_long_list_i64_serialize               1.00    179.7±4.84ms        ? ?/sec    1.13    203.1±4.97ms        ? ?/sec
decode_long_ree_runs_json/131072             1.00     18.3±0.23ms    82.9 MB/sec    1.00     18.3±0.51ms    83.2 MB/sec
decode_long_ree_runs_serialize               1.00     16.4±0.35ms        ? ?/sec    1.01     16.5±0.24ms        ? ?/sec
decode_short_list_i64_json/131072            1.03     20.4±0.14ms   255.7 MB/sec    1.00     19.9±0.03ms   262.4 MB/sec
decode_short_list_i64_serialize              1.03     11.6±0.18ms        ? ?/sec    1.00     11.3±0.68ms        ? ?/sec
decode_short_ree_runs_json/131072            1.01     18.8±0.31ms    91.9 MB/sec    1.00     18.6±0.35ms    92.7 MB/sec
decode_short_ree_runs_serialize              1.00     16.9±0.32ms        ? ?/sec    1.00     16.8±0.13ms        ? ?/sec
decode_small_map_json/131072                 1.00     30.0±0.09ms   273.8 MB/sec    1.01     30.3±0.13ms   270.9 MB/sec
decode_small_map_serialize                   1.02     19.9±0.28ms        ? ?/sec    1.00     19.6±0.42ms        ? ?/sec
decode_wide_object_i64_json                  1.01    467.9±4.48ms        ? ?/sec    1.00    464.9±4.05ms        ? ?/sec
decode_wide_object_i64_serialize             1.00   414.0±10.27ms        ? ?/sec    1.04    429.4±7.13ms        ? ?/sec
decode_wide_projection_full_json/131072      1.00    768.9±8.28ms   226.3 MB/sec    1.01   774.6±15.32ms   224.6 MB/sec
decode_wide_projection_narrow_json/131072    1.00    442.7±0.78ms   393.1 MB/sec    1.01    447.8±0.87ms   388.5 MB/sec
infer_json_schema/1000                       1.00   1543.7±5.84µs    81.8 MB/sec    1.00  1543.2±10.32µs    81.8 MB/sec
large_bench_primitive                        1.00   1493.2±2.04µs        ? ?/sec    1.02   1526.7±3.12µs        ? ?/sec
small_bench_list                             1.00      7.0±0.02µs        ? ?/sec    1.12      7.9±0.01µs        ? ?/sec
small_bench_primitive                        1.00      3.9±0.01µs        ? ?/sec    1.13      4.5±0.02µs        ? ?/sec
small_bench_primitive_with_utf8view          1.00      3.9±0.02µs        ? ?/sec    1.16      4.5±0.02µs        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 418.1s
Peak memory 3.5 GiB
Avg memory 3.0 GiB
CPU user 386.3s
CPU sys 31.6s
Disk read 0 B
Disk write 1.4 GiB

branch

Metric Value
Wall time 410.7s
Peak memory 3.5 GiB
Avg memory 3.0 GiB
CPU user 386.0s
CPU sys 24.6s
Disk read 0 B
Disk write 1.9 MiB

File an issue against this benchmark runner

@alamb alamb merged commit 07a3636 into apache:main Apr 2, 2026
24 checks passed
@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 2, 2026

🚀

@alamb
Copy link
Copy Markdown
Contributor

alamb commented Apr 2, 2026

Thanks for sticking with this one @liamzwbao

@liamzwbao liamzwbao deleted the issue-9298-replace-array-data branch April 3, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arrow Changes to the arrow crate performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants