Skip to content

Prefetch Parquet row groups with a bounded I/O budget - #23492

Open
Dandandan wants to merge 3 commits into
apache:mainfrom
Dandandan:codex/parquet-pushdecoder-prefetch
Open

Prefetch Parquet row groups with a bounded I/O budget#23492
Dandandan wants to merge 3 commits into
apache:mainfrom
Dandandan:codex/parquet-pushdecoder-prefetch

Conversation

@Dandandan

@Dandandan Dandandan commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Sequential Parquet row-group reads are expensive when object-store requests have meaningful latency. Batching projected ranges can hide much of that latency without eagerly decoding data.

What changes are included in this PR?

  • Add an optional datafusion.execution.parquet.prefetch_size byte budget, disabled by default.
  • Prefetch complete projected row groups through the push decoder while accounting for bytes already buffered.
  • Keep prefetching I/O-only; decoding remains lazy and required reads are never constrained by the budget.
  • Add tests, configuration/protobuf support, documentation, and full per-query benchmark results.

Results

In the picture you can see it gives a 1.5-2x or more (up to 6x) on several TPC-H / Clickbench queries without really regressing anything (the regressions that show up are s3 variance - I only ran the suite x3 to average it somewhat but tail S3 latency is very high.

This is tested on a 16 core AWS CPU (5-15 Gbps) node with data in S3.

(Image rendered / generated using Claude - I checked/verified the numbers).

prefetch-light

On a 20 MiB budget, simulated object-store latency is 2-3x (see results brlow).

With latency disabled, performance remained effectively neutral: 1.02x for TPC-H and 1.01x for ClickBench. Raising the budget to 100 MiB provided no further aggregate benefit.

Are these changes tested?

Are there any user-facing changes?

Users can opt in by setting datafusion.execution.parquet.prefetch_size; the default remains disabled.

@github-actions github-actions Bot added documentation Improvements or additions to documentation sqllogictest SQL Logic Tests (.slt) common Related to common crate proto Related to proto crate datasource Changes to the datasource crate labels Jul 12, 2026
@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown

Thank you for opening this pull request!

Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch).

Details
     Cloning apache/main
    Building datafusion-common v54.1.0 (current)
       Built [  34.735s] (current)
     Parsing datafusion-common v54.1.0 (current)
      Parsed [   0.060s] (current)
    Building datafusion-common v54.1.0 (baseline)
       Built [  34.108s] (baseline)
     Parsing datafusion-common v54.1.0 (baseline)
      Parsed [   0.061s] (baseline)
    Checking datafusion-common v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.636s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.prefetch_size in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1103

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  70.944s] datafusion-common
    Building datafusion-datasource-parquet v54.1.0 (current)
       Built [  45.156s] (current)
     Parsing datafusion-datasource-parquet v54.1.0 (current)
      Parsed [   0.032s] (current)
    Building datafusion-datasource-parquet v54.1.0 (baseline)
       Built [  44.863s] (baseline)
     Parsing datafusion-datasource-parquet v54.1.0 (baseline)
      Parsed [   0.032s] (baseline)
    Checking datafusion-datasource-parquet v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.146s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [  91.520s] datafusion-datasource-parquet
    Building datafusion-proto v54.1.0 (current)
       Built [  60.080s] (current)
     Parsing datafusion-proto v54.1.0 (current)
      Parsed [   0.019s] (current)
    Building datafusion-proto v54.1.0 (baseline)
       Built [  60.554s] (baseline)
     Parsing datafusion-proto v54.1.0 (baseline)
      Parsed [   0.020s] (baseline)
    Checking datafusion-proto v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.230s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 122.169s] datafusion-proto
    Building datafusion-proto-common v54.1.0 (current)
       Built [  22.390s] (current)
     Parsing datafusion-proto-common v54.1.0 (current)
      Parsed [   0.046s] (current)
    Building datafusion-proto-common v54.1.0 (baseline)
       Built [  22.217s] (baseline)
     Parsing datafusion-proto-common v54.1.0 (baseline)
      Parsed [   0.050s] (baseline)
    Checking datafusion-proto-common v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   1.088s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.prefetch_size_opt in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:908
  field ParquetOptions.prefetch_size_opt in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:908
  field ParquetOptions.prefetch_size_opt in /home/runner/work/datafusion/datafusion/datafusion/proto-common/src/generated/prost.rs:908

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  46.706s] datafusion-proto-common
    Building datafusion-proto-models v54.1.0 (current)
       Built [  25.118s] (current)
     Parsing datafusion-proto-models v54.1.0 (current)
      Parsed [   0.128s] (current)
    Building datafusion-proto-models v54.1.0 (baseline)
       Built [  25.143s] (baseline)
     Parsing datafusion-proto-models v54.1.0 (baseline)
      Parsed [   0.131s] (baseline)
    Checking datafusion-proto-models v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   1.697s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.49.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ParquetOptions.prefetch_size_opt in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:908
  field ParquetOptions.prefetch_size_opt in /home/runner/work/datafusion/datafusion/datafusion/proto-models/src/generated/datafusion_proto_common.rs:908

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  53.240s] datafusion-proto-models
    Building datafusion-sqllogictest v54.1.0 (current)
       Built [ 182.700s] (current)
     Parsing datafusion-sqllogictest v54.1.0 (current)
      Parsed [   0.021s] (current)
    Building datafusion-sqllogictest v54.1.0 (baseline)
       Built [ 185.184s] (baseline)
     Parsing datafusion-sqllogictest v54.1.0 (baseline)
      Parsed [   0.022s] (baseline)
    Checking datafusion-sqllogictest v54.1.0 -> v54.1.0 (no change; assume patch)
     Checked [   0.100s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 370.444s] datafusion-sqllogictest

@github-actions github-actions Bot added the auto detected api change Auto detected API change label Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmarks

env:
    DATAFUSION_EXECUTION_PARQUET_PREFETCH_SIZE: "20971520"
    SIMULATE_LATENCY: "true"

@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4951427817-1009-cr5t7 6.12.85+ #1 SMP Mon May 11 08:17:35 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 codex/parquet-pushdecoder-prefetch (4d02e1e) to 2880e10 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4951427817-1008-n2rgl 6.12.85+ #1 SMP Mon May 11 08:17:35 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 codex/parquet-pushdecoder-prefetch (4d02e1e) to 2880e10 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃ codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │     517.84 / 577.10 ±50.58 / 643.57 ms │  211.96 / 226.97 ±9.68 / 238.87 ms │ +2.54x faster │
│ QQuery 2  │     870.15 / 905.54 ±19.99 / 925.84 ms │ 651.23 / 734.80 ±57.90 / 798.91 ms │ +1.23x faster │
│ QQuery 3  │   902.74 / 1024.11 ±85.66 / 1112.70 ms │ 509.18 / 559.06 ±36.85 / 606.43 ms │ +1.83x faster │
│ QQuery 4  │     784.11 / 826.71 ±45.88 / 915.11 ms │  397.51 / 402.62 ±8.13 / 418.79 ms │ +2.05x faster │
│ QQuery 5  │  1081.22 / 1211.12 ±87.80 / 1344.85 ms │ 707.30 / 777.56 ±42.82 / 832.47 ms │ +1.56x faster │
│ QQuery 6  │     528.82 / 572.60 ±52.23 / 668.77 ms │  196.44 / 207.11 ±8.48 / 214.11 ms │ +2.76x faster │
│ QQuery 7  │ 1022.18 / 1177.67 ±123.30 / 1339.96 ms │ 603.47 / 771.48 ±98.70 / 886.04 ms │ +1.53x faster │
│ QQuery 8  │ 1143.26 / 1284.65 ±125.69 / 1501.18 ms │ 838.64 / 877.50 ±20.78 / 899.98 ms │ +1.46x faster │
│ QQuery 9  │  1207.19 / 1267.35 ±38.18 / 1320.28 ms │ 836.22 / 857.64 ±19.65 / 886.92 ms │ +1.48x faster │
│ QQuery 10 │    846.80 / 940.00 ±78.14 / 1067.06 ms │ 519.85 / 550.40 ±26.86 / 590.87 ms │ +1.71x faster │
│ QQuery 11 │     702.82 / 834.58 ±83.73 / 902.45 ms │ 616.14 / 692.04 ±44.30 / 753.16 ms │ +1.21x faster │
│ QQuery 12 │     720.05 / 839.08 ±69.01 / 930.83 ms │  400.48 / 405.38 ±7.68 / 420.65 ms │ +2.07x faster │
│ QQuery 13 │     401.34 / 410.46 ±12.36 / 434.45 ms │ 319.66 / 364.57 ±37.40 / 414.03 ms │ +1.13x faster │
│ QQuery 14 │     640.00 / 705.61 ±65.75 / 821.83 ms │ 232.00 / 326.13 ±57.74 / 405.80 ms │ +2.16x faster │
│ QQuery 15 │ 1095.10 / 1240.39 ±105.32 / 1369.28 ms │ 440.01 / 541.29 ±82.00 / 616.86 ms │ +2.29x faster │
│ QQuery 16 │     358.91 / 410.30 ±47.75 / 479.39 ms │ 264.25 / 327.11 ±58.98 / 396.35 ms │ +1.25x faster │
│ QQuery 17 │  1083.62 / 1230.32 ±78.95 / 1319.39 ms │ 510.97 / 568.71 ±40.03 / 633.36 ms │ +2.16x faster │
│ QQuery 18 │  1431.65 / 1552.91 ±68.27 / 1626.25 ms │  799.67 / 803.02 ±2.82 / 808.09 ms │ +1.93x faster │
│ QQuery 19 │     618.32 / 670.67 ±40.47 / 717.47 ms │ 293.37 / 347.77 ±39.60 / 415.20 ms │ +1.93x faster │
│ QQuery 20 │   985.73 / 1076.16 ±64.94 / 1176.67 ms │ 529.80 / 568.83 ±30.99 / 612.27 ms │ +1.89x faster │
│ QQuery 21 │ 2043.66 / 2163.86 ±141.43 / 2391.79 ms │  948.09 / 953.00 ±3.99 / 958.58 ms │ +2.27x faster │
│ QQuery 22 │     497.18 / 556.86 ±56.29 / 652.88 ms │  496.39 / 498.38 ±2.02 / 502.18 ms │ +1.12x faster │
└───────────┴────────────────────────────────────────┴────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 21478.03ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 12361.38ms │
│ Average Time (HEAD)                               │   976.27ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │   561.88ms │
│ Queries Faster                                    │         22 │
│ Queries Slower                                    │          0 │
│ Queries with No Change                            │          0 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 110.0s
Peak memory 857.4 MiB
Avg memory 418.9 MiB
CPU user 31.2s
CPU sys 3.7s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 65.0s
Peak memory 925.4 MiB
Avg memory 452.7 MiB
CPU user 30.2s
CPU sys 3.5s
Peak spill 0 B

