Skip to content

Implement PARQUET-2249: Introduce IEEE 754 total order#9619

Open
etseidl wants to merge 40 commits into
apache:mainfrom
etseidl:total_order_514
Open

Implement PARQUET-2249: Introduce IEEE 754 total order#9619
etseidl wants to merge 40 commits into
apache:mainfrom
etseidl:total_order_514

Conversation

@etseidl
Copy link
Copy Markdown
Contributor

@etseidl etseidl commented Mar 26, 2026

Which issue does this PR close?

Rationale for this change

This takes the implementation done by @Xuanwo (#8158) and updates it to the new thrift format and recent changes to the original proposal (apache/parquet-format#514).

What changes are included in this PR?

Adds needed thrift structures as well as NaN counts for pages and column chunks.

Are these changes tested?

Yes, new tests added (more may be needed).

Are there any user-facing changes?

Yes. This adds the IEEE_754_TOTAL_ORDER variant to the public ColumnOrder enum, and TOTAL_ORDER to the public SortOrder enum, which are technically breaking API changes. This also adds a nan_count argument to the public function ColumnIndexBuilder::append.

Non-breaking changes include adding nan_count fields to the ValueStatistics and ColumnIndex structs.

Behaviorally, this will now order all floating point statistics using IEEE754 total order, and all floating point columns will use the new IEEE_754_TOTAL_ORDER column order in the FileMetaData.column_orders list. Newer readers that recognize the new column order may now safely use the statistics for chunk and page pruning. Older readers will not recognize this column order and should continue to ignore the statistics.

@github-actions github-actions Bot added the parquet Changes to the parquet crate label Mar 26, 2026
@etseidl etseidl added the api-change Changes to the arrow API label Mar 26, 2026
// For floating point we need to compare NaN values until we encounter a non-NaN
// value which then becomes the new min/max. After this, only non-NaN values are
// evaluated. If all values are NaN, then the min/max NaNs as determined by
// IEEE 754 total order are returned.
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.

This has me a bit worried. I need to do some benchmarking to make sure all the complicated NaN logic isn't killing performance.

Copy link
Copy Markdown
Contributor

@jhorstmann jhorstmann Mar 30, 2026

Choose a reason for hiding this comment

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

Agree, this method is on the hot path. I had a look at optimizing it, but could not get the compiler to generate nice auto-vectorized code for nan-handling yet. I think we can try optimizations in a followup, it would be more important to get the semantics correct first and make sure there are tests for edge cases.

In that regard, about this requirement

If all values are NaN, then the min/max NaNs as determined by
// IEEE 754 total order are returned.

Does the current code correctly distinguish different NaN payloads according to their sign and bit patterns?

(Solved, github was hiding the changes to compare_greater in mod.rs)

Comment thread parquet/src/column/writer/mod.rs Outdated
@etseidl
Copy link
Copy Markdown
Contributor Author

etseidl commented Apr 3, 2026

Tests will fail until apache/parquet-testing#104 is merged.

@etseidl

This comment has been minimized.

@adriangbot

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 May 28, 2026

run benchmark arrow_writer

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4195303356-344-xk68c 6.12.68+ #1 SMP Wed Apr 1 02:23:28 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 total_order_514 (570f6de) to edfb9ab (merge-base) diff
BENCH_NAME=arrow_writer
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@alamb

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@alamb
Copy link
Copy Markdown
Contributor

alamb commented May 28, 2026

run benchmark arrow_writer

env:
  BENCH_FILTER: float

@adriangbot

This comment was marked as outdated.

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4564336715-346-6xtnc 6.12.68+ #1 SMP Wed Apr 1 02:23:28 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 total_order_514 (570f6de) to edfb9ab (merge-base) diff
BENCH_NAME=arrow_writer
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
BENCH_FILTER=float
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                             main                                   total_order_514
-----                             ----                                   ---------------
float_with_nans/bloom_filter      1.02    106.8±0.47ms   131.1 MB/sec    1.00    104.7±0.46ms   133.7 MB/sec
float_with_nans/cdc               1.00     82.1±0.17ms   170.5 MB/sec    1.01     82.9±0.18ms   168.9 MB/sec
float_with_nans/default           1.00     84.4±0.36ms   165.8 MB/sec    1.00     84.1±0.30ms   166.4 MB/sec
float_with_nans/parquet_2         1.00    105.1±0.31ms   133.2 MB/sec    1.00    104.8±0.45ms   133.6 MB/sec
float_with_nans/zstd              1.00    122.6±0.35ms   114.2 MB/sec    1.00    122.2±0.22ms   114.5 MB/sec
float_with_nans/zstd_parquet_2    1.00    142.3±0.36ms    98.4 MB/sec    1.00    142.1±0.38ms    98.5 MB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 110.0s
Peak memory 6.2 GiB
Avg memory 5.9 GiB
CPU user 98.1s
CPU sys 7.5s
Peak spill 0 B

branch

Metric Value
Wall time 105.0s
Peak memory 6.2 GiB
Avg memory 6.0 GiB
CPU user 97.4s
CPU sys 6.8s
Peak spill 0 B

File an issue against this benchmark runner

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 @etseidl -- I finished my review and i think the code was easy to follow, well tested and I thought overall (really) nice. Thank you 🙏

The only thing I am concerned about is that it seems to cause some slowdown on write, as shown by the benchmarks. This may be inevitable as we are now doing more work, but it would be great if we could sort that out and try and avoid regressions before we merged this

let nan_count = self.page_metrics.num_page_nans.unwrap_or(0);
match i64::try_from(nan_count) {
Ok(count) => Some(count),
_ => Some(i64::MAX),
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 probably ok -- another perhaps safer thing would be to return None if the value overflows i64

I doubt there is any actual dataset that has than i64::MAX values -- but I can imagine an invalid / adversarial input (or something that underflowed on the writer) could have such a value 🤷

Comment thread parquet/src/column/writer/mod.rs Outdated
fn test_ieee754_total_order_float_only_nan() {
// Test IEEE 754 total order for f32
// Order should be: -NaN < -Inf < -1.0 < -0.0 < +0.0 < 1.0 < +Inf < +NaN
let neg_nan1 = f32::from_bits(0xffc00000);
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.

TIL there are multiple encodings of NaN: https://en.wikipedia.org/wiki/NaN

Comment thread parquet/src/column/writer/mod.rs Outdated
#[test]
fn test_ieee754_total_order_float_only_nan() {
// Test IEEE 754 total order for f32
// Order should be: -NaN < -Inf < -1.0 < -0.0 < +0.0 < 1.0 < +Inf < +NaN
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 comment seems incorrect as the test is for different nan encodings

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.

Sorry, copy/paste leftovers. will fix

Comment thread parquet/src/basic.rs

/// Returns sort order for a physical/logical type.
///
/// `is_type_defined` indicates whether the column order for this type is
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.

Minor nit: why not just pass the actual ColumOrder enum (rather than a flag?) That would perhaps make the code more self documenting as well as allow extension in the future without breaking API changes

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.

There's kind of a chicken/egg thing going on here. TYPE_DEFINED_ORDER contains a SortOrder, which is not yet known when trying to create the ColumnOrder. I think this function should not be public, and instead SortOrder should be obtained via ColumnOrder::sort_order.

How do you feel about making this pub(crate)?

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.

Maybe a follow-up PR...I'd like to change the only other place this function is used in the crate and maybe make this private. Or deprecate this and move the guts into a private fn.

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.

Sounds good

}

#[test]
fn test_arrow_gh_47662() {
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.

Looks like this is a reasonable behavior for this file. Here is the issue

f16::from_f32(-5.),
f16::from_f32(-4.),
f16::from_f32(-0.),
f16::from_f32(0.),
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.

why change the tests? If the min really is -0 shouldn't that be reflected?

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.

The min actually is 0.0. TypeDefined ordering required replacing min==0.0 with -0.0. Total ordering removes that requirement.

f16::from_bits(0x8000),
];

fn validate_float16_metadata(
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.

It is unfortunate we have ~ 3 copies of the same code with slight differences. However the effort to macroize or template the thing t handle the different floating point types is probably not worth it

@alamb
Copy link
Copy Markdown
Contributor

alamb commented May 28, 2026

run benchmark arrow_writer

env:
  BENCH_FILTER: float

@alamb

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

@alamb
Copy link
Copy Markdown
Contributor

alamb commented May 28, 2026

run benchmark arrow_writer

env:
  BENCH_FILTER: list

@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                             main                                   total_order_514
-----                             ----                                   ---------------
float_with_nans/bloom_filter      1.00    105.0±0.38ms   133.4 MB/sec    1.00    104.7±0.77ms   133.7 MB/sec
float_with_nans/cdc               1.00     81.9±0.24ms   171.0 MB/sec    1.01     82.4±0.25ms   169.9 MB/sec
float_with_nans/default           1.00     83.2±0.59ms   168.3 MB/sec    1.00     83.3±0.44ms   168.0 MB/sec
float_with_nans/parquet_2         1.00    103.8±0.48ms   134.9 MB/sec    1.00    103.4±0.65ms   135.3 MB/sec
float_with_nans/zstd              1.00    121.5±0.39ms   115.2 MB/sec    1.00    121.6±0.35ms   115.2 MB/sec
float_with_nans/zstd_parquet_2    1.00    140.9±0.56ms    99.4 MB/sec    1.00    141.3±0.61ms    99.1 MB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 6.2 GiB
Avg memory 6.0 GiB
CPU user 97.4s
CPU sys 7.0s
Peak spill 0 B

branch

Metric Value
Wall time 105.0s
Peak memory 6.2 GiB
Avg memory 6.0 GiB
CPU user 97.3s
CPU sys 6.4s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

This comment was marked as outdated.

@alamb
Copy link
Copy Markdown
Contributor

alamb commented May 28, 2026

run benchmark arrow_writer

env:
BENCH_FILTER: float

@adriangbot
Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4564708478-349-ntzt6 6.12.68+ #1 SMP Wed Apr 1 02:23:28 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 total_order_514 (570f6de) to edfb9ab (merge-base) diff
BENCH_NAME=arrow_writer
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
BENCH_FILTER=float
Results will be posted here when complete


File an issue against this benchmark runner

alamb added a commit to alamb/datafusion-benchmarking that referenced this pull request May 28, 2026
It took me a little while to figure out how to do this (see the trail of disaster comments I left on apache/arrow-rs#9619)

Add instructions to the README for running specific benchmark suites with filters.
@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                             main                                   total_order_514
-----                             ----                                   ---------------
float_with_nans/bloom_filter      1.02    105.0±0.51ms   133.3 MB/sec    1.00    103.4±0.93ms   135.4 MB/sec
float_with_nans/cdc               1.00     82.1±0.16ms   170.6 MB/sec    1.01     83.0±0.25ms   168.7 MB/sec
float_with_nans/default           1.00     83.4±0.40ms   167.9 MB/sec    1.00     83.2±0.40ms   168.2 MB/sec
float_with_nans/parquet_2         1.05   109.4±24.90ms   128.0 MB/sec    1.00    103.9±0.53ms   134.7 MB/sec
float_with_nans/zstd              1.00    122.2±0.38ms   114.6 MB/sec    1.00    121.7±0.42ms   115.0 MB/sec
float_with_nans/zstd_parquet_2    1.01    142.9±0.47ms    98.0 MB/sec    1.00    141.7±0.81ms    98.8 MB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 110.0s
Peak memory 6.2 GiB
Avg memory 5.9 GiB
CPU user 98.1s
CPU sys 7.3s
Peak spill 0 B

branch

Metric Value
Wall time 105.0s
Peak memory 6.2 GiB
Avg memory 6.0 GiB
CPU user 97.2s
CPU sys 6.3s
Peak spill 0 B

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                                              main                                   total_order_514
-----                                              ----                                   ---------------
list_primitive/bloom_filter                        1.00    332.5±1.05ms  1640.4 MB/sec    1.09    363.0±1.32ms  1502.3 MB/sec
list_primitive/cdc                                 1.00    363.1±0.98ms  1501.8 MB/sec    1.02    371.7±8.47ms  1467.3 MB/sec
list_primitive/default                             1.00    254.8±1.14ms     2.1 GB/sec    1.13    287.5±1.68ms  1897.2 MB/sec
list_primitive/parquet_2                           1.00    277.9±0.63ms  1962.1 MB/sec    1.07    298.0±6.43ms  1829.9 MB/sec
list_primitive/zstd                                1.00    502.2±1.81ms  1085.9 MB/sec    1.05    526.7±2.00ms  1035.5 MB/sec
list_primitive/zstd_parquet_2                      1.00    501.5±0.41ms  1087.5 MB/sec    1.01    506.0±7.77ms  1077.8 MB/sec
list_primitive_non_null/bloom_filter               1.00    430.4±8.65ms  1264.6 MB/sec    1.00   429.6±17.84ms  1266.8 MB/sec
list_primitive_non_null/cdc                        1.02    435.8±9.10ms  1248.9 MB/sec    1.00    426.7±6.13ms  1275.4 MB/sec
list_primitive_non_null/default                    1.00   295.4±12.07ms  1842.5 MB/sec    1.02   301.0±16.02ms  1808.0 MB/sec
list_primitive_non_null/parquet_2                  1.00   312.2±26.80ms  1743.4 MB/sec    1.00   312.2±19.01ms  1743.2 MB/sec
list_primitive_non_null/zstd                       1.00    693.7±8.41ms   784.6 MB/sec    1.00   696.5±21.49ms   781.4 MB/sec
list_primitive_non_null/zstd_parquet_2             1.02    685.4±3.90ms   794.1 MB/sec    1.00    674.2±6.26ms   807.2 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     11.0±0.05ms     3.3 GB/sec    1.08     11.8±0.06ms     3.1 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     22.4±0.12ms  1666.9 MB/sec    1.03     23.2±0.10ms  1613.4 MB/sec
list_primitive_sparse_99pct_null/default           1.00     10.7±0.04ms     3.4 GB/sec    1.08     11.5±0.04ms     3.2 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     10.6±0.04ms     3.4 GB/sec    1.08     11.5±0.04ms     3.2 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     12.5±0.05ms     2.9 GB/sec    1.07     13.3±0.05ms     2.7 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     10.8±0.04ms     3.4 GB/sec    1.07     11.6±0.04ms     3.1 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 645.1s
Peak memory 6.6 GiB
Avg memory 6.4 GiB
CPU user 619.5s
CPU sys 23.0s
Peak spill 0 B

branch

Metric Value
Wall time 660.2s
Peak memory 6.6 GiB
Avg memory 6.3 GiB
CPU user 618.2s
CPU sys 39.4s
Peak spill 0 B

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                                              main                                   total_order_514
-----                                              ----                                   ---------------
bool/bloom_filter                                  1.06     13.3±0.15ms    18.8 MB/sec    1.00     12.6±0.02ms    19.9 MB/sec
bool/cdc                                           1.06     16.0±0.12ms    15.6 MB/sec    1.00     15.2±0.04ms    16.5 MB/sec
bool/default                                       1.07     11.2±0.14ms    22.3 MB/sec    1.00     10.5±0.04ms    23.8 MB/sec
bool/parquet_2                                     1.04     14.9±0.16ms    16.8 MB/sec    1.00     14.3±0.04ms    17.5 MB/sec
bool/zstd                                          1.06     11.7±0.12ms    21.3 MB/sec    1.00     11.0±0.03ms    22.7 MB/sec
bool/zstd_parquet_2                                1.04     15.3±0.14ms    16.4 MB/sec    1.00     14.8±0.04ms    16.9 MB/sec
bool_non_null/bloom_filter                         1.07      7.0±0.02ms    17.8 MB/sec    1.00      6.6±0.02ms    19.0 MB/sec
bool_non_null/cdc                                  1.07      6.8±0.03ms    18.3 MB/sec    1.00      6.4±0.03ms    19.6 MB/sec
bool_non_null/default                              1.12      4.3±0.02ms    29.1 MB/sec    1.00      3.9±0.02ms    32.5 MB/sec
bool_non_null/parquet_2                            1.04      9.0±0.02ms    13.9 MB/sec    1.00      8.6±0.03ms    14.5 MB/sec
bool_non_null/zstd                                 1.11      4.6±0.02ms    26.9 MB/sec    1.00      4.2±0.02ms    29.8 MB/sec
bool_non_null/zstd_parquet_2                       1.04      9.4±0.03ms    13.3 MB/sec    1.00      9.0±0.04ms    13.8 MB/sec
float_with_nans/bloom_filter                       1.00     92.4±0.30ms   151.5 MB/sec    1.01     93.5±0.35ms   149.7 MB/sec
float_with_nans/cdc                                1.00     81.4±0.15ms   172.0 MB/sec    1.00     81.5±0.20ms   171.8 MB/sec
float_with_nans/default                            1.00     74.1±0.14ms   188.9 MB/sec    1.01     74.7±0.32ms   187.5 MB/sec
float_with_nans/parquet_2                          1.00     94.5±0.26ms   148.2 MB/sec    1.01     95.1±0.48ms   147.2 MB/sec
float_with_nans/zstd                               1.00    112.1±0.37ms   124.8 MB/sec    1.00    112.0±0.32ms   125.0 MB/sec
float_with_nans/zstd_parquet_2                     1.00    131.6±0.55ms   106.4 MB/sec    1.00    132.1±0.38ms   106.0 MB/sec
list_primitive/bloom_filter                        1.03    344.4±0.85ms  1583.6 MB/sec    1.00    334.0±1.19ms  1632.7 MB/sec
list_primitive/cdc                                 1.01    370.9±4.19ms  1470.3 MB/sec    1.00    366.4±1.42ms  1488.3 MB/sec
list_primitive/default                             1.04    265.8±2.08ms     2.0 GB/sec    1.00    254.9±1.09ms     2.1 GB/sec
list_primitive/parquet_2                           1.04    286.8±0.61ms  1901.3 MB/sec    1.00    275.2±0.37ms  1981.6 MB/sec
list_primitive/zstd                                1.01    511.1±1.95ms  1067.0 MB/sec    1.00    505.2±0.67ms  1079.6 MB/sec
list_primitive/zstd_parquet_2                      1.00    499.2±0.38ms  1092.5 MB/sec    1.00    499.1±0.29ms  1092.7 MB/sec
list_primitive_non_null/bloom_filter               1.06    439.4±7.70ms  1238.7 MB/sec    1.00    416.0±4.34ms  1308.2 MB/sec
list_primitive_non_null/cdc                        1.01   441.5±10.55ms  1232.7 MB/sec    1.00    438.1±8.89ms  1242.1 MB/sec
list_primitive_non_null/default                    1.08    306.4±7.96ms  1776.5 MB/sec    1.00    283.9±2.85ms  1916.9 MB/sec
list_primitive_non_null/parquet_2                  1.07    341.3±0.46ms  1594.6 MB/sec    1.00    319.8±0.61ms  1701.6 MB/sec
list_primitive_non_null/zstd                       1.01   712.0±15.97ms   764.4 MB/sec    1.00    703.9±9.30ms   773.2 MB/sec
list_primitive_non_null/zstd_parquet_2             1.01    692.1±9.08ms   786.4 MB/sec    1.00    687.2±0.52ms   791.9 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     11.0±0.07ms     3.3 GB/sec    1.08     11.8±0.06ms     3.1 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     22.3±0.07ms  1677.1 MB/sec    1.04     23.2±0.06ms  1610.3 MB/sec
list_primitive_sparse_99pct_null/default           1.00     10.7±0.23ms     3.4 GB/sec    1.08     11.5±0.02ms     3.2 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     10.7±0.04ms     3.4 GB/sec    1.08     11.5±0.02ms     3.2 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     12.5±0.03ms     2.9 GB/sec    1.07     13.3±0.04ms     2.7 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     10.8±0.03ms     3.4 GB/sec    1.08     11.7±0.03ms     3.1 GB/sec
primitive/bloom_filter                             1.03    150.4±0.72ms   298.4 MB/sec    1.00    145.5±0.40ms   308.5 MB/sec
primitive/cdc                                      1.04    160.9±0.67ms   278.9 MB/sec    1.00    154.4±0.52ms   290.6 MB/sec
primitive/default                                  1.06    120.5±0.81ms   372.4 MB/sec    1.00    113.6±0.28ms   395.1 MB/sec
primitive/parquet_2                                1.05    134.7±0.65ms   333.2 MB/sec    1.00    128.1±0.24ms   350.2 MB/sec
primitive/zstd                                     1.04    149.3±0.61ms   300.6 MB/sec    1.00    142.9±0.31ms   314.0 MB/sec
primitive/zstd_parquet_2                           1.04    168.0±0.69ms   267.1 MB/sec    1.00    161.3±0.20ms   278.1 MB/sec
primitive_all_null/bloom_filter                    1.00    893.2±1.22µs    49.1 GB/sec    1.01    903.2±2.00µs    48.5 GB/sec
primitive_all_null/cdc                             1.00     19.2±0.45ms     2.3 GB/sec    1.01     19.4±0.42ms     2.3 GB/sec
primitive_all_null/default                         1.00    273.6±0.68µs   160.2 GB/sec    1.03    280.5±2.31µs   156.2 GB/sec
primitive_all_null/parquet_2                       1.00    279.8±1.19µs   156.6 GB/sec    1.01    283.3±1.69µs   154.7 GB/sec
primitive_all_null/zstd                            1.00    386.8±0.92µs   113.3 GB/sec    1.03    397.0±2.46µs   110.4 GB/sec
primitive_all_null/zstd_parquet_2                  1.00    355.5±1.55µs   123.3 GB/sec    1.02    362.7±1.36µs   120.8 GB/sec
primitive_non_null/bloom_filter                    1.00    104.7±0.28ms   420.4 MB/sec    1.02    106.9±2.08ms   411.5 MB/sec
primitive_non_null/cdc                             1.06     89.5±0.28ms   491.4 MB/sec    1.00     84.1±0.29ms   523.4 MB/sec
primitive_non_null/default                         1.09     66.7±0.20ms   659.8 MB/sec    1.00     61.4±0.15ms   716.4 MB/sec
primitive_non_null/parquet_2                       1.06     88.3±0.24ms   498.0 MB/sec    1.00     83.4±0.19ms   527.5 MB/sec
primitive_non_null/zstd                            1.04    103.5±0.91ms   425.3 MB/sec    1.00     99.1±0.24ms   444.1 MB/sec
primitive_non_null/zstd_parquet_2                  1.04    127.6±2.39ms   344.8 MB/sec    1.00    122.9±2.20ms   357.9 MB/sec
primitive_sparse_99pct_null/bloom_filter           1.01     12.1±0.09ms     3.6 GB/sec    1.00     12.0±0.06ms     3.7 GB/sec
primitive_sparse_99pct_null/cdc                    1.00     30.3±0.34ms  1478.9 MB/sec    1.00     30.3±0.37ms  1482.6 MB/sec
primitive_sparse_99pct_null/default                1.00     10.6±0.06ms     4.1 GB/sec    1.00     10.6±0.03ms     4.2 GB/sec
primitive_sparse_99pct_null/parquet_2              1.00     10.6±0.04ms     4.1 GB/sec    1.00     10.6±0.03ms     4.1 GB/sec
primitive_sparse_99pct_null/zstd                   1.00     13.9±0.05ms     3.2 GB/sec    1.00     13.9±0.03ms     3.2 GB/sec
primitive_sparse_99pct_null/zstd_parquet_2         1.00     12.5±0.09ms     3.5 GB/sec    1.00     12.5±0.04ms     3.5 GB/sec
string/bloom_filter                                1.00   211.1±16.57ms     2.4 GB/sec    1.02   214.5±16.80ms     2.4 GB/sec
string/cdc                                         1.00    219.4±6.01ms     2.3 GB/sec    1.00    220.1±2.74ms     2.3 GB/sec
string/default                                     1.03   133.3±20.54ms     3.8 GB/sec    1.00   129.3±17.86ms     4.0 GB/sec
string/parquet_2                                   1.40    150.5±0.52ms     3.4 GB/sec    1.00    107.6±2.10ms     4.8 GB/sec
string/zstd                                        1.08   451.9±17.58ms  1160.2 MB/sec    1.00    417.4±0.55ms  1255.9 MB/sec
string/zstd_parquet_2                              1.01    399.6±8.36ms  1311.8 MB/sec    1.00    395.2±0.55ms  1326.7 MB/sec
string_and_binary_view/bloom_filter                1.00     64.4±0.38ms   500.7 MB/sec    1.00     64.5±0.24ms   499.7 MB/sec
string_and_binary_view/cdc                         1.00     59.3±0.30ms   544.2 MB/sec    1.00     59.2±0.14ms   544.5 MB/sec
string_and_binary_view/default                     1.01     48.5±0.23ms   664.8 MB/sec    1.00     48.1±0.13ms   671.0 MB/sec
string_and_binary_view/parquet_2                   1.01     59.7±0.32ms   540.6 MB/sec    1.00     59.0±0.12ms   546.2 MB/sec
string_and_binary_view/zstd                        1.01     85.2±0.26ms   378.6 MB/sec    1.00     84.7±0.12ms   380.7 MB/sec
string_and_binary_view/zstd_parquet_2              1.01     73.5±0.31ms   438.8 MB/sec    1.00     73.0±0.17ms   441.8 MB/sec
string_dictionary/bloom_filter                     1.01     91.5±0.78ms     2.8 GB/sec    1.00     90.4±0.13ms     2.9 GB/sec
string_dictionary/cdc                              1.00     52.3±1.11ms     4.9 GB/sec    1.02     53.6±0.70ms     4.8 GB/sec
string_dictionary/default                          1.00     48.6±0.59ms     5.3 GB/sec    1.00     48.7±0.11ms     5.3 GB/sec
string_dictionary/parquet_2                        1.00     54.2±0.21ms     4.8 GB/sec    1.00     54.5±0.12ms     4.7 GB/sec
string_dictionary/zstd                             1.00    209.8±1.25ms  1259.1 MB/sec    1.00    209.4±0.22ms  1261.1 MB/sec
string_dictionary/zstd_parquet_2                   1.00    198.9±0.22ms  1327.8 MB/sec    1.00    199.4±0.27ms  1324.6 MB/sec
string_non_null/bloom_filter                       1.00   257.2±15.51ms  2037.5 MB/sec    1.02   263.6±15.87ms  1988.1 MB/sec
string_non_null/cdc                                1.00    273.8±8.33ms  1914.0 MB/sec    1.01   275.3±11.19ms  1903.4 MB/sec
string_non_null/default                            1.01   143.8±14.77ms     3.6 GB/sec    1.00   142.5±13.65ms     3.6 GB/sec
string_non_null/parquet_2                          1.05    149.3±0.50ms     3.4 GB/sec    1.00    141.8±5.92ms     3.6 GB/sec
string_non_null/zstd                               1.05    568.0±6.61ms   922.5 MB/sec    1.00    540.2±2.05ms   970.0 MB/sec
string_non_null/zstd_parquet_2                     1.02    519.9±7.61ms  1008.0 MB/sec    1.00    510.8±6.66ms  1025.9 MB/sec
struct_all_null/bloom_filter                       1.00    375.3±1.62µs    42.0 GB/sec    1.01    378.8±1.21µs    41.6 GB/sec
struct_all_null/cdc                                1.00      7.8±0.13ms     2.0 GB/sec    1.01      7.9±0.15ms  2046.0 MB/sec
struct_all_null/default                            1.00    119.8±0.42µs   131.5 GB/sec    1.01    121.2±0.98µs   129.9 GB/sec
struct_all_null/parquet_2                          1.00    120.6±0.54µs   130.6 GB/sec    1.01    121.7±0.56µs   129.4 GB/sec
struct_all_null/zstd                               1.00    165.1±0.60µs    95.4 GB/sec    1.03    169.5±0.96µs    92.9 GB/sec
struct_all_null/zstd_parquet_2                     1.00    153.0±1.05µs   102.9 GB/sec    1.02    155.4±0.45µs   101.3 GB/sec
struct_non_null/bloom_filter                       1.07     47.0±0.13ms   340.5 MB/sec    1.00     43.9±0.13ms   364.8 MB/sec
struct_non_null/cdc                                1.08     46.0±0.31ms   348.1 MB/sec    1.00     42.4±0.16ms   377.0 MB/sec
struct_non_null/default                            1.12     32.3±0.14ms   495.4 MB/sec    1.00     28.9±0.11ms   552.9 MB/sec
struct_non_null/parquet_2                          1.08     40.9±0.13ms   391.4 MB/sec    1.00     37.7±0.09ms   424.3 MB/sec
struct_non_null/zstd                               1.09     41.0±0.12ms   389.9 MB/sec    1.00     37.7±0.11ms   424.5 MB/sec
struct_non_null/zstd_parquet_2                     1.06     54.9±0.12ms   291.3 MB/sec    1.00     51.8±0.12ms   308.9 MB/sec
struct_sparse_99pct_null/bloom_filter              1.05      6.8±0.03ms     2.3 GB/sec    1.00      6.5±0.03ms     2.4 GB/sec
struct_sparse_99pct_null/cdc                       1.03     14.4±0.33ms  1122.9 MB/sec    1.00     13.9±0.08ms  1161.0 MB/sec
struct_sparse_99pct_null/default                   1.06      6.2±0.01ms     2.5 GB/sec    1.00      5.9±0.02ms     2.7 GB/sec
struct_sparse_99pct_null/parquet_2                 1.06      6.3±0.02ms     2.5 GB/sec    1.00      5.9±0.01ms     2.7 GB/sec
struct_sparse_99pct_null/zstd                      1.05      7.6±0.02ms     2.1 GB/sec    1.00      7.2±0.01ms     2.2 GB/sec
struct_sparse_99pct_null/zstd_parquet_2            1.05      7.0±0.02ms     2.2 GB/sec    1.00      6.6±0.01ms     2.4 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 1945.4s
Peak memory 6.6 GiB
Avg memory 6.3 GiB
CPU user 1867.1s
CPU sys 77.1s
Peak spill 0 B

branch

Metric Value
Wall time 1910.4s
Peak memory 6.6 GiB
Avg memory 6.4 GiB
CPU user 1858.9s
CPU sys 48.6s
Peak spill 0 B

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                                              main                                   total_order_514
-----                                              ----                                   ---------------
bool/bloom_filter                                  1.03     13.0±0.04ms    19.3 MB/sec    1.00     12.6±0.05ms    19.8 MB/sec
bool/cdc                                           1.03     15.7±0.05ms    16.0 MB/sec    1.00     15.2±0.06ms    16.4 MB/sec
bool/default                                       1.03     10.9±0.04ms    23.0 MB/sec    1.00     10.5±0.04ms    23.8 MB/sec
bool/parquet_2                                     1.02     14.6±0.04ms    17.2 MB/sec    1.00     14.3±0.05ms    17.5 MB/sec
bool/zstd                                          1.03     11.4±0.04ms    21.9 MB/sec    1.00     11.1±0.05ms    22.5 MB/sec
bool/zstd_parquet_2                                1.02     15.0±0.04ms    16.7 MB/sec    1.00     14.7±0.05ms    17.0 MB/sec
bool_non_null/bloom_filter                         1.07      7.1±0.02ms    17.6 MB/sec    1.00      6.6±0.02ms    19.0 MB/sec
bool_non_null/cdc                                  1.07      6.8±0.03ms    18.3 MB/sec    1.00      6.4±0.03ms    19.5 MB/sec
bool_non_null/default                              1.12      4.3±0.02ms    29.1 MB/sec    1.00      3.8±0.02ms    32.5 MB/sec
bool_non_null/parquet_2                            1.04      9.0±0.02ms    13.9 MB/sec    1.00      8.6±0.03ms    14.5 MB/sec
bool_non_null/zstd                                 1.11      4.6±0.02ms    26.9 MB/sec    1.00      4.2±0.02ms    29.9 MB/sec
bool_non_null/zstd_parquet_2                       1.04      9.4±0.03ms    13.3 MB/sec    1.00      9.0±0.04ms    13.8 MB/sec
float_with_nans/bloom_filter                       1.00     93.7±0.43ms   149.4 MB/sec    1.04     97.2±1.54ms   144.0 MB/sec
float_with_nans/cdc                                1.00     81.7±0.17ms   171.4 MB/sec    1.02     83.4±1.30ms   167.9 MB/sec
float_with_nans/default                            1.00     74.6±0.13ms   187.7 MB/sec    1.01     75.0±0.38ms   186.7 MB/sec
float_with_nans/parquet_2                          1.00     95.1±0.40ms   147.3 MB/sec    1.03     98.3±1.40ms   142.4 MB/sec
float_with_nans/zstd                               1.00    112.1±0.14ms   124.9 MB/sec    1.02    114.5±1.11ms   122.2 MB/sec
float_with_nans/zstd_parquet_2                     1.00    131.9±0.23ms   106.1 MB/sec    1.03    136.1±1.46ms   102.9 MB/sec
list_primitive/bloom_filter                        1.00    333.9±1.20ms  1633.2 MB/sec    1.05    349.2±2.83ms  1562.0 MB/sec
list_primitive/cdc                                 1.00    367.1±1.58ms  1485.6 MB/sec    1.01    370.5±2.45ms  1471.9 MB/sec
list_primitive/default                             1.00    255.5±1.63ms     2.1 GB/sec    1.05    269.0±2.89ms  2027.4 MB/sec
list_primitive/parquet_2                           1.00    277.7±0.41ms  1963.8 MB/sec    1.02    283.5±2.06ms  1923.8 MB/sec
list_primitive/zstd                                1.00    506.8±2.02ms  1076.0 MB/sec    1.00    504.8±2.18ms  1080.4 MB/sec
list_primitive/zstd_parquet_2                      1.00    500.8±0.37ms  1089.0 MB/sec    1.00    500.2±2.51ms  1090.3 MB/sec
list_primitive_non_null/bloom_filter               1.00   397.6±39.58ms  1368.9 MB/sec    1.09    433.4±8.71ms  1255.7 MB/sec
list_primitive_non_null/cdc                        1.00    439.8±6.81ms  1237.3 MB/sec    1.00    438.1±7.55ms  1242.4 MB/sec
list_primitive_non_null/default                    1.00    261.8±3.76ms     2.0 GB/sec    1.14    297.6±8.13ms  1828.7 MB/sec
list_primitive_non_null/parquet_2                  1.00    293.3±1.71ms  1855.3 MB/sec    1.07    314.6±1.79ms  1730.1 MB/sec
list_primitive_non_null/zstd                       1.00    690.0±4.50ms   788.8 MB/sec    1.04   717.9±11.72ms   758.1 MB/sec
list_primitive_non_null/zstd_parquet_2             1.00    670.3±0.95ms   812.0 MB/sec    1.05   701.4±11.29ms   776.0 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     11.0±0.05ms     3.3 GB/sec    1.09     12.0±0.04ms     3.1 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     22.4±0.10ms  1666.3 MB/sec    1.04     23.3±0.10ms  1606.9 MB/sec
list_primitive_sparse_99pct_null/default           1.00     10.6±0.04ms     3.4 GB/sec    1.09     11.6±0.04ms     3.2 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     10.7±0.06ms     3.4 GB/sec    1.09     11.7±0.05ms     3.1 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     12.5±0.05ms     2.9 GB/sec    1.07     13.4±0.04ms     2.7 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     10.8±0.06ms     3.4 GB/sec    1.09     11.8±0.04ms     3.1 GB/sec
primitive/bloom_filter                             1.03    150.2±0.42ms   298.7 MB/sec    1.00    146.0±0.49ms   307.3 MB/sec
primitive/cdc                                      1.03    158.9±0.49ms   282.5 MB/sec    1.00    154.8±0.55ms   289.9 MB/sec
primitive/default                                  1.04    117.8±0.29ms   380.9 MB/sec    1.00    113.5±0.34ms   395.4 MB/sec
primitive/parquet_2                                1.03    132.8±0.32ms   338.0 MB/sec    1.00    128.4±0.29ms   349.4 MB/sec
primitive/zstd                                     1.03    147.5±0.29ms   304.3 MB/sec    1.00    143.1±0.32ms   313.7 MB/sec
primitive/zstd_parquet_2                           1.03    166.2±0.28ms   270.0 MB/sec    1.00    161.9±0.39ms   277.1 MB/sec
primitive_all_null/bloom_filter                    1.00    892.6±1.98µs    49.1 GB/sec    1.02    913.6±2.99µs    48.0 GB/sec
primitive_all_null/cdc                             1.00     19.1±0.42ms     2.3 GB/sec    1.00     19.2±0.28ms     2.3 GB/sec
primitive_all_null/default                         1.00    276.4±0.89µs   158.5 GB/sec    1.02    281.6±2.40µs   155.6 GB/sec
primitive_all_null/parquet_2                       1.00    280.3±1.09µs   156.4 GB/sec    1.01    283.7±1.71µs   154.5 GB/sec
primitive_all_null/zstd                            1.00    388.5±1.19µs   112.8 GB/sec    1.02    397.5±2.62µs   110.3 GB/sec
primitive_all_null/zstd_parquet_2                  1.00    356.8±0.99µs   122.8 GB/sec    1.02    362.7±1.55µs   120.8 GB/sec
primitive_non_null/bloom_filter                    1.00    108.0±0.54ms   407.6 MB/sec    1.00    108.2±2.31ms   406.6 MB/sec
primitive_non_null/cdc                             1.08     90.9±0.29ms   483.9 MB/sec    1.00     84.2±0.34ms   522.5 MB/sec
primitive_non_null/default                         1.10     68.1±2.54ms   646.2 MB/sec    1.00     61.7±0.23ms   712.6 MB/sec
primitive_non_null/parquet_2                       1.07     89.1±0.22ms   493.6 MB/sec    1.00     83.4±0.27ms   527.5 MB/sec
primitive_non_null/zstd                            1.05    104.7±0.96ms   420.1 MB/sec    1.00    100.0±0.60ms   440.1 MB/sec
primitive_non_null/zstd_parquet_2                  1.04    129.4±2.74ms   340.2 MB/sec    1.00    124.3±2.61ms   354.0 MB/sec
primitive_sparse_99pct_null/bloom_filter           1.00     12.1±0.10ms     3.6 GB/sec    1.00     12.1±0.07ms     3.6 GB/sec
primitive_sparse_99pct_null/cdc                    1.01     30.5±0.31ms  1469.7 MB/sec    1.00     30.4±0.26ms  1477.8 MB/sec
primitive_sparse_99pct_null/default                1.01     10.7±0.05ms     4.1 GB/sec    1.00     10.6±0.04ms     4.1 GB/sec
primitive_sparse_99pct_null/parquet_2              1.00     10.6±0.05ms     4.1 GB/sec    1.00     10.6±0.04ms     4.1 GB/sec
primitive_sparse_99pct_null/zstd                   1.00     13.9±0.07ms     3.1 GB/sec    1.00     13.9±0.06ms     3.1 GB/sec
primitive_sparse_99pct_null/zstd_parquet_2         1.01     12.7±0.08ms     3.4 GB/sec    1.00     12.6±0.05ms     3.5 GB/sec
string/bloom_filter                                1.00   216.6±19.97ms     2.4 GB/sec    1.05   226.8±24.26ms     2.3 GB/sec
string/cdc                                         1.00    220.2±4.78ms     2.3 GB/sec    1.02    224.3±3.83ms     2.3 GB/sec
string/default                                     1.00   124.4±20.76ms     4.1 GB/sec    1.02   127.2±19.44ms     4.0 GB/sec
string/parquet_2                                   1.00    111.7±6.93ms     4.6 GB/sec    1.06    118.3±1.03ms     4.3 GB/sec
string/zstd                                        1.00    415.6±1.97ms  1261.5 MB/sec    1.09   453.7±18.29ms  1155.4 MB/sec
string/zstd_parquet_2                              1.01    402.7±6.81ms  1301.7 MB/sec    1.00    397.4±0.43ms  1319.2 MB/sec
string_and_binary_view/bloom_filter                1.00     63.7±0.19ms   505.9 MB/sec    1.06     67.5±0.31ms   477.6 MB/sec
string_and_binary_view/cdc                         1.00     58.4±0.12ms   551.9 MB/sec    1.02     59.7±0.14ms   540.4 MB/sec
string_and_binary_view/default                     1.00     47.7±0.10ms   676.2 MB/sec    1.03     48.9±0.13ms   658.8 MB/sec
string_and_binary_view/parquet_2                   1.00     58.9±0.10ms   547.4 MB/sec    1.02     59.9±0.18ms   538.3 MB/sec
string_and_binary_view/zstd                        1.00     84.3±0.12ms   382.5 MB/sec    1.02     86.0±0.39ms   375.0 MB/sec
string_and_binary_view/zstd_parquet_2              1.00     72.9±0.16ms   442.7 MB/sec    1.02     74.0±0.31ms   435.8 MB/sec
string_dictionary/bloom_filter                     1.00     91.5±1.01ms     2.8 GB/sec    1.04     94.7±0.36ms     2.7 GB/sec
string_dictionary/cdc                              1.00     52.6±0.95ms     4.9 GB/sec    1.04     54.7±0.48ms     4.7 GB/sec
string_dictionary/default                          1.00     46.5±0.80ms     5.5 GB/sec    1.08     50.2±0.60ms     5.1 GB/sec
string_dictionary/parquet_2                        1.00     54.1±0.20ms     4.8 GB/sec    1.01     54.5±0.41ms     4.7 GB/sec
string_dictionary/zstd                             1.00    209.2±1.49ms  1262.8 MB/sec    1.01    212.3±0.55ms  1244.3 MB/sec
string_dictionary/zstd_parquet_2                   1.00    198.4±0.25ms  1331.3 MB/sec    1.01    200.1±0.29ms  1319.9 MB/sec
string_non_null/bloom_filter                       1.00   250.5±14.02ms     2.0 GB/sec    1.03   259.1±12.43ms  2022.4 MB/sec
string_non_null/cdc                                1.00    265.5±2.99ms  1973.8 MB/sec    1.05    279.3±9.77ms  1876.4 MB/sec
string_non_null/default                            1.00   136.2±12.34ms     3.8 GB/sec    1.04   141.7±11.62ms     3.6 GB/sec
string_non_null/parquet_2                          1.00    130.8±2.91ms     3.9 GB/sec    1.06    139.2±6.79ms     3.7 GB/sec
string_non_null/zstd                               1.00    534.4±2.39ms   980.5 MB/sec    1.01    540.2±1.28ms   970.1 MB/sec
string_non_null/zstd_parquet_2                     1.00    504.4±0.64ms  1038.9 MB/sec    1.03    517.4±7.81ms  1012.7 MB/sec
struct_all_null/bloom_filter                       1.00    374.8±1.31µs    42.0 GB/sec    1.02    382.2±1.24µs    41.2 GB/sec
struct_all_null/cdc                                1.01      7.9±0.12ms  2043.0 MB/sec    1.00      7.8±0.08ms     2.0 GB/sec
struct_all_null/default                            1.00    118.9±0.38µs   132.4 GB/sec    1.02    121.6±1.08µs   129.5 GB/sec
struct_all_null/parquet_2                          1.00    120.6±0.41µs   130.6 GB/sec    1.02    122.5±0.59µs   128.5 GB/sec
struct_all_null/zstd                               1.00    165.3±0.79µs    95.3 GB/sec    1.03    170.5±1.05µs    92.4 GB/sec
struct_all_null/zstd_parquet_2                     1.00    152.9±0.54µs   103.0 GB/sec    1.02    155.9±0.65µs   101.0 GB/sec
struct_non_null/bloom_filter                       1.04     46.6±0.19ms   343.5 MB/sec    1.00     44.9±0.14ms   356.4 MB/sec
struct_non_null/cdc                                1.06     45.5±0.13ms   351.5 MB/sec    1.00     42.8±0.24ms   374.2 MB/sec
struct_non_null/default                            1.10     32.0±0.14ms   500.6 MB/sec    1.00     29.1±0.08ms   549.1 MB/sec
struct_non_null/parquet_2                          1.08     40.7±0.13ms   393.0 MB/sec    1.00     37.9±0.10ms   422.6 MB/sec
struct_non_null/zstd                               1.08     40.9±0.13ms   391.0 MB/sec    1.00     38.0±0.09ms   421.6 MB/sec
struct_non_null/zstd_parquet_2                     1.06     55.0±0.14ms   291.1 MB/sec    1.00     52.1±0.25ms   307.2 MB/sec
struct_sparse_99pct_null/bloom_filter              1.04      6.8±0.03ms     2.3 GB/sec    1.00      6.5±0.02ms     2.4 GB/sec
struct_sparse_99pct_null/cdc                       1.04     14.4±0.07ms  1116.1 MB/sec    1.00     13.9±0.07ms  1162.0 MB/sec
struct_sparse_99pct_null/default                   1.06      6.2±0.02ms     2.5 GB/sec    1.00      5.9±0.02ms     2.7 GB/sec
struct_sparse_99pct_null/parquet_2                 1.06      6.3±0.02ms     2.5 GB/sec    1.00      5.9±0.02ms     2.7 GB/sec
struct_sparse_99pct_null/zstd                      1.05      7.6±0.02ms     2.1 GB/sec    1.00      7.3±0.02ms     2.2 GB/sec
struct_sparse_99pct_null/zstd_parquet_2            1.05      7.0±0.03ms     2.2 GB/sec    1.00      6.7±0.02ms     2.4 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 1915.4s
Peak memory 6.6 GiB
Avg memory 6.4 GiB
CPU user 1881.1s
CPU sys 32.5s
Peak spill 0 B

branch

Metric Value
Wall time 1925.4s
Peak memory 6.6 GiB
Avg memory 6.3 GiB
CPU user 1860.0s
CPU sys 60.4s
Peak spill 0 B

File an issue against this benchmark runner

@alamb
Copy link
Copy Markdown
Contributor

alamb commented May 28, 2026

The only thing that looks suspicious is some of the list_primitive_non_null benchmarks:

list_primitive_non_null/bloom_filter               1.00   397.6±39.58ms  1368.9 MB/sec    1.09    433.4±8.71ms  1255.7 MB/sec
list_primitive_non_null/cdc                        1.00    439.8±6.81ms  1237.3 MB/sec    1.00    438.1±7.55ms  1242.4 MB/sec
list_primitive_non_null/default                    1.00    261.8±3.76ms     2.0 GB/sec    1.14    297.6±8.13ms  1828.7 MB/sec
list_primitive_non_null/parquet_2                  1.00    293.3±1.71ms  1855.3 MB/sec    1.07    314.6±1.79ms  1730.1 MB/sec
list_primitive_non_null/zstd                       1.00    690.0±4.50ms   788.8 MB/sec    1.04   717.9±11.72ms   758.1 MB/sec
list_primitive_non_null/zstd_parquet_2             1.00    670.3±0.95ms   812.0 MB/sec    1.05   701.4±11.29ms   776.0 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     11.0±0.05ms     3.3 GB/sec    1.09     12.0±0.04ms     3.1 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     22.4±0.10ms  1666.3 MB/sec    1.04     23.3±0.10ms  1606.9 MB/sec
list_primitive_sparse_99pct_null/default           1.00     10.6±0.04ms     3.4 GB/sec    1.09     11.6±0.04ms     3.2 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     10.7±0.06ms     3.4 GB/sec    1.09     11.7±0.05ms     3.1 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     12.5±0.05ms     2.9 GB/sec    1.07     13.4±0.04ms     2.7 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     10.8±0.06ms     3.4 GB/sec    1.09     11.8±0.04ms     3.1 GB/sec

However I think @HippoBaro also saw some potential strangeness with those runs, so maybe it is a measurement thing

@etseidl
Copy link
Copy Markdown
Contributor Author

etseidl commented May 28, 2026

However I think @HippoBaro also saw some potential strangeness with those runs, so maybe it is a measurement thing

Indeed. From #9619 (comment)

list_primitive/bloom_filter                        1.03    344.4±0.85ms  1583.6 MB/sec    1.00    334.0±1.19ms  1632.7 MB/sec
list_primitive/cdc                                 1.01    370.9±4.19ms  1470.3 MB/sec    1.00    366.4±1.42ms  1488.3 MB/sec
list_primitive/default                             1.04    265.8±2.08ms     2.0 GB/sec    1.00    254.9±1.09ms     2.1 GB/sec
list_primitive/parquet_2                           1.04    286.8±0.61ms  1901.3 MB/sec    1.00    275.2±0.37ms  1981.6 MB/sec
list_primitive/zstd                                1.01    511.1±1.95ms  1067.0 MB/sec    1.00    505.2±0.67ms  1079.6 MB/sec
list_primitive/zstd_parquet_2                      1.00    499.2±0.38ms  1092.5 MB/sec    1.00    499.1±0.29ms  1092.7 MB/sec
list_primitive_non_null/bloom_filter               1.06    439.4±7.70ms  1238.7 MB/sec    1.00    416.0±4.34ms  1308.2 MB/sec
list_primitive_non_null/cdc                        1.01   441.5±10.55ms  1232.7 MB/sec    1.00    438.1±8.89ms  1242.1 MB/sec
list_primitive_non_null/default                    1.08    306.4±7.96ms  1776.5 MB/sec    1.00    283.9±2.85ms  1916.9 MB/sec
list_primitive_non_null/parquet_2                  1.07    341.3±0.46ms  1594.6 MB/sec    1.00    319.8±0.61ms  1701.6 MB/sec
list_primitive_non_null/zstd                       1.01   712.0±15.97ms   764.4 MB/sec    1.00    703.9±9.30ms   773.2 MB/sec
list_primitive_non_null/zstd_parquet_2             1.01    692.1±9.08ms   786.4 MB/sec    1.00    687.2±0.52ms   791.9 MB/sec

@etseidl
Copy link
Copy Markdown
Contributor Author

etseidl commented May 28, 2026

I finished my review and i think the code was easy to follow, well tested and I thought overall (really) nice. Thank you 🙏

Shout out to @Xuanwo who wrote all of the nan_count handling. I wouldn't have had the motivation to implement this without his contribution.

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

Labels

api-change Changes to the arrow API parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Parquet] Implement PARQUET-2249: Introduce IEEE 754 total order & NaN-counts #514

4 participants