File an issue against this benchmark runner

@apache apache deleted a comment from adriangbot Jul 12, 2026
@apache apache deleted a comment from adriangbot Jul 12, 2026
@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃     codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.25 / 4.10 ±5.57 / 15.24 ms │           1.23 / 4.05 ±5.50 / 15.06 ms │     no change │
│ QQuery 1  │ 1885.45 / 1929.06 ±41.60 / 2007.55 ms │     728.11 / 746.96 ±19.05 / 778.40 ms │ +2.58x faster │
│ QQuery 2  │ 2160.87 / 2232.44 ±54.64 / 2285.33 ms │     782.88 / 801.80 ±13.32 / 821.66 ms │ +2.78x faster │
│ QQuery 3  │ 2151.58 / 2227.08 ±47.31 / 2292.47 ms │     777.39 / 810.45 ±19.35 / 833.64 ms │ +2.75x faster │
│ QQuery 4  │ 2345.35 / 2363.44 ±22.41 / 2406.06 ms │     891.99 / 922.88 ±16.07 / 935.92 ms │ +2.56x faster │
│ QQuery 5  │ 2358.82 / 2398.87 ±29.03 / 2437.10 ms │   946.88 / 1019.02 ±40.32 / 1056.94 ms │ +2.35x faster │
│ QQuery 6  │           1.26 / 1.40 ±0.22 / 1.84 ms │            1.25 / 1.41 ±0.21 / 1.83 ms │     no change │
│ QQuery 7  │ 1908.66 / 1986.85 ±57.91 / 2079.80 ms │     731.80 / 766.37 ±30.54 / 816.76 ms │ +2.59x faster │
│ QQuery 8  │ 2404.68 / 2473.29 ±58.82 / 2557.16 ms │   998.26 / 1058.74 ±33.99 / 1087.24 ms │ +2.34x faster │
│ QQuery 9  │ 2651.86 / 2756.05 ±65.72 / 2829.02 ms │  1172.96 / 1230.49 ±34.58 / 1271.37 ms │ +2.24x faster │
│ QQuery 10 │ 2211.22 / 2270.46 ±53.06 / 2368.39 ms │     802.09 / 851.58 ±25.53 / 873.93 ms │ +2.67x faster │
│ QQuery 11 │ 2219.12 / 2297.36 ±56.50 / 2358.53 ms │     828.28 / 848.52 ±15.92 / 872.29 ms │ +2.71x faster │
│ QQuery 12 │ 2410.96 / 2453.10 ±34.18 / 2499.73 ms │   984.75 / 1010.82 ±16.27 / 1034.15 ms │ +2.43x faster │
│ QQuery 13 │ 2447.61 / 2487.79 ±33.35 / 2539.14 ms │   1131.03 / 1140.07 ±6.50 / 1148.41 ms │ +2.18x faster │
│ QQuery 14 │ 2409.09 / 2438.69 ±27.81 / 2473.81 ms │  1013.24 / 1030.28 ±10.32 / 1045.66 ms │ +2.37x faster │
│ QQuery 15 │ 2367.54 / 2426.65 ±52.78 / 2514.29 ms │    941.85 / 976.09 ±26.80 / 1023.85 ms │ +2.49x faster │
│ QQuery 16 │ 2614.23 / 2704.85 ±69.70 / 2829.38 ms │  1293.08 / 1309.61 ±16.06 / 1335.14 ms │ +2.07x faster │
│ QQuery 17 │ 2649.61 / 2704.22 ±46.41 / 2788.36 ms │   1330.93 / 1339.38 ±8.27 / 1353.98 ms │ +2.02x faster │
│ QQuery 18 │ 3162.40 / 3208.70 ±32.99 / 3260.77 ms │  1846.66 / 1907.69 ±32.31 / 1933.62 ms │ +1.68x faster │
│ QQuery 19 │ 1757.14 / 1833.47 ±58.17 / 1932.49 ms │     735.76 / 762.86 ±16.76 / 781.71 ms │ +2.40x faster │
│ QQuery 20 │ 2646.42 / 2711.44 ±58.78 / 2797.96 ms │  1612.82 / 1657.04 ±47.64 / 1742.93 ms │ +1.64x faster │
│ QQuery 21 │ 2683.30 / 2732.72 ±32.84 / 2784.88 ms │  1794.34 / 1886.24 ±53.65 / 1960.83 ms │ +1.45x faster │
│ QQuery 22 │ 3125.74 / 3151.86 ±18.61 / 3170.79 ms │  2812.73 / 2902.76 ±59.74 / 2983.72 ms │ +1.09x faster │
│ QQuery 23 │ 4946.09 / 5056.73 ±72.63 / 5168.18 ms │ 4921.29 / 5017.94 ±118.21 / 5235.22 ms │     no change │
│ QQuery 24 │    487.49 / 508.92 ±23.92 / 541.81 ms │     300.63 / 350.32 ±32.65 / 401.14 ms │ +1.45x faster │
│ QQuery 25 │ 2256.13 / 2349.35 ±77.43 / 2474.04 ms │     841.84 / 884.28 ±32.17 / 926.18 ms │ +2.66x faster │
│ QQuery 26 │    468.86 / 522.48 ±60.67 / 635.82 ms │     319.28 / 354.91 ±20.74 / 380.38 ms │ +1.47x faster │
│ QQuery 27 │ 2736.42 / 2841.89 ±63.70 / 2926.75 ms │  1759.48 / 1805.63 ±53.21 / 1908.44 ms │ +1.57x faster │
│ QQuery 28 │ 5061.24 / 5158.44 ±62.10 / 5217.45 ms │  4083.56 / 4168.71 ±74.39 / 4271.46 ms │ +1.24x faster │
│ QQuery 29 │ 2110.07 / 2222.69 ±59.98 / 2287.86 ms │     771.02 / 827.21 ±29.57 / 854.70 ms │ +2.69x faster │
│ QQuery 30 │ 2444.41 / 2480.86 ±35.41 / 2547.41 ms │  1047.40 / 1093.91 ±26.86 / 1115.31 ms │ +2.27x faster │
│ QQuery 31 │ 2336.98 / 2417.41 ±48.46 / 2489.87 ms │   992.90 / 1039.70 ±27.15 / 1070.41 ms │ +2.33x faster │
│ QQuery 32 │ 2555.46 / 2624.33 ±50.05 / 2694.92 ms │  1147.51 / 1240.17 ±59.53 / 1314.85 ms │ +2.12x faster │
│ QQuery 33 │  3432.63 / 3447.52 ±9.56 / 3458.87 ms │  2452.68 / 2497.96 ±34.08 / 2540.05 ms │ +1.38x faster │
│ QQuery 34 │ 3435.15 / 3482.94 ±31.26 / 3521.14 ms │  2480.25 / 2509.02 ±19.83 / 2535.72 ms │ +1.39x faster │
│ QQuery 35 │ 2395.62 / 2430.96 ±35.98 / 2499.42 ms │   948.92 / 1034.53 ±46.85 / 1086.25 ms │ +2.35x faster │
│ QQuery 36 │    139.60 / 295.06 ±90.18 / 398.56 ms │     129.13 / 217.17 ±60.47 / 288.94 ms │ +1.36x faster │
│ QQuery 37 │    134.98 / 252.58 ±81.79 / 369.73 ms │     121.08 / 164.34 ±41.78 / 234.09 ms │ +1.54x faster │
│ QQuery 38 │    130.10 / 273.66 ±90.29 / 392.73 ms │     143.51 / 187.91 ±42.97 / 247.31 ms │ +1.46x faster │
│ QQuery 39 │    192.64 / 341.74 ±91.71 / 440.39 ms │     270.19 / 343.21 ±56.97 / 426.38 ms │     no change │
│ QQuery 40 │    117.85 / 248.10 ±84.36 / 350.64 ms │     114.04 / 147.16 ±29.34 / 195.90 ms │ +1.69x faster │
│ QQuery 41 │    116.66 / 242.80 ±81.00 / 344.59 ms │      85.70 / 155.74 ±49.67 / 215.60 ms │ +1.56x faster │
│ QQuery 42 │    113.88 / 240.39 ±81.54 / 344.86 ms │     113.67 / 153.26 ±37.74 / 220.17 ms │ +1.57x faster │
└───────────┴───────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 89232.75ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 49178.19ms │
│ Average Time (HEAD)                               │  2075.18ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │  1143.68ms │
│ Queries Faster                                    │         39 │
│ Queries Slower                                    │          0 │
│ Queries with No Change                            │          4 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 450.1s
Peak memory 9.3 GiB
Avg memory 1.8 GiB
CPU user 1011.3s
CPU sys 114.3s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 250.1s
Peak memory 10.3 GiB
Avg memory 2.3 GiB
CPU user 1001.7s
CPU sys 96.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃     codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │     106.58 / 173.19 ±37.74 / 207.13 ms │     106.62 / 173.05 ±37.83 / 207.06 ms │     no change │
│ QQuery 2  │     520.99 / 648.79 ±69.02 / 707.70 ms │     522.66 / 656.64 ±71.45 / 707.45 ms │     no change │
│ QQuery 3  │     381.19 / 426.92 ±31.95 / 473.61 ms │     382.84 / 429.45 ±30.32 / 473.13 ms │     no change │
│ QQuery 4  │  1201.76 / 1268.72 ±55.15 / 1345.91 ms │  1184.88 / 1280.51 ±69.32 / 1355.09 ms │     no change │
│ QQuery 5  │     516.56 / 583.71 ±53.80 / 677.18 ms │     554.15 / 595.17 ±49.79 / 689.32 ms │     no change │
│ QQuery 6  │    545.98 / 696.44 ±102.40 / 822.34 ms │    541.11 / 700.27 ±105.90 / 817.30 ms │     no change │
│ QQuery 7  │     566.53 / 692.09 ±70.16 / 759.43 ms │     547.07 / 663.07 ±72.36 / 772.69 ms │     no change │
│ QQuery 8  │     572.51 / 608.18 ±31.15 / 652.73 ms │     483.31 / 569.71 ±57.82 / 642.67 ms │ +1.07x faster │
│ QQuery 9  │  1372.25 / 1491.12 ±96.71 / 1592.41 ms │  1378.59 / 1491.36 ±93.22 / 1589.76 ms │     no change │
│ QQuery 10 │     728.49 / 756.17 ±21.51 / 785.52 ms │     751.64 / 783.04 ±31.77 / 841.55 ms │     no change │
│ QQuery 11 │   928.13 / 1030.56 ±74.92 / 1136.87 ms │   930.96 / 1007.77 ±44.29 / 1051.23 ms │     no change │
│ QQuery 12 │     346.62 / 374.99 ±26.30 / 418.19 ms │     343.62 / 372.35 ±27.19 / 418.87 ms │     no change │
│ QQuery 13 │     661.82 / 742.25 ±47.83 / 796.12 ms │     678.82 / 749.29 ±42.15 / 789.21 ms │     no change │
│ QQuery 14 │  4051.16 / 4130.38 ±40.94 / 4166.10 ms │ 3750.80 / 3998.85 ±191.80 / 4285.01 ms │     no change │
│ QQuery 15 │     407.43 / 498.97 ±49.31 / 547.76 ms │     405.36 / 498.39 ±49.92 / 548.52 ms │     no change │
│ QQuery 16 │     108.07 / 173.96 ±37.55 / 208.04 ms │     108.08 / 174.86 ±38.29 / 211.34 ms │     no change │
│ QQuery 17 │     618.80 / 708.98 ±48.71 / 758.61 ms │     636.25 / 709.18 ±41.46 / 756.50 ms │     no change │
│ QQuery 18 │     716.99 / 800.69 ±60.78 / 903.69 ms │     718.64 / 804.29 ±61.47 / 908.25 ms │     no change │
│ QQuery 19 │     533.49 / 599.91 ±56.47 / 676.26 ms │     485.21 / 581.13 ±60.99 / 648.99 ms │     no change │
│ QQuery 20 │     326.95 / 400.03 ±41.53 / 452.35 ms │     325.16 / 398.38 ±40.75 / 447.53 ms │     no change │
│ QQuery 21 │     507.32 / 572.91 ±49.77 / 634.03 ms │     508.42 / 571.64 ±47.90 / 628.08 ms │     no change │
│ QQuery 22 │     473.16 / 526.56 ±32.61 / 573.88 ms │     477.99 / 527.70 ±30.10 / 570.34 ms │     no change │
│ QQuery 23 │  2546.90 / 2680.19 ±87.28 / 2759.78 ms │ 2467.53 / 2689.09 ±129.37 / 2827.59 ms │     no change │
│ QQuery 24 │ 2178.14 / 2353.72 ±107.81 / 2470.57 ms │ 2192.59 / 2357.34 ±104.69 / 2477.86 ms │     no change │
│ QQuery 25 │     683.41 / 731.96 ±35.37 / 770.57 ms │     687.55 / 732.63 ±37.10 / 777.97 ms │     no change │
│ QQuery 26 │     554.11 / 612.15 ±31.67 / 638.26 ms │     559.93 / 621.93 ±48.89 / 701.66 ms │     no change │
│ QQuery 27 │     145.32 / 254.81 ±82.74 / 359.16 ms │     141.28 / 254.27 ±84.30 / 359.61 ms │     no change │
│ QQuery 28 │     340.14 / 404.43 ±35.21 / 440.08 ms │     344.10 / 401.00 ±31.88 / 433.98 ms │     no change │
│ QQuery 29 │     721.09 / 785.39 ±42.21 / 823.69 ms │     720.83 / 788.90 ±49.25 / 845.60 ms │     no change │
│ QQuery 30 │     498.15 / 633.53 ±83.59 / 745.07 ms │     550.99 / 632.52 ±74.36 / 743.39 ms │     no change │
│ QQuery 31 │  1217.23 / 1316.93 ±63.89 / 1411.04 ms │  1209.55 / 1303.29 ±48.47 / 1350.40 ms │     no change │
│ QQuery 32 │     414.37 / 443.80 ±25.90 / 484.75 ms │     413.47 / 443.27 ±26.32 / 485.71 ms │     no change │
│ QQuery 33 │     520.67 / 594.34 ±43.53 / 644.76 ms │     522.71 / 594.73 ±41.87 / 640.84 ms │     no change │
│ QQuery 34 │     194.44 / 306.30 ±59.75 / 358.52 ms │     193.27 / 305.72 ±60.22 / 359.48 ms │     no change │
│ QQuery 35 │     713.37 / 751.72 ±32.52 / 801.63 ms │     652.37 / 757.92 ±71.76 / 874.26 ms │     no change │
│ QQuery 36 │     107.47 / 173.96 ±38.15 / 210.44 ms │     107.29 / 174.01 ±38.03 / 207.89 ms │     no change │
│ QQuery 37 │     221.50 / 276.50 ±30.10 / 310.05 ms │     221.14 / 276.54 ±30.37 / 310.38 ms │     no change │
│ QQuery 38 │     522.74 / 653.52 ±69.70 / 725.65 ms │     661.80 / 714.27 ±52.79 / 813.39 ms │  1.09x slower │
│ QQuery 39 │ 1851.53 / 2010.97 ±112.63 / 2154.59 ms │ 1853.46 / 2011.00 ±111.72 / 2147.70 ms │     no change │
│ QQuery 40 │     466.61 / 493.06 ±20.59 / 510.48 ms │     466.43 / 493.10 ±21.19 / 510.99 ms │     no change │
│ QQuery 41 │     176.03 / 278.26 ±73.02 / 380.60 ms │     176.22 / 279.11 ±73.17 / 381.42 ms │     no change │
│ QQuery 42 │     314.71 / 406.43 ±65.22 / 474.04 ms │     313.84 / 406.07 ±65.70 / 468.16 ms │     no change │
│ QQuery 43 │     106.56 / 153.47 ±40.37 / 207.44 ms │     106.76 / 152.76 ±40.64 / 206.50 ms │     no change │
│ QQuery 44 │     197.33 / 262.38 ±47.60 / 302.46 ms │     197.54 / 262.85 ±47.52 / 303.47 ms │     no change │
│ QQuery 45 │     487.64 / 567.00 ±51.27 / 644.98 ms │     452.22 / 541.16 ±67.39 / 647.78 ms │     no change │
│ QQuery 46 │     309.53 / 351.40 ±34.83 / 399.07 ms │     290.02 / 345.95 ±41.70 / 397.85 ms │     no change │
│ QQuery 47 │  1233.32 / 1273.36 ±41.79 / 1331.29 ms │  1243.07 / 1277.95 ±34.25 / 1325.17 ms │     no change │
│ QQuery 48 │     589.33 / 703.40 ±63.71 / 767.41 ms │     596.08 / 705.31 ±65.07 / 774.86 ms │     no change │
│ QQuery 49 │     581.69 / 634.95 ±48.32 / 702.23 ms │     585.40 / 647.06 ±45.19 / 706.56 ms │     no change │
│ QQuery 50 │     541.38 / 633.13 ±49.73 / 678.52 ms │     536.47 / 638.78 ±54.24 / 691.36 ms │     no change │
│ QQuery 51 │     512.78 / 539.91 ±18.29 / 557.91 ms │     503.40 / 539.53 ±28.83 / 565.73 ms │     no change │
│ QQuery 52 │     313.13 / 406.88 ±67.05 / 475.32 ms │     308.24 / 402.52 ±65.90 / 469.19 ms │     no change │
│ QQuery 53 │     412.65 / 453.24 ±47.30 / 515.52 ms │     413.16 / 453.60 ±48.61 / 513.85 ms │     no change │
│ QQuery 54 │     903.69 / 938.74 ±33.52 / 996.88 ms │    919.95 / 978.05 ±40.19 / 1036.27 ms │     no change │
│ QQuery 55 │     377.89 / 424.99 ±30.57 / 466.72 ms │     376.16 / 424.66 ±31.53 / 469.85 ms │     no change │
│ QQuery 56 │     539.08 / 614.93 ±52.77 / 691.87 ms │     523.17 / 584.63 ±35.25 / 623.56 ms │     no change │
│ QQuery 57 │  1111.73 / 1193.23 ±60.25 / 1276.10 ms │  1083.06 / 1190.79 ±80.41 / 1308.30 ms │     no change │
│ QQuery 58 │  1155.87 / 1326.89 ±96.27 / 1423.05 ms │  1154.35 / 1327.87 ±97.50 / 1425.56 ms │     no change │
│ QQuery 59 │    907.17 / 928.63 ±41.79 / 1012.20 ms │    906.65 / 932.97 ±48.49 / 1029.84 ms │     no change │
│ QQuery 60 │     580.21 / 669.50 ±60.32 / 742.09 ms │     575.99 / 657.50 ±54.62 / 740.92 ms │     no change │
│ QQuery 61 │      393.54 / 394.93 ±0.73 / 395.63 ms │      394.41 / 395.06 ±0.48 / 395.58 ms │     no change │
│ QQuery 62 │     580.07 / 600.53 ±24.64 / 631.75 ms │     579.20 / 600.48 ±25.13 / 631.92 ms │     no change │
│ QQuery 63 │     416.63 / 440.79 ±28.49 / 475.76 ms │     417.81 / 441.41 ±27.97 / 478.06 ms │     no change │
│ QQuery 64 │  3163.42 / 3300.85 ±92.90 / 3408.81 ms │  3185.37 / 3291.29 ±74.53 / 3385.49 ms │     no change │
│ QQuery 65 │     639.73 / 741.84 ±60.79 / 813.56 ms │     626.46 / 739.25 ±66.74 / 828.17 ms │     no change │
│ QQuery 66 │     562.08 / 592.08 ±46.81 / 685.41 ms │     562.65 / 595.68 ±41.36 / 675.49 ms │     no change │
│ QQuery 67 │     638.53 / 703.83 ±44.33 / 751.49 ms │     618.40 / 686.97 ±45.85 / 737.67 ms │     no change │
│ QQuery 68 │     283.56 / 317.83 ±19.44 / 338.42 ms │     284.24 / 313.24 ±15.64 / 326.57 ms │     no change │
│ QQuery 69 │    624.68 / 774.30 ±109.53 / 931.83 ms │     697.82 / 779.06 ±53.48 / 862.06 ms │     no change │
│ QQuery 70 │     684.00 / 759.38 ±61.29 / 856.30 ms │     694.83 / 763.45 ±56.21 / 855.44 ms │     no change │
│ QQuery 71 │     486.71 / 564.89 ±62.46 / 668.23 ms │     514.52 / 591.98 ±70.70 / 676.42 ms │     no change │
│ QQuery 72 │ 2916.19 / 3106.91 ±104.87 / 3207.29 ms │  2944.67 / 3067.50 ±77.33 / 3173.44 ms │     no change │
│ QQuery 73 │     194.76 / 308.62 ±58.89 / 359.19 ms │     194.33 / 307.21 ±60.82 / 357.65 ms │     no change │
│ QQuery 74 │     681.88 / 800.19 ±85.43 / 936.92 ms │     741.89 / 810.40 ±59.17 / 918.42 ms │     no change │
│ QQuery 75 │    941.40 / 982.65 ±31.65 / 1039.29 ms │    939.80 / 997.15 ±40.34 / 1045.65 ms │     no change │
│ QQuery 76 │     515.11 / 598.93 ±56.05 / 657.67 ms │     516.97 / 598.22 ±56.89 / 655.35 ms │     no change │
│ QQuery 77 │     643.49 / 718.76 ±59.96 / 813.47 ms │     685.82 / 747.77 ±44.19 / 797.45 ms │     no change │
│ QQuery 78 │     709.42 / 859.81 ±82.97 / 961.14 ms │     706.01 / 855.88 ±81.92 / 954.60 ms │     no change │
│ QQuery 79 │     451.54 / 500.08 ±45.23 / 582.67 ms │     452.44 / 505.92 ±50.57 / 599.34 ms │     no change │
│ QQuery 80 │     638.23 / 710.80 ±64.69 / 794.09 ms │     640.47 / 716.23 ±50.13 / 794.67 ms │     no change │
│ QQuery 81 │     488.87 / 604.10 ±70.91 / 685.21 ms │     477.80 / 638.71 ±81.07 / 690.62 ms │  1.06x slower │
│ QQuery 82 │     557.08 / 643.60 ±47.53 / 682.13 ms │     557.41 / 644.79 ±47.92 / 682.65 ms │     no change │
│ QQuery 83 │   982.04 / 1015.36 ±45.48 / 1098.42 ms │   860.55 / 1013.13 ±87.71 / 1097.65 ms │     no change │
│ QQuery 84 │     440.52 / 503.36 ±57.85 / 595.64 ms │     432.77 / 501.41 ±59.59 / 595.80 ms │     no change │
│ QQuery 85 │     822.30 / 891.55 ±50.67 / 951.27 ms │     814.27 / 886.32 ±51.04 / 951.85 ms │     no change │
│ QQuery 86 │     252.76 / 315.20 ±52.68 / 390.24 ms │     246.79 / 314.23 ±55.37 / 391.06 ms │     no change │
│ QQuery 87 │     659.90 / 682.30 ±30.63 / 740.93 ms │     568.16 / 679.97 ±84.74 / 780.02 ms │     no change │
│ QQuery 88 │      737.47 / 739.69 ±2.32 / 743.70 ms │      738.41 / 739.84 ±1.36 / 741.94 ms │     no change │
│ QQuery 89 │     425.29 / 460.88 ±28.19 / 485.29 ms │     426.70 / 459.86 ±27.04 / 482.95 ms │     no change │
│ QQuery 90 │     426.72 / 466.89 ±26.55 / 504.33 ms │     425.27 / 466.40 ±25.76 / 499.66 ms │     no change │
│ QQuery 91 │    523.47 / 663.29 ±112.45 / 807.77 ms │    526.00 / 664.16 ±112.23 / 806.66 ms │     no change │
│ QQuery 92 │     372.92 / 425.33 ±44.86 / 487.90 ms │     371.37 / 418.19 ±55.20 / 486.88 ms │     no change │
│ QQuery 93 │     465.94 / 481.16 ±15.90 / 509.12 ms │     470.08 / 482.52 ±13.05 / 504.31 ms │     no change │
│ QQuery 94 │     481.27 / 528.77 ±41.59 / 585.26 ms │     479.38 / 529.30 ±43.87 / 587.84 ms │     no change │
│ QQuery 95 │     691.53 / 776.13 ±46.19 / 825.17 ms │     694.67 / 778.67 ±45.34 / 823.84 ms │     no change │
│ QQuery 96 │     407.64 / 446.64 ±47.11 / 506.77 ms │     407.93 / 447.25 ±47.57 / 507.98 ms │     no change │
│ QQuery 97 │     459.05 / 519.48 ±49.68 / 610.74 ms │     454.41 / 518.76 ±50.53 / 610.06 ms │     no change │
│ QQuery 98 │     395.69 / 440.96 ±32.33 / 486.50 ms │     395.72 / 441.72 ±29.93 / 485.33 ms │     no change │
│ QQuery 99 │     508.23 / 611.98 ±56.66 / 658.90 ms │     508.99 / 620.09 ±63.68 / 695.76 ms │     no change │
└───────────┴────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 75138.17ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 75086.23ms │
│ Average Time (HEAD)                               │   758.97ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │   758.45ms │
│ Queries Faster                                    │          1 │
│ Queries Slower                                    │          2 │
│ Queries with No Change                            │         96 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 380.1s
Peak memory 1.0 GiB
Avg memory 513.9 MiB
CPU user 239.0s
CPU sys 12.0s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 380.1s
Peak memory 1.1 GiB
Avg memory 578.0 MiB
CPU user 236.4s
CPU sys 11.0s
Peak spill 0 B

File an issue against this benchmark runner

@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmarks

env:
    DATAFUSION_EXECUTION_PARQUET_PREFETCH_SIZE: "20971520"
    SIMULATE_LATENCY: "true"
    PUSHDOWN_FILTERS: "true"
    REORDER_FILTERS: "true"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4951762927-1013-kpnxx 6.12.85+ #1 SMP Mon May 11 08:17:35 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 codex/parquet-pushdecoder-prefetch (4d02e1e) to 2880e10 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4951762927-1014-vdhd9 6.12.85+ #1 SMP Mon May 11 08:17:35 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 codex/parquet-pushdecoder-prefetch (4d02e1e) to 2880e10 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4951762927-1015-9dkvq 6.12.85+ #1 SMP Mon May 11 08:17:35 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 codex/parquet-pushdecoder-prefetch (4d02e1e) to 2880e10 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃ codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │     573.50 / 616.27 ±35.03 / 662.98 ms │ 212.90 / 225.87 ±10.62 / 238.27 ms │ +2.73x faster │
│ QQuery 2  │     787.96 / 875.87 ±49.01 / 935.71 ms │ 692.85 / 747.96 ±43.03 / 799.29 ms │ +1.17x faster │
│ QQuery 3  │   947.45 / 1011.14 ±46.33 / 1074.99 ms │ 511.42 / 558.97 ±36.95 / 609.07 ms │ +1.81x faster │
│ QQuery 4  │     734.55 / 804.89 ±66.27 / 902.88 ms │  397.37 / 401.78 ±7.89 / 417.55 ms │ +2.00x faster │
│ QQuery 5  │ 1074.50 / 1210.11 ±109.24 / 1373.13 ms │ 703.02 / 775.31 ±41.85 / 824.53 ms │ +1.56x faster │
│ QQuery 6  │     531.42 / 575.99 ±39.13 / 631.95 ms │ 194.29 / 208.36 ±10.83 / 221.72 ms │ +2.76x faster │
│ QQuery 7  │  981.75 / 1136.33 ±105.76 / 1247.37 ms │ 604.58 / 772.00 ±97.78 / 886.68 ms │ +1.47x faster │
│ QQuery 8  │ 1121.66 / 1280.33 ±136.01 / 1458.29 ms │ 833.47 / 874.11 ±21.27 / 895.77 ms │ +1.46x faster │
│ QQuery 9  │  1126.28 / 1209.32 ±51.09 / 1278.37 ms │  839.29 / 841.14 ±1.16 / 842.49 ms │ +1.44x faster │
│ QQuery 10 │   913.75 / 1014.22 ±54.61 / 1060.92 ms │ 526.77 / 551.86 ±24.97 / 589.36 ms │ +1.84x faster │
│ QQuery 11 │    669.93 / 818.52 ±100.21 / 968.57 ms │ 615.77 / 691.70 ±44.58 / 754.40 ms │ +1.18x faster │
│ QQuery 12 │     746.30 / 840.99 ±60.69 / 909.27 ms │  403.69 / 408.94 ±6.21 / 420.56 ms │ +2.06x faster │
│ QQuery 13 │     399.96 / 427.32 ±30.87 / 465.21 ms │ 320.65 / 361.38 ±36.00 / 402.71 ms │ +1.18x faster │
│ QQuery 14 │     662.16 / 704.04 ±45.71 / 787.09 ms │ 236.25 / 327.04 ±57.34 / 409.68 ms │ +2.15x faster │
│ QQuery 15 │  1165.64 / 1228.56 ±58.47 / 1304.60 ms │ 443.52 / 540.92 ±78.98 / 613.88 ms │ +2.27x faster │
│ QQuery 16 │     377.21 / 413.33 ±37.05 / 483.09 ms │ 264.62 / 326.51 ±57.74 / 394.73 ms │ +1.27x faster │
│ QQuery 17 │ 1098.42 / 1309.29 ±147.52 / 1519.69 ms │ 515.28 / 563.14 ±35.57 / 623.78 ms │ +2.32x faster │
│ QQuery 18 │ 1379.50 / 1546.22 ±120.75 / 1718.06 ms │  801.71 / 809.93 ±5.35 / 818.15 ms │ +1.91x faster │
│ QQuery 19 │     572.62 / 680.62 ±84.83 / 822.46 ms │ 278.85 / 345.19 ±42.94 / 414.57 ms │ +1.97x faster │
│ QQuery 20 │   883.88 / 1027.48 ±76.20 / 1103.98 ms │ 539.15 / 576.08 ±34.98 / 636.89 ms │ +1.78x faster │
│ QQuery 21 │  2049.11 / 2185.75 ±81.40 / 2279.74 ms │  945.61 / 952.67 ±4.70 / 959.98 ms │ +2.29x faster │
│ QQuery 22 │     496.08 / 536.31 ±31.22 / 584.09 ms │  494.79 / 497.12 ±1.55 / 499.04 ms │ +1.08x faster │
└───────────┴────────────────────────────────────────┴────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 21452.91ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 12357.99ms │
│ Average Time (HEAD)                               │   975.13ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │   561.73ms │
│ Queries Faster                                    │         22 │
│ Queries Slower                                    │          0 │
│ Queries with No Change                            │          0 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 110.0s
Peak memory 801.3 MiB
Avg memory 402.1 MiB
CPU user 29.8s
CPU sys 3.8s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 65.0s
Peak memory 892.1 MiB
Avg memory 450.9 MiB
CPU user 29.4s
CPU sys 3.2s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃     codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.26 / 4.09 ±5.54 / 15.18 ms │           1.21 / 3.95 ±5.38 / 14.72 ms │     no change │
│ QQuery 1  │ 1899.70 / 1928.55 ±32.19 / 1989.64 ms │     727.32 / 746.70 ±19.51 / 779.84 ms │ +2.58x faster │
│ QQuery 2  │ 2204.53 / 2273.36 ±38.79 / 2319.14 ms │     783.30 / 802.52 ±13.48 / 824.53 ms │ +2.83x faster │
│ QQuery 3  │ 2158.89 / 2188.58 ±44.10 / 2275.07 ms │     778.60 / 810.43 ±18.59 / 833.55 ms │ +2.70x faster │
│ QQuery 4  │ 2281.15 / 2342.49 ±57.58 / 2427.21 ms │     878.76 / 923.04 ±24.05 / 941.99 ms │ +2.54x faster │
│ QQuery 5  │ 2355.92 / 2422.78 ±51.29 / 2514.29 ms │   943.11 / 1015.14 ±39.52 / 1053.13 ms │ +2.39x faster │
│ QQuery 6  │           1.27 / 1.41 ±0.22 / 1.84 ms │            1.26 / 1.42 ±0.22 / 1.86 ms │     no change │
│ QQuery 7  │ 1944.37 / 2010.23 ±51.28 / 2102.32 ms │     729.56 / 764.30 ±29.57 / 812.02 ms │ +2.63x faster │
│ QQuery 8  │ 2450.40 / 2477.87 ±16.59 / 2497.54 ms │  1023.30 / 1048.95 ±16.22 / 1071.79 ms │ +2.36x faster │
│ QQuery 9  │ 2640.44 / 2665.85 ±25.37 / 2710.84 ms │  1171.90 / 1226.77 ±32.59 / 1263.43 ms │ +2.17x faster │
│ QQuery 10 │ 2239.57 / 2309.75 ±44.74 / 2374.34 ms │     805.67 / 850.76 ±23.52 / 871.67 ms │ +2.71x faster │
│ QQuery 11 │ 2220.86 / 2275.82 ±60.15 / 2384.89 ms │     826.03 / 846.34 ±14.87 / 868.25 ms │ +2.69x faster │
│ QQuery 12 │ 2377.35 / 2426.38 ±41.60 / 2496.82 ms │   964.30 / 1006.74 ±23.88 / 1035.05 ms │ +2.41x faster │
│ QQuery 13 │ 2464.66 / 2479.72 ±14.66 / 2507.36 ms │  1090.73 / 1119.45 ±21.85 / 1151.59 ms │ +2.22x faster │
│ QQuery 14 │ 2396.46 / 2428.45 ±17.05 / 2447.56 ms │   995.99 / 1030.51 ±20.34 / 1054.54 ms │ +2.36x faster │
│ QQuery 15 │ 2384.87 / 2399.28 ±15.16 / 2425.58 ms │    947.36 / 977.71 ±18.76 / 1002.11 ms │ +2.45x faster │
│ QQuery 16 │ 2651.99 / 2689.71 ±42.67 / 2759.98 ms │  1291.91 / 1315.76 ±17.13 / 1337.12 ms │ +2.04x faster │
│ QQuery 17 │ 2627.83 / 2685.44 ±34.42 / 2719.89 ms │  1305.72 / 1327.67 ±15.19 / 1341.59 ms │ +2.02x faster │
│ QQuery 18 │ 3111.48 / 3158.40 ±37.01 / 3212.31 ms │  1862.76 / 1892.20 ±30.64 / 1938.50 ms │ +1.67x faster │
│ QQuery 19 │ 1745.03 / 1843.89 ±72.05 / 1947.99 ms │     744.10 / 760.88 ±11.09 / 778.79 ms │ +2.42x faster │
│ QQuery 20 │ 2654.25 / 2718.17 ±66.88 / 2828.85 ms │  1578.60 / 1644.03 ±35.38 / 1680.86 ms │ +1.65x faster │
│ QQuery 21 │ 2630.85 / 2707.82 ±52.83 / 2768.85 ms │  1799.08 / 1867.70 ±63.52 / 1951.95 ms │ +1.45x faster │
│ QQuery 22 │ 3087.79 / 3126.72 ±26.75 / 3169.67 ms │  2821.08 / 2885.40 ±63.93 / 2989.55 ms │ +1.08x faster │
│ QQuery 23 │ 4847.33 / 4973.43 ±89.52 / 5090.72 ms │  4978.92 / 5059.30 ±59.61 / 5147.01 ms │     no change │
│ QQuery 24 │    451.32 / 501.07 ±35.77 / 544.63 ms │     331.96 / 366.13 ±24.47 / 407.11 ms │ +1.37x faster │
│ QQuery 25 │ 2349.38 / 2390.68 ±27.54 / 2428.31 ms │     877.12 / 904.10 ±17.12 / 924.30 ms │ +2.64x faster │
│ QQuery 26 │    490.78 / 524.32 ±27.69 / 557.09 ms │     322.02 / 363.55 ±27.92 / 407.38 ms │ +1.44x faster │
│ QQuery 27 │ 2823.29 / 2902.44 ±57.27 / 2970.89 ms │  1746.98 / 1857.53 ±93.08 / 2000.17 ms │ +1.56x faster │
│ QQuery 28 │ 5097.80 / 5171.14 ±41.48 / 5217.47 ms │  4052.74 / 4203.06 ±91.21 / 4296.42 ms │ +1.23x faster │
│ QQuery 29 │ 2243.67 / 2286.67 ±46.56 / 2363.37 ms │     784.78 / 802.25 ±12.88 / 816.47 ms │ +2.85x faster │
│ QQuery 30 │ 2485.53 / 2581.20 ±62.38 / 2649.36 ms │  1004.64 / 1059.36 ±36.28 / 1098.36 ms │ +2.44x faster │
│ QQuery 31 │ 2401.05 / 2460.50 ±52.83 / 2557.62 ms │  1024.67 / 1054.40 ±34.10 / 1114.16 ms │ +2.33x faster │
│ QQuery 32 │ 2629.65 / 2677.64 ±42.58 / 2741.76 ms │ 1188.31 / 1286.67 ±110.57 / 1494.72 ms │ +2.08x faster │
│ QQuery 33 │ 3459.14 / 3509.71 ±44.86 / 3583.61 ms │  2442.04 / 2460.03 ±14.33 / 2485.70 ms │ +1.43x faster │
│ QQuery 34 │ 3424.32 / 3516.37 ±87.80 / 3659.75 ms │  2432.51 / 2500.24 ±50.42 / 2569.33 ms │ +1.41x faster │
│ QQuery 35 │ 2392.22 / 2471.95 ±54.06 / 2548.18 ms │     948.08 / 977.51 ±18.58 / 997.31 ms │ +2.53x faster │
│ QQuery 36 │    143.63 / 290.07 ±89.56 / 403.94 ms │     180.29 / 223.38 ±29.19 / 270.53 ms │ +1.30x faster │
│ QQuery 37 │    135.20 / 251.61 ±80.12 / 357.99 ms │      86.98 / 139.51 ±52.40 / 239.23 ms │ +1.80x faster │
│ QQuery 38 │    130.91 / 269.91 ±85.68 / 376.13 ms │     144.69 / 190.72 ±38.78 / 234.58 ms │ +1.42x faster │
│ QQuery 39 │    195.96 / 327.52 ±95.29 / 453.54 ms │     256.46 / 336.27 ±53.83 / 414.90 ms │     no change │
│ QQuery 40 │    115.94 / 239.26 ±84.77 / 347.74 ms │     119.71 / 152.82 ±30.90 / 204.32 ms │ +1.57x faster │
│ QQuery 41 │    115.06 / 234.56 ±83.74 / 345.18 ms │     116.09 / 171.36 ±41.77 / 237.72 ms │ +1.37x faster │
│ QQuery 42 │    113.43 / 240.32 ±81.75 / 344.73 ms │      82.09 / 124.47 ±46.54 / 214.38 ms │ +1.93x faster │
└───────────┴───────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 89385.15ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 49101.06ms │
│ Average Time (HEAD)                               │  2078.72ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │  1141.89ms │
│ Queries Faster                                    │         39 │
│ Queries Slower                                    │          0 │
│ Queries with No Change                            │          4 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 450.1s
Peak memory 9.2 GiB
Avg memory 1.8 GiB
CPU user 999.2s
CPU sys 109.3s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 250.1s
Peak memory 10.4 GiB
Avg memory 2.3 GiB
CPU user 995.2s
CPU sys 92.5s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 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

Comparing HEAD and codex_parquet-pushdecoder-prefetch
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃     codex_parquet-pushdecoder-prefetch ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │     106.46 / 173.02 ±37.70 / 207.17 ms │     106.62 / 172.84 ±37.73 / 207.03 ms │     no change │
│ QQuery 2  │     512.17 / 649.37 ±72.17 / 706.23 ms │     520.41 / 650.36 ±70.15 / 706.73 ms │     no change │
│ QQuery 3  │     382.08 / 427.22 ±31.86 / 474.42 ms │     382.53 / 429.64 ±32.22 / 475.25 ms │     no change │
│ QQuery 4  │  1127.00 / 1271.27 ±73.97 / 1324.92 ms │  1199.36 / 1257.81 ±42.96 / 1308.72 ms │     no change │
│ QQuery 5  │     499.24 / 572.13 ±64.22 / 678.20 ms │     501.02 / 582.53 ±61.11 / 687.24 ms │     no change │
│ QQuery 6  │     610.02 / 715.94 ±86.66 / 820.80 ms │    535.95 / 701.22 ±108.14 / 820.67 ms │     no change │
│ QQuery 7  │     595.60 / 692.52 ±57.35 / 754.06 ms │     595.18 / 696.20 ±57.75 / 759.28 ms │     no change │
│ QQuery 8  │     571.17 / 620.00 ±28.46 / 651.69 ms │     536.56 / 605.87 ±44.45 / 655.30 ms │     no change │
│ QQuery 9  │  1378.71 / 1488.86 ±91.19 / 1590.00 ms │  1377.87 / 1492.37 ±94.70 / 1592.12 ms │     no change │
│ QQuery 10 │     696.01 / 792.23 ±64.55 / 879.34 ms │     687.82 / 764.24 ±53.86 / 843.21 ms │     no change │
│ QQuery 11 │   822.97 / 996.86 ±113.92 / 1138.17 ms │   919.53 / 1015.79 ±67.15 / 1092.81 ms │     no change │
│ QQuery 12 │     348.35 / 373.29 ±25.24 / 417.51 ms │     350.50 / 373.86 ±24.76 / 418.28 ms │     no change │
│ QQuery 13 │     661.66 / 740.18 ±45.96 / 790.37 ms │     687.86 / 746.73 ±39.16 / 797.30 ms │     no change │
│ QQuery 14 │ 3685.00 / 4002.01 ±174.29 / 4209.75 ms │ 3821.54 / 4135.10 ±219.09 / 4419.67 ms │     no change │
│ QQuery 15 │     408.92 / 499.40 ±48.91 / 549.28 ms │     411.73 / 507.26 ±62.08 / 582.23 ms │     no change │
│ QQuery 16 │     107.40 / 174.72 ±38.51 / 210.86 ms │     108.12 / 174.73 ±38.35 / 210.63 ms │     no change │
│ QQuery 17 │     626.97 / 704.89 ±44.77 / 756.82 ms │     627.71 / 709.19 ±45.39 / 758.83 ms │     no change │
│ QQuery 18 │     718.02 / 803.99 ±61.11 / 907.82 ms │     715.09 / 805.10 ±61.43 / 905.24 ms │     no change │
│ QQuery 19 │     466.23 / 577.04 ±66.27 / 643.79 ms │     531.85 / 596.96 ±56.47 / 683.26 ms │     no change │
│ QQuery 20 │     326.71 / 397.93 ±39.82 / 446.05 ms │     326.76 / 399.39 ±39.99 / 445.76 ms │     no change │
│ QQuery 21 │     508.24 / 570.39 ±48.32 / 627.75 ms │     505.64 / 570.52 ±49.82 / 633.34 ms │     no change │
│ QQuery 22 │     477.60 / 516.17 ±21.02 / 541.48 ms │     474.87 / 528.96 ±32.65 / 570.98 ms │     no change │
│ QQuery 23 │ 2495.22 / 2723.94 ±147.71 / 2891.86 ms │ 2432.43 / 2711.02 ±152.23 / 2860.42 ms │     no change │
│ QQuery 24 │ 2192.55 / 2352.81 ±102.38 / 2468.57 ms │ 2185.65 / 2357.55 ±110.15 / 2483.78 ms │     no change │
│ QQuery 25 │     686.18 / 728.57 ±35.45 / 777.66 ms │     684.78 / 732.06 ±33.89 / 777.28 ms │     no change │
│ QQuery 26 │     610.10 / 649.61 ±33.45 / 705.15 ms │     603.33 / 633.33 ±21.57 / 669.76 ms │     no change │
│ QQuery 27 │     140.19 / 253.79 ±84.30 / 358.70 ms │     140.30 / 253.30 ±84.35 / 358.82 ms │     no change │
│ QQuery 28 │     339.09 / 399.49 ±33.51 / 432.17 ms │     342.58 / 398.10 ±32.36 / 433.31 ms │     no change │
│ QQuery 29 │     724.44 / 780.89 ±39.29 / 823.42 ms │     729.67 / 785.85 ±42.76 / 834.89 ms │     no change │
│ QQuery 30 │     487.18 / 617.17 ±91.76 / 740.43 ms │     514.54 / 625.58 ±83.70 / 743.63 ms │     no change │
│ QQuery 31 │  1192.95 / 1266.50 ±58.80 / 1342.18 ms │ 1134.15 / 1262.18 ±107.89 / 1405.83 ms │     no change │
│ QQuery 32 │     413.79 / 443.57 ±26.85 / 487.62 ms │     372.95 / 433.79 ±50.77 / 487.67 ms │     no change │
│ QQuery 33 │     540.55 / 617.52 ±55.74 / 703.32 ms │     522.54 / 585.54 ±39.85 / 643.33 ms │ +1.05x faster │
│ QQuery 34 │     193.47 / 304.98 ±59.67 / 359.86 ms │     194.23 / 306.29 ±59.81 / 358.35 ms │     no change │
│ QQuery 35 │     684.68 / 739.15 ±42.04 / 803.13 ms │     723.34 / 751.07 ±29.29 / 801.66 ms │     no change │
│ QQuery 36 │     108.08 / 173.33 ±37.50 / 207.36 ms │     107.56 / 173.41 ±37.61 / 207.83 ms │     no change │
│ QQuery 37 │     221.67 / 276.34 ±30.19 / 310.39 ms │     222.05 / 276.33 ±29.98 / 310.24 ms │     no change │
│ QQuery 38 │     602.18 / 665.90 ±33.89 / 700.49 ms │     598.40 / 667.90 ±77.51 / 816.02 ms │     no change │
│ QQuery 39 │ 1849.20 / 2008.00 ±112.90 / 2142.61 ms │ 1841.51 / 2006.02 ±111.28 / 2141.24 ms │     no change │
│ QQuery 40 │     464.51 / 492.49 ±22.73 / 512.50 ms │     467.79 / 493.57 ±20.86 / 511.99 ms │     no change │
│ QQuery 41 │     176.30 / 279.08 ±73.21 / 381.09 ms │     175.16 / 278.59 ±73.59 / 381.23 ms │     no change │
│ QQuery 42 │     313.82 / 404.78 ±64.46 / 464.30 ms │     313.95 / 404.34 ±65.01 / 472.85 ms │     no change │
│ QQuery 43 │     106.71 / 153.28 ±40.84 / 206.41 ms │     106.75 / 152.93 ±40.18 / 206.42 ms │     no change │
│ QQuery 44 │     198.42 / 262.14 ±47.05 / 302.33 ms │     197.42 / 261.93 ±47.23 / 302.38 ms │     no change │
│ QQuery 45 │     416.40 / 541.07 ±82.20 / 646.27 ms │     451.73 / 526.45 ±48.13 / 578.98 ms │     no change │
│ QQuery 46 │     289.65 / 345.37 ±41.26 / 398.87 ms │     309.42 / 351.92 ±34.87 / 399.62 ms │     no change │
│ QQuery 47 │  1227.52 / 1257.84 ±34.23 / 1323.00 ms │  1230.91 / 1274.29 ±35.29 / 1321.20 ms │     no change │
│ QQuery 48 │     585.05 / 704.80 ±65.83 / 771.69 ms │     606.65 / 707.91 ±62.24 / 776.07 ms │     no change │
│ QQuery 49 │     579.54 / 629.86 ±50.21 / 706.35 ms │     522.95 / 603.49 ±61.66 / 712.86 ms │     no change │
│ QQuery 50 │     526.90 / 635.40 ±57.04 / 689.66 ms │     541.26 / 635.29 ±50.21 / 683.07 ms │     no change │
│ QQuery 51 │     504.35 / 540.06 ±27.21 / 563.52 ms │     522.92 / 542.69 ±15.34 / 559.04 ms │     no change │
│ QQuery 52 │     313.96 / 403.67 ±63.80 / 463.39 ms │     314.78 / 405.64 ±64.87 / 471.49 ms │     no change │
│ QQuery 53 │     407.93 / 453.22 ±50.83 / 515.99 ms │     409.80 / 453.29 ±47.74 / 514.03 ms │     no change │
│ QQuery 54 │    905.92 / 946.53 ±46.20 / 1033.73 ms │     902.46 / 937.26 ±34.75 / 997.29 ms │     no change │
│ QQuery 55 │     377.06 / 423.62 ±31.73 / 467.88 ms │     377.66 / 422.84 ±32.42 / 471.79 ms │     no change │
│ QQuery 56 │     539.40 / 604.00 ±40.03 / 657.80 ms │     533.92 / 590.93 ±40.14 / 643.35 ms │     no change │
│ QQuery 57 │  1081.57 / 1195.64 ±77.51 / 1306.15 ms │  1082.64 / 1193.48 ±76.15 / 1303.68 ms │     no change │
│ QQuery 58 │  1162.77 / 1327.99 ±94.05 / 1424.96 ms │  1158.10 / 1328.50 ±97.18 / 1421.19 ms │     no change │
│ QQuery 59 │    893.20 / 926.89 ±51.48 / 1029.18 ms │    908.78 / 935.70 ±48.38 / 1032.42 ms │     no change │
│ QQuery 60 │     582.62 / 659.08 ±68.20 / 745.11 ms │     581.73 / 673.34 ±64.62 / 749.09 ms │     no change │
│ QQuery 61 │      394.89 / 395.19 ±0.22 / 395.48 ms │      394.53 / 395.41 ±0.77 / 396.27 ms │     no change │
│ QQuery 62 │     579.72 / 600.45 ±24.67 / 631.03 ms │     579.81 / 600.88 ±25.18 / 632.36 ms │     no change │
│ QQuery 63 │     416.71 / 441.63 ±28.37 / 478.44 ms │     417.70 / 441.35 ±27.63 / 475.64 ms │     no change │
│ QQuery 64 │ 3126.25 / 3277.24 ±103.91 / 3402.85 ms │  3161.09 / 3287.78 ±84.68 / 3387.49 ms │     no change │
│ QQuery 65 │     626.16 / 739.79 ±67.30 / 826.18 ms │     631.23 / 744.87 ±64.98 / 826.51 ms │     no change │
│ QQuery 66 │     564.71 / 598.14 ±41.98 / 677.42 ms │     560.96 / 589.62 ±43.97 / 677.29 ms │     no change │
│ QQuery 67 │     614.30 / 684.54 ±45.68 / 737.55 ms │     659.23 / 690.60 ±27.67 / 723.51 ms │     no change │
│ QQuery 68 │     290.02 / 320.51 ±20.76 / 354.71 ms │     289.13 / 315.30 ±15.80 / 336.05 ms │     no change │
│ QQuery 69 │     633.74 / 806.91 ±94.48 / 907.86 ms │     702.76 / 782.41 ±84.04 / 904.29 ms │     no change │
│ QQuery 70 │     674.75 / 762.16 ±66.28 / 866.95 ms │     683.18 / 758.04 ±58.78 / 853.09 ms │     no change │
│ QQuery 71 │     524.69 / 583.20 ±45.71 / 664.16 ms │     519.66 / 573.90 ±54.06 / 670.26 ms │     no change │
│ QQuery 72 │  2997.80 / 3077.43 ±67.68 / 3167.34 ms │  3117.86 / 3221.68 ±70.74 / 3322.51 ms │     no change │
│ QQuery 73 │     194.15 / 308.65 ±60.24 / 362.54 ms │     193.62 / 308.64 ±62.37 / 360.69 ms │     no change │
│ QQuery 74 │     723.81 / 819.10 ±56.80 / 892.66 ms │     640.07 / 739.76 ±75.21 / 837.79 ms │ +1.11x faster │
│ QQuery 75 │   922.46 / 1002.60 ±50.56 / 1066.75 ms │    921.85 / 981.19 ±52.56 / 1042.41 ms │     no change │
│ QQuery 76 │     477.66 / 567.71 ±68.38 / 652.90 ms │     524.93 / 609.96 ±63.72 / 686.89 ms │  1.07x slower │
│ QQuery 77 │     653.75 / 701.70 ±52.72 / 790.56 ms │     604.85 / 696.04 ±73.05 / 819.72 ms │     no change │
│ QQuery 78 │     707.72 / 856.09 ±81.14 / 951.21 ms │     715.09 / 851.98 ±77.99 / 954.32 ms │     no change │
│ QQuery 79 │     448.87 / 510.46 ±53.50 / 603.32 ms │     456.37 / 507.24 ±44.15 / 583.64 ms │     no change │
│ QQuery 80 │     651.00 / 715.34 ±45.80 / 790.76 ms │     658.42 / 722.90 ±55.39 / 794.55 ms │     no change │
│ QQuery 81 │     476.65 / 618.13 ±77.18 / 681.15 ms │     477.79 / 613.40 ±76.80 / 689.09 ms │     no change │
│ QQuery 82 │     557.52 / 644.04 ±47.23 / 682.51 ms │     557.14 / 643.67 ±47.58 / 684.34 ms │     no change │
│ QQuery 83 │    862.98 / 952.57 ±74.88 / 1028.36 ms │   860.69 / 980.51 ±105.48 / 1098.77 ms │     no change │
│ QQuery 84 │     442.23 / 502.69 ±55.57 / 591.75 ms │     439.42 / 502.05 ±56.78 / 592.05 ms │     no change │
│ QQuery 85 │     820.09 / 888.19 ±50.25 / 947.21 ms │     816.18 / 887.07 ±51.14 / 949.14 ms │     no change │
│ QQuery 86 │     247.98 / 315.19 ±55.39 / 392.54 ms │     249.19 / 315.39 ±55.99 / 397.28 ms │     no change │
│ QQuery 87 │     612.93 / 682.64 ±67.75 / 778.16 ms │     609.20 / 673.65 ±58.73 / 779.54 ms │     no change │
│ QQuery 88 │      738.12 / 739.39 ±1.14 / 741.06 ms │      737.47 / 738.34 ±0.95 / 740.13 ms │     no change │
│ QQuery 89 │     427.17 / 459.36 ±26.25 / 481.13 ms │     426.22 / 461.05 ±28.39 / 484.68 ms │     no change │
│ QQuery 90 │     427.64 / 467.66 ±25.69 / 501.91 ms │     425.25 / 466.28 ±26.42 / 502.14 ms │     no change │
│ QQuery 91 │    525.00 / 664.53 ±112.72 / 806.61 ms │    523.68 / 663.32 ±113.50 / 806.00 ms │     no change │
│ QQuery 92 │     373.67 / 446.73 ±41.22 / 487.66 ms │     371.49 / 439.06 ±37.89 / 488.83 ms │     no change │
│ QQuery 93 │     467.68 / 484.21 ±18.86 / 519.56 ms │     466.79 / 481.71 ±15.30 / 508.57 ms │     no change │
│ QQuery 94 │     479.73 / 530.13 ±43.05 / 591.50 ms │     480.42 / 530.73 ±43.38 / 588.15 ms │     no change │
│ QQuery 95 │     692.97 / 777.00 ±46.24 / 824.03 ms │     694.33 / 778.60 ±45.51 / 825.62 ms │     no change │
│ QQuery 96 │     403.44 / 446.46 ±48.92 / 507.20 ms │     403.23 / 445.88 ±48.25 / 506.93 ms │     no change │
│ QQuery 97 │     453.60 / 518.38 ±51.76 / 612.43 ms │     508.30 / 535.67 ±40.95 / 616.41 ms │     no change │
│ QQuery 98 │     394.58 / 440.31 ±32.06 / 487.87 ms │     401.63 / 442.58 ±28.26 / 483.87 ms │     no change │
│ QQuery 99 │     508.26 / 620.00 ±64.57 / 697.87 ms │     507.78 / 611.66 ±61.68 / 694.50 ms │     no change │
└───────────┴────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                 │ 74914.28ms │
│ Total Time (codex_parquet-pushdecoder-prefetch)   │ 75080.57ms │
│ Average Time (HEAD)                               │   756.71ms │
│ Average Time (codex_parquet-pushdecoder-prefetch) │   758.39ms │
│ Queries Faster                                    │          2 │
│ Queries Slower                                    │          1 │
│ Queries with No Change                            │         96 │
│ Queries with Failure                              │          0 │
└───────────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 380.1s
Peak memory 1.1 GiB
Avg memory 618.5 MiB
CPU user 229.2s
CPU sys 11.2s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 380.1s
Peak memory 965.1 MiB
Avg memory 540.9 MiB
CPU user 241.1s
CPU sys 11.5s
Peak spill 0 B

File an issue against this benchmark runner

@Dandandan
Dandandan force-pushed the codex/parquet-pushdecoder-prefetch branch from 4d02e1e to 2d0806b Compare August 3, 2026 14:47
@codecov-commenter

codecov-commenter commented Aug 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.08134% with 27 lines in your changes missing coverage. Please review.
✅ Project coverage is 80.89%. Comparing base (f9dde71) to head (838732c).
⚠️ Report is 35 commits behind head on main.

Files with missing lines Patch % Lines
datafusion/proto-common/src/generated/pbjson.rs 0.00% 15 Missing ⚠️
datafusion/proto/src/logical_plan/file_formats.rs 0.00% 5 Missing and 2 partials ⚠️
datafusion/datasource-parquet/src/push_decoder.rs 96.98% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #23492      +/-   ##
==========================================
+ Coverage   80.88%   80.89%   +0.01%     
==========================================
  Files        1102     1102              
  Lines      375813   376300     +487     
  Branches   375813   376300     +487     
==========================================
+ Hits       303966   304409     +443     
- Misses      53745    53781      +36     
- Partials    18102    18110       +8     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Dandandan
Dandandan marked this pull request as ready for review August 3, 2026 20:31
@Dandandan

Dandandan commented Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

@alamb @andygrove @adriangb

You might be interested in such a change :) Around 1.5-2x (or more) performance improvements on S3.

I did some benchmarking on S3 in #23492 (comment) which shows it basically improves performance overall without regressing anything.

@adriangb

adriangb commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

What can we expect for memory consumption? Will we use more memory because we prefetch?

@Dandandan

Copy link
Copy Markdown
Contributor Author

What can we expect for memory consumption? Will we use more memory because we prefetch?

Yes. The extra memory consumption is pretty low (and can be configured) - it is roughly max the IO budget x partitions (probably slightly higher because of overhead / Tokio tasks running, but generally much lower).

Thus 16 (partitions/cores) * 8 MiB = ~128 MiB

Switch `prefetched_row_groups` to the `datafusion_common` HashSet
re-export so the opener no longer needs an inline `std::collections`
path, and drop a redundant assertion in the prefetch budget test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@alamb

alamb commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

I will review this PR later this week -- sorry for the dealy

@Dandandan

Copy link
Copy Markdown
Contributor Author

Also #24086 from @adriangb has some interesting experiments.

Some other thoughts:

  • The interaction with filter pushdown is interesting - what is the best way to avoid serialization behind a large number of row filters while also minimizing bandwidth / decoding usage? The current implementation just plans the filters serially (f1 -> f2 -> f3 -> f4 -> ... -> full projection) without considering IO latency.
  • Should we just configure a fixed budget or should we do something with bandwidth?

@alamb

alamb commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

FWIW the DuckDB folks posted a blog that describes a very similar implementation

https://duckdb.org/2026/07/31/asynchronous-io

The configuration is interesting -- you can bound by number of outstanding I/O or memory:
https://duckdb.org/2026/07/31/asynchronous-io#memory-management

I think we can do something similar, but the trick is how much memory to use for prefetching / buffering (compared to hash tables, etc)

(BTW I am still reading this PR)

@alamb

alamb commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
  • Should we just configure a fixed budget or should we do something with bandwidth?

A classic way to model this would be with another "number of outstanding requests" limit -- which would limit how many outstanding requests could be going (which is a reasonable proxy for bandwidth). For users with large bandwidth / trying to maxxx out the execution, they could crank it up to 10 or 20 or something.

  • The interaction with filter pushdown is interesting - what is the best way to avoid serialization behind a large number of row filters while also minimizing bandwidth / decoding usage? The current implementation just plans the filters serially (f1 -> f2 -> f3 -> f4 -> ... -> full projection) without considering IO latency.

If we really wanted to get fancy, what I think we would do is

  1. start fetching all the filter columns in parallel (subject to the outstanding request limit)
  2. evaluate the filters as today serially
  3. if we evaluates an earlier filter (say f1 in your diagram) and pruned pages for a subsequent filter (say f2) we could start another racing read for the pruned pages in f2 and if that finished before the original outstanding request we could cancel

Such a strategy seems somewhat complicated and on one end of the performance spectrum (maximum performance, at the cost of more requests and memory..)

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is very cool @Dandandan -- I think we definitely want some way to be able to implement this kind of prefetching.

I need to think about this API tonight (a good night sleep etc) -- and think how useful a more general purpose trait might be.

Also I feel like maybe we should advertise this feature more (maybe in the tuning guide 🤔 )https://datafusion.apache.org/user-guide/configs.html#tuning-guide

/// this many bytes. The required ranges for the current row group are
/// always read, even when they exceed this value. None disables data
/// prefetching.
pub prefetch_size: Option<usize>, default = None

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.

I agree this is an obvious and common strategy for reading from object store and we should add it

One thing I am wondering is if we can make this IO strategy more generic (for example, I can imagine a user wanting to support racing reads like the craziness described in #23492 (comment)

Where I am heading is "can we add an API / trait" that lets user customize the I/O behavior more?

For example, maybe the trait kind of like madvise that could have methods like

/// The reader will need the bytes in `range` at some point in the future
/// it will request the bytes in the same order as called by this function
/// though it may not read all of them
fn advise_bytes_needed(&self, range: Range<usize>)

And then we could include a default implementation that implemented memory limited prefetch 🤔 but users could provide their own implementations that did other things (like racing reads, etc)

continue;
}

let row_group = metadata.row_group(entry.rg_index);

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 would be a nice API to add upstream in the parquet crate probably

@adriangb

adriangb commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Sorry I haven’t replied here. I hope to have time tomorrow to look in more detail.

I’m not sure what the right architecture is yet, but my intuition is that:

  • It should not be based on row groups or row numbers/batch sizes. Consider an int32 column vs a large string column: you can probably prefetch 1M rows of the int32 column each IO operation, you may only want a couple rows of the large string column.
  • Like DuckDBs design it should be based on a decoupled async IO pipeline so we can make sure we keep the CPU and IO saturated
  • It needs to account for vastly different IO profiles (SDD vs S3)

My intuition is to have an IO pipeline that uses memory, row counts and request concurrency to tune work, and feeds into CPU decoding. But it’s the decoding that determines what data to fetch, either known or speculative (the row filter case) and that owns the data in flight (so it can do things like discard speculative data that proves non useful). The IO pipeline asks the decoder “hey i’m going to make my next 1-4MB request, what do you want in there?” and the decoder + some IO policy decide what bytes they want.

@Dandandan

Dandandan commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

I agree, it would be good to spend some cycles iterating on the best design forward that fits DataFusion well and we can keep for longer (and enable by default).

I think it would be interesting as well to test on block storage (EBS) as well if we see any (smaller) benefit there (this would benefit official ClickBench benchmark AFAIK), having latency profile of around ~1-10ms.

SSDs - I expect minimal or negative gains from prefetching as the latency is extremely low (perhaps it would help for very fragmented/small reads but would need some stress test I think). More gains on IO-level there I would expect from different IO runtimes / reducing system calls, etc.

@alamb

alamb commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

My intuition is to have an IO pipeline that uses memory, row counts and request concurrency to tune work, and feeds into CPU decoding. But it’s the decoding that determines what data to fetch, either known or speculative (the row filter case) and that owns the data in flight (so it can do things like discard speculative data that proves non useful). The IO pipeline asks the decoder “hey i’m going to make my next 1-4MB request, what do you want in there?” and the decoder + some IO policy decide what bytes they want.

Some other potentially related work is Lance's

https://github.com/lance-format/lance/blob/71c4aa2174971e98acb7e256fde1e1589024f5bc/rust/lance-encoding/src/decoder.rs#L424-L445

Here is their trait for the IO interface: https://github.com/lance-format/lance/blob/71c4aa2174971e98acb7e256fde1e1589024f5bc/rust/lance-encoding/src/lib.rs#L41

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

Labels

auto detected api change Auto detected API change common Related to common crate datasource Changes to the datasource crate documentation Improvements or additions to documentation proto Related to proto crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Parquet] Pre-fetch the next row group when reading parquet files

5 participants