Skip to content

perf(physical-expr): cache remapped expression in DynamicFilterPhysicalExpr::current()#23532

Merged
adriangb merged 6 commits into
apache:mainfrom
zhuqi-lucas:perf/cache-dynamic-filter-current
Jul 14, 2026
Merged

perf(physical-expr): cache remapped expression in DynamicFilterPhysicalExpr::current()#23532
adriangb merged 6 commits into
apache:mainfrom
zhuqi-lucas:perf/cache-dynamic-filter-current

Conversation

@zhuqi-lucas

@zhuqi-lucas zhuqi-lucas commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

DynamicFilterPhysicalExpr::current() is invoked per batch on the RowFilter path (via PhysicalExpr::evaluate). It calls remap_children, which does a transform_up tree walk. For dynamic filters that carry a large InListExpr — e.g. HashJoinExec pushing down a col IN build_keys list of ~150+ values — that walk is dominated by InListExpr::with_new_children cloning the whole list on every call.

The inner.generation only changes when the filter is updated — once per HashJoin build, or once per TopK threshold refresh. Between updates every current() call recomputes an identical remapped tree. Caching per generation lets per-batch calls short-circuit the walk.

Measured impact (TPCH SF1, 10 iterations)

HEAD pushdown=true This PR pushdown=true Baseline pushdown=false
Q17 128 ms 53 ms (2.4× faster) 55 ms
Q18 69 ms 56 ms 49 ms
Total (22 queries) 743 ms 644 ms (-13%) 531 ms

Q17 (Nation-in-orders subquery) matches the pushdown=false baseline after the fix — the DynamicFilter tax is fully eliminated on that shape. Row counts identical across all 22 queries pre/post fix.

Profile before the fix: InListExpr::with_new_children and its drop_glue sat at the top of Q17's samply flamegraph.

Part of #20324 (parquet filter-pushdown regression EPIC).

What changes are included in this PR?

  • Add current_cache: Arc<RwLock<Option<(u64, Arc<dyn PhysicalExpr>)>>> on DynamicFilterPhysicalExpr (aliased as CurrentExprCache to keep the type readable).
  • current(): read the current (expr, generation) from inner, return the cached Arc if the cached generation matches; otherwise recompute via remap_children and store the new pair under a write lock.
  • Reset semantics:
    • update() bumps inner.generation, so the next current() misses the cache and recomputes.
    • with_new_children clones the outer struct with new remapped_children; the derived filter gets its own fresh cache slot.
    • from_parts (proto deserialization) starts with an empty cache.
  • No public API changes.

Are these changes tested?

Yes — three new regression tests in expressions::dynamic_filters::test:

  • test_current_cache_hits_within_generation — three consecutive current() calls return the same Arc (pointer-equal) at the same generation, proving the remap walk did not re-run.
  • test_current_cache_invalidates_on_update — after update() bumps the generation, current() returns a fresh Arc (not pointer-equal, and stringly distinct).
  • test_current_cache_is_per_derived_filter — two filters derived via with_new_children with different remapped_children produce distinct cached Arcs and each hits its own cache on subsequent calls.

All 21 tests in expressions::dynamic_filters (18 existing + 3 new) pass.

Are there any user-facing changes?

No. Internal caching only. No public API changes; behavior is identical modulo the generation-tied fast path.

…alExpr::current()

`DynamicFilterPhysicalExpr::current()` is called per batch on the
RowFilter path (via `PhysicalExpr::evaluate`). It internally calls
`remap_children`, which does a `transform_up` tree walk that, for
filters carrying a large `InListExpr` (HashJoin's `col IN build_keys`,
~150+ values), is dominated by `InListExpr::with_new_children` cloning
the whole list on every call.

The inner generation only changes when the filter is `update`d — once
per HashJoin build or once per TopK threshold refresh — while
`current()` fires per batch. Cache the remapped expression per
generation so per-batch calls short-circuit the walk.

Reset semantics:
* `update()` bumps `inner.generation`, invalidating the cache lookup
  on the next `current()`.
* `with_new_children` clones the outer struct with its own remapped
  children; each derived filter gets its own fresh cache slot.
* `from_parts` (proto deserialization) starts with an empty cache.

TPCH SF1 (10 iterations):
* Q17: 128ms -> 53ms (2.4x)
* Total (22 queries): 743ms -> 644ms (-13%)

TPCH row counts identical across all 22 queries pre/post fix.

Adds three regression tests:
* cache hits within a generation (same Arc returned)
* update() invalidates (new Arc returned)
* derived filters via with_new_children have independent caches

Copilot AI 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.

Pull request overview

This PR optimizes DynamicFilterPhysicalExpr::current() on the hot RowFilter per-batch evaluation path by caching the remapped expression per inner-generation, avoiding repeated transform_up remap walks for unchanged dynamic filters.

Changes:

  • Add a per-generation (generation, Arc<dyn PhysicalExpr>) cache for DynamicFilterPhysicalExpr::current().
  • Update current() to return the cached remapped expression when the generation matches, otherwise recompute and store.
  • Add regression tests covering cache hits within a generation, invalidation on update(), and per-derived-filter cache isolation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread datafusion/physical-expr/src/expressions/dynamic_filters/mod.rs Outdated
…obber

A slow `current()` call that observed an older `inner` generation could
finish after a concurrent caller has published a newer entry, and its
unconditional write would replace that newer entry with a stale one.
Semantics were still correct (later readers see the mismatch and
recompute), but subsequent generation-matched calls would miss the cache
and redo the remap unnecessarily.

Guard the write: only publish if the observed generation is at least
as fresh as whatever is currently cached.
@github-actions github-actions Bot added the physical-expr Changes to the physical-expr crates label Jul 13, 2026
…s stable

`datafusion-proto` roundtrip tests compare `format!("{:?}", expr)` on
freshly-deserialized vs post-`current()`-called filters. Deriving
`Debug` for `DynamicFilterPhysicalExpr` prints the cache slot, which
differs across the assertion because one side has populated the cache
and the other hasn't. The cache is a pure optimization artifact —
exclude it from Debug output so equality by Debug format is preserved.

Fixes `test_dynamic_filter_plan_roundtrip_dedupe` and
`test_custom_node_with_dynamic_filter_dedup_roundtrip` regressions
observed on the "cargo test hash collisions (amd64)" CI job.
@adriangb

Copy link
Copy Markdown
Contributor

run benchmark tcph10

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4958709746-1029-6jb6k 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 perf/cache-dynamic-filter-current (ac24b01) to 65f9726 (merge-base) diff using: tcph10
Results will be posted here when complete


File an issue against this benchmark runner

@adriangb

Copy link
Copy Markdown
Contributor

Note that this seems to be attacking the same thing as #20353, I don't remember why I gave up on that but I probably just missed something.

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

Note that this seems to be attacking the same thing as #20353, I don't remember why I gave up on that but I probably just missed something.

Thanks @adriangb , just saw it, it should be similar.

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
# Micro-Benchmarks (specific operators and features)
cancellation:           How long cancelling a query takes
nlj:                    Benchmark for simple nested loop joins, testing various join scenarios
hj:                     Benchmark for simple hash joins, testing various join scenarios
smj:                    Benchmark for simple sort merge joins, testing various join scenarios
dict:                   Benchmark for dictionary-encoded group-by scenarios
compile_profile:        Compile and execute TPC-H across selected Cargo profiles, reporting timing and binary size


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Supported Configuration (Environment Variables)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DATA_DIR            directory to store datasets
CARGO_COMMAND       command that runs the benchmark binary
DATAFUSION_DIR      directory to use (default /workspace/datafusion-base)
RESULTS_NAME        folder where the benchmark files are stored
PREFER_HASH_JOIN    Prefer hash join algorithm (default true)
SIMULATE_LATENCY    Simulate object store latency to mimic S3 (default false)
DATAFUSION_*        Set the given datafusion configuration


File an issue against this benchmark runner

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark tpch10

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4958910188-1030-hdc7m 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 perf/cache-dynamic-filter-current (12ee030) to 21986cf (merge-base) diff using: tpch10
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 perf_cache-dynamic-filter-current
--------------------
Benchmark tpch_sf10.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃     perf_cache-dynamic-filter-current ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │     312.05 / 312.90 ±0.58 / 313.79 ms │     310.83 / 312.46 ±1.11 / 313.79 ms │     no change │
│ QQuery 2  │     157.33 / 159.48 ±2.80 / 164.92 ms │     147.73 / 149.75 ±1.95 / 153.46 ms │ +1.06x faster │
│ QQuery 3  │     354.98 / 357.62 ±1.59 / 359.15 ms │     340.17 / 342.38 ±2.32 / 346.44 ms │     no change │
│ QQuery 4  │     302.94 / 306.61 ±3.27 / 312.73 ms │     288.63 / 292.30 ±3.96 / 299.46 ms │     no change │
│ QQuery 5  │     580.79 / 583.96 ±2.73 / 587.55 ms │     556.95 / 566.99 ±8.68 / 581.34 ms │     no change │
│ QQuery 6  │     182.93 / 184.06 ±1.09 / 185.66 ms │     183.66 / 184.28 ±0.47 / 184.93 ms │     no change │
│ QQuery 7  │     447.61 / 449.98 ±1.87 / 452.62 ms │     432.26 / 435.23 ±2.88 / 439.48 ms │     no change │
│ QQuery 8  │     628.10 / 631.16 ±2.20 / 634.48 ms │     600.06 / 602.89 ±2.24 / 606.47 ms │     no change │
│ QQuery 9  │     863.57 / 867.01 ±2.93 / 872.31 ms │     842.79 / 853.07 ±7.49 / 864.39 ms │     no change │
│ QQuery 10 │     385.59 / 387.69 ±1.93 / 390.98 ms │     375.92 / 380.47 ±4.98 / 389.62 ms │     no change │
│ QQuery 11 │     136.18 / 137.83 ±1.06 / 139.35 ms │     130.75 / 135.19 ±6.07 / 147.05 ms │     no change │
│ QQuery 12 │    342.57 / 350.62 ±11.03 / 371.17 ms │     335.89 / 340.63 ±3.70 / 345.11 ms │     no change │
│ QQuery 13 │     386.87 / 395.95 ±7.14 / 405.61 ms │     375.83 / 381.43 ±5.40 / 391.29 ms │     no change │
│ QQuery 14 │     192.77 / 194.11 ±1.19 / 196.16 ms │     190.87 / 193.49 ±2.83 / 198.85 ms │     no change │
│ QQuery 15 │     379.96 / 383.75 ±3.87 / 390.40 ms │     379.66 / 384.69 ±5.52 / 395.45 ms │     no change │
│ QQuery 16 │        89.60 / 90.94 ±1.41 / 93.33 ms │        86.77 / 89.72 ±2.53 / 92.61 ms │     no change │
│ QQuery 17 │     775.66 / 785.57 ±9.43 / 802.68 ms │     728.27 / 738.35 ±5.17 / 741.74 ms │ +1.06x faster │
│ QQuery 18 │     749.74 / 753.41 ±3.06 / 759.05 ms │     618.41 / 631.83 ±9.55 / 641.11 ms │ +1.19x faster │
│ QQuery 19 │    258.88 / 268.87 ±16.32 / 301.45 ms │     255.16 / 260.68 ±5.67 / 269.14 ms │     no change │
│ QQuery 20 │     310.31 / 316.29 ±9.38 / 334.88 ms │     299.85 / 302.19 ±2.02 / 304.71 ms │     no change │
│ QQuery 21 │ 1256.66 / 1277.12 ±15.89 / 1298.16 ms │ 1204.11 / 1217.85 ±11.76 / 1232.01 ms │     no change │
│ QQuery 22 │     131.95 / 135.57 ±2.75 / 138.75 ms │     139.70 / 144.90 ±4.36 / 152.08 ms │  1.07x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                │ 9330.52ms │
│ Total Time (perf_cache-dynamic-filter-current)   │ 8940.78ms │
│ Average Time (HEAD)                              │  424.11ms │
│ Average Time (perf_cache-dynamic-filter-current) │  406.40ms │
│ Queries Faster                                   │         3 │
│ Queries Slower                                   │         1 │
│ Queries with No Change                           │        18 │
│ Queries with Failure                             │         0 │
└──────────────────────────────────────────────────┴───────────┘

Resource Usage

tpch10 — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.8 GiB
Avg memory 1.0 GiB
CPU user 504.3s
CPU sys 16.3s
Peak spill 0 B

tpch10 — branch

Metric Value
Wall time 45.0s
Peak memory 2.6 GiB
Avg memory 1.0 GiB
CPU user 474.0s
CPU sys 16.0s
Peak spill 0 B

File an issue against this benchmark runner

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmark tpch

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4959328644-1031-l5frl 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 perf/cache-dynamic-filter-current (12ee030) to 21986cf (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 perf_cache-dynamic-filter-current
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                              HEAD ┃ perf_cache-dynamic-filter-current ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │    38.18 / 39.46 ±1.79 / 43.00 ms │    38.46 / 39.82 ±1.49 / 41.98 ms │     no change │
│ QQuery 2  │    19.93 / 20.46 ±0.54 / 21.46 ms │    19.95 / 20.47 ±0.37 / 21.02 ms │     no change │
│ QQuery 3  │    43.07 / 44.15 ±1.17 / 46.29 ms │    41.81 / 42.50 ±0.83 / 44.11 ms │     no change │
│ QQuery 4  │    25.91 / 26.58 ±0.64 / 27.64 ms │    25.51 / 26.39 ±0.93 / 28.07 ms │     no change │
│ QQuery 5  │    63.09 / 63.25 ±0.11 / 63.37 ms │    60.36 / 61.06 ±0.63 / 62.11 ms │     no change │
│ QQuery 6  │    23.02 / 23.65 ±0.61 / 24.67 ms │    23.03 / 23.90 ±0.87 / 25.56 ms │     no change │
│ QQuery 7  │    50.26 / 50.89 ±0.75 / 52.35 ms │    49.30 / 49.93 ±0.47 / 50.54 ms │     no change │
│ QQuery 8  │    51.80 / 52.20 ±0.50 / 53.09 ms │    50.39 / 50.91 ±0.29 / 51.26 ms │     no change │
│ QQuery 9  │    65.82 / 66.62 ±0.69 / 67.88 ms │    64.83 / 65.53 ±0.54 / 66.30 ms │     no change │
│ QQuery 10 │    48.09 / 49.60 ±2.28 / 54.08 ms │    48.02 / 49.27 ±0.80 / 50.00 ms │     no change │
│ QQuery 11 │    14.89 / 15.04 ±0.14 / 15.22 ms │    14.93 / 15.16 ±0.23 / 15.54 ms │     no change │
│ QQuery 12 │    45.24 / 45.57 ±0.25 / 45.85 ms │    44.33 / 45.59 ±1.70 / 48.88 ms │     no change │
│ QQuery 13 │    43.87 / 44.08 ±0.14 / 44.25 ms │    42.58 / 42.96 ±0.23 / 43.23 ms │     no change │
│ QQuery 14 │    31.10 / 31.68 ±0.94 / 33.55 ms │    30.61 / 30.66 ±0.04 / 30.71 ms │     no change │
│ QQuery 15 │    40.85 / 41.52 ±0.65 / 42.76 ms │    40.62 / 41.52 ±0.74 / 42.68 ms │     no change │
│ QQuery 16 │    15.97 / 16.10 ±0.15 / 16.38 ms │    15.69 / 15.80 ±0.11 / 16.02 ms │     no change │
│ QQuery 17 │ 148.46 / 153.38 ±2.83 / 156.51 ms │    71.07 / 72.02 ±0.57 / 72.84 ms │ +2.13x faster │
│ QQuery 18 │    79.77 / 81.44 ±1.45 / 83.84 ms │    74.40 / 74.66 ±0.20 / 74.89 ms │ +1.09x faster │
│ QQuery 19 │    34.80 / 34.97 ±0.19 / 35.34 ms │    34.47 / 35.10 ±0.51 / 35.77 ms │     no change │
│ QQuery 20 │    37.25 / 37.44 ±0.16 / 37.68 ms │    36.41 / 36.58 ±0.13 / 36.73 ms │     no change │
│ QQuery 21 │    64.47 / 65.61 ±0.73 / 66.45 ms │    63.78 / 66.12 ±1.53 / 67.58 ms │     no change │
│ QQuery 22 │    16.29 / 16.69 ±0.35 / 17.34 ms │    16.62 / 16.80 ±0.14 / 17.01 ms │     no change │
└───────────┴───────────────────────────────────┴───────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                │ 1020.38ms │
│ Total Time (perf_cache-dynamic-filter-current)   │  922.74ms │
│ Average Time (HEAD)                              │   46.38ms │
│ Average Time (perf_cache-dynamic-filter-current) │   41.94ms │
│ Queries Faster                                   │         2 │
│ Queries Slower                                   │         0 │
│ Queries with No Change                           │        20 │
│ Queries with Failure                             │         0 │
└──────────────────────────────────────────────────┴───────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 10.0s
Peak memory 1.3 GiB
Avg memory 483.7 MiB
CPU user 33.4s
CPU sys 1.8s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.3 GiB
Avg memory 783.2 MiB
CPU user 23.6s
CPU sys 1.6s
Peak spill 0 B

File an issue against this benchmark runner

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

The benchmark result is good:

QQuery 17148.46 / 153.38 ±2.83 / 156.51 ms │    71.07 / 72.02 ±0.57 / 72.84 ms │ +2.13x faster │
│ QQuery 1879.77 / 81.44 ±1.45 / 83.84 ms │    74.40 / 74.66 ±0.20 / 74.89 ms │ +1.09x faster │

Copilot AI 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.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@adriangb adriangb 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.

Generally looks good to me! Leaving some minor nits.

{
let mut cache = self.current_cache.write();
let should_write = match cache.as_ref() {
Some((cached_gen, _)) => generation >= *cached_gen,

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.

Is >= the right choice here or would > result in less updates and still be correct?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks @adriangb addressed it now.

= → >: You're right, same-generation writes are redundant (identical remap output). Tightened the guard so it only skips + saves the write-lock take when there's already an entry at the same generation.

Comment on lines +275 to +287
// Fast path: cache hit for the current generation.
let (expr, generation) = {
let inner = self.inner.read();
(Arc::clone(inner.expr()), inner.generation)
};
if let Some((cached_gen, cached_expr)) = self.current_cache.read().as_ref()
&& *cached_gen == generation
{
return Ok(Arc::clone(cached_expr));
}
// Slow path: (re)compute the remap and store it under a write lock.
let remapped =
Self::remap_children(&self.children, self.remapped_children.as_ref(), expr)?;

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.

Do we have tests that hit this under concurrency? I'm not sure how to inject behavior to make sure we hit all concurrency scenarios. We could also make a test that launches many threads and hot loop races them and asserts that some property is upheld. I just feel we should derisk this looking okay under single threaded test scenarios but then breaking under production when someone runs with 128 partitions or whatever.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good suggestion, addressed in latest PR, thanks!

Concurrency test: Added test_current_cache_concurrent_readers_and_writer

… test

Two review nits from apache#23532:

1. Switch cache-write guard from `generation >= cached_gen` to `generation
   > cached_gen`. Same-generation writes are redundant — the cached and
   about-to-write remaps are semantically identical (same input expr, same
   remapped_children) — so skipping saves one write-lock take when
   multiple readers race a miss on the same generation.

2. Add `test_current_cache_concurrent_readers_and_writer`: spawns 8
   reader threads hot-looping `current()` while a writer fires 200
   `update()`s. Asserts: (a) `current()` never fails, (b) the cached
   generation observed by each reader is monotonically non-decreasing,
   (c) after the writer finishes and a final `current()` flushes, the
   cache generation equals `inner.generation`. Derisks the "single-thread
   test OK, 128-partition prod hangs / corrupts" class of bugs.

Test helper `clone_with_remapped_children_for_test` (test-cfg only) lets
the stress test obtain multiple `Arc<Self>` references without going
through `with_new_children` (which would clear `remapped_children`).
@zhuqi-lucas

zhuqi-lucas commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the review @adriangb! Addressed both nits in bbc0f31af

@adriangb

Copy link
Copy Markdown
Contributor

thanks, lgtm!

@zhuqi-lucas

Copy link
Copy Markdown
Contributor Author

run benchmarks

env:
  DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS: true

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4969830926-1051-nfgbw 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 perf/cache-dynamic-filter-current (41a43d3) to d0304b3 (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-c4969830926-1053-4wvhg 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 perf/cache-dynamic-filter-current (41a43d3) to d0304b3 (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-c4969830926-1052-2pw8z 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 perf/cache-dynamic-filter-current (41a43d3) to d0304b3 (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 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 perf_cache-dynamic-filter-current
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                              HEAD ┃ perf_cache-dynamic-filter-current ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │    40.04 / 41.78 ±1.59 / 44.03 ms │    38.74 / 39.89 ±1.90 / 43.68 ms │     no change │
│ QQuery 2  │    21.19 / 21.53 ±0.26 / 21.80 ms │    20.21 / 20.59 ±0.49 / 21.55 ms │     no change │
│ QQuery 3  │    44.67 / 45.53 ±1.25 / 47.99 ms │    42.27 / 42.38 ±0.12 / 42.58 ms │ +1.07x faster │
│ QQuery 4  │    26.37 / 27.30 ±1.02 / 29.08 ms │    26.04 / 26.08 ±0.04 / 26.14 ms │     no change │
│ QQuery 5  │    64.80 / 66.03 ±0.93 / 67.36 ms │    61.42 / 61.73 ±0.26 / 62.07 ms │ +1.07x faster │
│ QQuery 6  │    23.21 / 23.46 ±0.25 / 23.93 ms │    23.29 / 23.67 ±0.40 / 24.33 ms │     no change │
│ QQuery 7  │    50.63 / 50.98 ±0.46 / 51.89 ms │    49.62 / 50.03 ±0.35 / 50.60 ms │     no change │
│ QQuery 8  │    51.44 / 51.72 ±0.24 / 52.03 ms │    51.00 / 51.67 ±0.64 / 52.57 ms │     no change │
│ QQuery 9  │    65.60 / 66.34 ±0.67 / 67.24 ms │    65.52 / 66.91 ±0.99 / 68.46 ms │     no change │
│ QQuery 10 │    49.92 / 51.09 ±1.03 / 52.49 ms │    48.51 / 49.18 ±0.59 / 50.07 ms │     no change │
│ QQuery 11 │    15.73 / 15.95 ±0.17 / 16.26 ms │    14.98 / 15.23 ±0.22 / 15.63 ms │     no change │
│ QQuery 12 │    46.96 / 47.90 ±0.49 / 48.30 ms │    44.73 / 45.19 ±0.61 / 46.40 ms │ +1.06x faster │
│ QQuery 13 │    44.66 / 45.65 ±0.71 / 46.49 ms │    43.28 / 43.68 ±0.39 / 44.33 ms │     no change │
│ QQuery 14 │    32.34 / 33.16 ±1.00 / 35.08 ms │    30.99 / 31.34 ±0.41 / 32.07 ms │ +1.06x faster │
│ QQuery 15 │    40.51 / 41.88 ±1.21 / 44.07 ms │    40.65 / 41.84 ±0.79 / 43.00 ms │     no change │
│ QQuery 16 │    15.83 / 15.99 ±0.10 / 16.10 ms │    15.80 / 16.00 ±0.23 / 16.42 ms │     no change │
│ QQuery 17 │ 148.83 / 155.10 ±4.89 / 162.98 ms │    71.87 / 72.36 ±0.47 / 73.25 ms │ +2.14x faster │
│ QQuery 18 │    79.95 / 81.40 ±1.21 / 82.96 ms │    75.95 / 78.04 ±1.59 / 80.29 ms │     no change │
│ QQuery 19 │    34.99 / 35.55 ±0.60 / 36.34 ms │    35.20 / 36.92 ±1.95 / 40.52 ms │     no change │
│ QQuery 20 │    37.85 / 38.48 ±0.66 / 39.69 ms │    39.49 / 39.99 ±0.65 / 41.26 ms │     no change │
│ QQuery 21 │    63.75 / 64.64 ±0.59 / 65.43 ms │    70.51 / 72.70 ±2.76 / 78.04 ms │  1.12x slower │
│ QQuery 22 │    16.68 / 16.84 ±0.13 / 17.02 ms │    18.36 / 18.48 ±0.12 / 18.69 ms │  1.10x slower │
└───────────┴───────────────────────────────────┴───────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                │ 1038.29ms │
│ Total Time (perf_cache-dynamic-filter-current)   │  943.90ms │
│ Average Time (HEAD)                              │   47.19ms │
│ Average Time (perf_cache-dynamic-filter-current) │   42.90ms │
│ Queries Faster                                   │         5 │
│ Queries Slower                                   │         2 │
│ Queries with No Change                           │        15 │
│ Queries with Failure                             │         0 │
└──────────────────────────────────────────────────┴───────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 10.0s
Peak memory 1.2 GiB
Avg memory 481.9 MiB
CPU user 34.0s
CPU sys 2.0s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 757.2 MiB
CPU user 23.6s
CPU sys 1.6s
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 perf_cache-dynamic-filter-current
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                               HEAD ┃ perf_cache-dynamic-filter-current ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │        5.10 / 5.60 ±0.93 / 7.45 ms │       4.98 / 5.50 ±0.90 / 7.31 ms │     no change │
│ QQuery 2  │     44.93 / 45.50 ±0.51 / 46.45 ms │    44.22 / 44.67 ±0.46 / 45.49 ms │     no change │
│ QQuery 3  │     27.23 / 27.49 ±0.23 / 27.75 ms │    26.67 / 27.09 ±0.36 / 27.75 ms │     no change │
│ QQuery 4  │  389.45 / 397.61 ±8.74 / 414.52 ms │ 381.63 / 387.37 ±3.74 / 390.63 ms │     no change │
│ QQuery 5  │     79.08 / 79.55 ±0.38 / 80.13 ms │    73.24 / 73.69 ±0.41 / 74.21 ms │ +1.08x faster │
│ QQuery 6  │     36.96 / 37.33 ±0.27 / 37.70 ms │    35.95 / 36.27 ±0.30 / 36.84 ms │     no change │
│ QQuery 7  │  120.78 / 124.89 ±5.66 / 135.96 ms │ 116.56 / 119.88 ±3.73 / 126.88 ms │     no change │
│ QQuery 8  │     13.52 / 13.85 ±0.26 / 14.25 ms │    13.89 / 14.18 ±0.23 / 14.57 ms │     no change │
│ QQuery 9  │  115.74 / 121.36 ±3.31 / 125.57 ms │ 123.62 / 127.11 ±2.64 / 131.02 ms │     no change │
│ QQuery 10 │     77.60 / 78.29 ±0.86 / 79.89 ms │    74.21 / 74.85 ±0.68 / 76.11 ms │     no change │
│ QQuery 11 │  239.64 / 243.17 ±3.29 / 248.27 ms │ 236.42 / 239.23 ±1.81 / 241.13 ms │     no change │
│ QQuery 12 │     28.15 / 31.01 ±4.20 / 39.33 ms │    28.65 / 28.85 ±0.15 / 29.12 ms │ +1.08x faster │
│ QQuery 13 │  118.82 / 120.06 ±2.14 / 124.32 ms │ 117.55 / 120.42 ±2.95 / 126.07 ms │     no change │
│ QQuery 14 │  407.32 / 414.44 ±5.48 / 421.39 ms │ 401.96 / 407.34 ±4.27 / 412.98 ms │     no change │
│ QQuery 15 │     24.26 / 25.61 ±2.14 / 29.85 ms │    23.29 / 23.51 ±0.26 / 23.97 ms │ +1.09x faster │
│ QQuery 16 │        6.13 / 6.21 ±0.08 / 6.34 ms │       6.19 / 6.35 ±0.20 / 6.73 ms │     no change │
│ QQuery 17 │  120.12 / 123.91 ±5.47 / 134.72 ms │ 114.77 / 116.35 ±2.29 / 120.88 ms │ +1.07x faster │
│ QQuery 18 │  362.05 / 374.16 ±8.25 / 381.49 ms │ 195.57 / 198.37 ±2.55 / 201.86 ms │ +1.89x faster │
│ QQuery 19 │     39.90 / 40.66 ±0.56 / 41.57 ms │    39.75 / 40.61 ±0.79 / 41.87 ms │     no change │
│ QQuery 20 │     38.66 / 39.28 ±0.45 / 39.99 ms │    38.84 / 39.13 ±0.25 / 39.48 ms │     no change │
│ QQuery 21 │     19.95 / 20.21 ±0.16 / 20.42 ms │    19.89 / 20.06 ±0.10 / 20.19 ms │     no change │
│ QQuery 22 │     62.55 / 63.46 ±0.91 / 65.08 ms │    61.41 / 63.05 ±1.89 / 66.63 ms │     no change │
│ QQuery 23 │  395.19 / 403.70 ±8.37 / 415.51 ms │ 389.75 / 396.19 ±3.80 / 401.50 ms │     no change │
│ QQuery 24 │  439.44 / 442.31 ±2.20 / 445.28 ms │ 414.48 / 416.28 ±2.20 / 420.53 ms │ +1.06x faster │
│ QQuery 25 │  121.85 / 122.72 ±0.91 / 124.26 ms │ 115.58 / 115.96 ±0.34 / 116.51 ms │ +1.06x faster │
│ QQuery 26 │     83.18 / 85.30 ±3.58 / 92.45 ms │    81.21 / 82.67 ±1.12 / 84.21 ms │     no change │
│ QQuery 27 │        5.95 / 6.06 ±0.17 / 6.40 ms │       5.89 / 6.01 ±0.16 / 6.33 ms │     no change │
│ QQuery 28 │     75.10 / 76.24 ±1.08 / 78.23 ms │    75.13 / 80.25 ±5.19 / 87.91 ms │  1.05x slower │
│ QQuery 29 │  154.13 / 157.58 ±3.86 / 165.07 ms │ 146.41 / 151.10 ±5.74 / 161.97 ms │     no change │
│ QQuery 30 │     32.69 / 32.95 ±0.24 / 33.37 ms │    32.68 / 32.95 ±0.17 / 33.22 ms │     no change │
│ QQuery 31 │  133.44 / 134.16 ±0.87 / 135.85 ms │ 126.48 / 128.75 ±4.05 / 136.85 ms │     no change │
│ QQuery 32 │     21.52 / 21.96 ±0.47 / 22.71 ms │    21.23 / 21.66 ±0.45 / 22.48 ms │     no change │
│ QQuery 33 │     39.48 / 39.90 ±0.41 / 40.47 ms │    38.87 / 39.44 ±0.35 / 39.89 ms │     no change │
│ QQuery 34 │     10.24 / 10.59 ±0.28 / 10.96 ms │    10.13 / 10.56 ±0.44 / 11.33 ms │     no change │
│ QQuery 35 │     84.23 / 87.45 ±4.01 / 95.20 ms │    82.67 / 83.71 ±0.72 / 84.84 ms │     no change │
│ QQuery 36 │        5.62 / 5.76 ±0.21 / 6.17 ms │       5.53 / 5.67 ±0.19 / 6.05 ms │     no change │
│ QQuery 37 │        6.95 / 7.03 ±0.09 / 7.20 ms │       6.97 / 7.03 ±0.03 / 7.06 ms │     no change │
│ QQuery 38 │     79.00 / 79.98 ±0.66 / 80.89 ms │    79.66 / 81.24 ±2.33 / 85.85 ms │     no change │
│ QQuery 39 │     92.68 / 93.22 ±0.55 / 94.06 ms │    90.12 / 91.23 ±0.83 / 92.45 ms │     no change │
│ QQuery 40 │     23.95 / 24.13 ±0.14 / 24.37 ms │    23.45 / 23.76 ±0.18 / 24.01 ms │     no change │
│ QQuery 41 │     12.37 / 12.53 ±0.11 / 12.71 ms │    12.30 / 12.53 ±0.19 / 12.86 ms │     no change │
│ QQuery 42 │     23.99 / 24.49 ±0.46 / 25.37 ms │    23.25 / 24.51 ±0.95 / 25.60 ms │     no change │
│ QQuery 43 │        4.65 / 4.80 ±0.12 / 4.99 ms │       4.61 / 4.70 ±0.12 / 4.93 ms │     no change │
│ QQuery 44 │        9.07 / 9.31 ±0.21 / 9.69 ms │       8.98 / 9.23 ±0.20 / 9.47 ms │     no change │
│ QQuery 45 │     26.70 / 26.93 ±0.22 / 27.30 ms │    25.55 / 25.88 ±0.27 / 26.36 ms │     no change │
│ QQuery 46 │     12.18 / 12.52 ±0.26 / 12.98 ms │    12.16 / 12.43 ±0.26 / 12.91 ms │     no change │
│ QQuery 47 │  227.07 / 229.97 ±2.90 / 234.01 ms │ 223.22 / 226.32 ±2.45 / 230.32 ms │     no change │
│ QQuery 48 │  129.08 / 132.45 ±4.42 / 141.09 ms │ 128.25 / 131.16 ±2.59 / 135.91 ms │     no change │
│ QQuery 49 │  120.67 / 125.80 ±5.18 / 135.57 ms │ 120.88 / 121.52 ±0.67 / 122.57 ms │     no change │
│ QQuery 50 │  134.64 / 135.44 ±0.73 / 136.50 ms │ 125.46 / 129.24 ±3.57 / 134.02 ms │     no change │
│ QQuery 51 │  102.63 / 103.93 ±1.21 / 105.88 ms │ 101.06 / 101.88 ±0.84 / 103.41 ms │     no change │
│ QQuery 52 │     23.91 / 24.40 ±0.40 / 25.13 ms │    23.34 / 25.68 ±2.99 / 31.46 ms │  1.05x slower │
│ QQuery 53 │     30.91 / 31.00 ±0.08 / 31.11 ms │    30.82 / 31.28 ±0.36 / 31.78 ms │     no change │
│ QQuery 54 │     30.77 / 31.82 ±0.69 / 32.78 ms │    27.98 / 29.75 ±1.31 / 31.04 ms │ +1.07x faster │
│ QQuery 55 │     23.28 / 23.52 ±0.18 / 23.83 ms │    22.45 / 22.90 ±0.45 / 23.61 ms │     no change │
│ QQuery 56 │     35.54 / 38.06 ±4.61 / 47.27 ms │    34.12 / 34.47 ±0.30 / 34.87 ms │ +1.10x faster │
│ QQuery 57 │  143.61 / 144.30 ±0.64 / 145.28 ms │ 140.77 / 142.71 ±2.92 / 148.52 ms │     no change │
│ QQuery 58 │     75.31 / 77.96 ±3.96 / 85.84 ms │    74.08 / 74.85 ±0.82 / 76.31 ms │     no change │
│ QQuery 59 │     83.07 / 83.20 ±0.16 / 83.53 ms │    82.09 / 84.14 ±3.18 / 90.41 ms │     no change │
│ QQuery 60 │     38.80 / 39.23 ±0.39 / 39.87 ms │    38.19 / 38.94 ±0.78 / 40.14 ms │     no change │
│ QQuery 61 │     11.84 / 11.96 ±0.16 / 12.27 ms │    11.64 / 11.86 ±0.18 / 12.16 ms │     no change │
│ QQuery 62 │     44.92 / 48.07 ±3.14 / 53.45 ms │    44.65 / 47.22 ±2.25 / 50.73 ms │     no change │
│ QQuery 63 │     31.44 / 31.92 ±0.38 / 32.53 ms │    30.57 / 30.86 ±0.25 / 31.22 ms │     no change │
│ QQuery 64 │  730.43 / 735.77 ±5.40 / 744.97 ms │ 697.63 / 701.50 ±5.49 / 712.32 ms │     no change │
│ QQuery 65 │  357.38 / 359.78 ±1.79 / 362.04 ms │ 157.42 / 161.78 ±4.48 / 170.15 ms │ +2.22x faster │
│ QQuery 66 │     66.80 / 69.27 ±2.96 / 73.72 ms │    67.04 / 67.88 ±0.73 / 69.07 ms │     no change │
│ QQuery 67 │  252.01 / 260.29 ±8.38 / 274.62 ms │ 252.56 / 255.96 ±3.11 / 259.85 ms │     no change │
│ QQuery 68 │     12.08 / 12.37 ±0.25 / 12.82 ms │    12.01 / 12.30 ±0.22 / 12.69 ms │     no change │
│ QQuery 69 │     73.02 / 75.24 ±1.80 / 78.18 ms │    70.11 / 73.78 ±4.86 / 83.14 ms │     no change │
│ QQuery 70 │ 125.11 / 133.29 ±10.89 / 154.41 ms │ 122.57 / 128.68 ±7.06 / 142.27 ms │     no change │
│ QQuery 71 │     32.70 / 33.88 ±1.30 / 36.20 ms │    31.52 / 31.92 ±0.32 / 32.24 ms │ +1.06x faster │
│ QQuery 72 │  223.94 / 226.44 ±1.40 / 228.22 ms │ 215.53 / 221.37 ±5.13 / 229.49 ms │     no change │
│ QQuery 73 │     10.09 / 10.26 ±0.19 / 10.59 ms │     9.91 / 10.35 ±0.38 / 10.96 ms │     no change │
│ QQuery 74 │  159.50 / 161.84 ±1.66 / 163.80 ms │ 156.56 / 158.89 ±2.19 / 162.44 ms │     no change │
│ QQuery 75 │  190.15 / 196.52 ±5.85 / 206.91 ms │ 185.83 / 188.06 ±2.10 / 191.85 ms │     no change │
│ QQuery 76 │     43.02 / 44.16 ±1.91 / 47.94 ms │    42.25 / 45.74 ±5.81 / 57.34 ms │     no change │
│ QQuery 77 │     62.41 / 66.58 ±5.93 / 78.12 ms │    62.45 / 62.90 ±0.66 / 64.18 ms │ +1.06x faster │
│ QQuery 78 │  151.36 / 154.11 ±2.40 / 157.45 ms │ 149.60 / 155.56 ±7.31 / 169.85 ms │     no change │
│ QQuery 79 │     68.72 / 71.06 ±2.56 / 75.66 ms │    68.53 / 68.89 ±0.33 / 69.44 ms │     no change │
│ QQuery 80 │     77.07 / 80.47 ±2.74 / 84.36 ms │    76.54 / 76.95 ±0.38 / 77.56 ms │     no change │
│ QQuery 81 │     27.72 / 28.15 ±0.40 / 28.67 ms │    27.70 / 27.84 ±0.17 / 28.14 ms │     no change │
│ QQuery 82 │     39.15 / 42.42 ±6.20 / 54.82 ms │    38.97 / 40.16 ±1.33 / 42.44 ms │ +1.06x faster │
│ QQuery 83 │     37.31 / 38.15 ±0.84 / 39.70 ms │    35.89 / 36.52 ±0.41 / 37.10 ms │     no change │
│ QQuery 84 │     31.28 / 31.77 ±0.44 / 32.59 ms │    30.43 / 30.52 ±0.05 / 30.60 ms │     no change │
│ QQuery 85 │  159.31 / 168.32 ±6.81 / 176.82 ms │ 150.44 / 156.82 ±5.73 / 167.39 ms │ +1.07x faster │
│ QQuery 86 │     30.09 / 30.75 ±0.34 / 30.99 ms │    29.42 / 30.15 ±0.52 / 30.75 ms │     no change │
│ QQuery 87 │     80.65 / 82.42 ±1.45 / 84.98 ms │    78.29 / 79.82 ±1.90 / 83.46 ms │     no change │
│ QQuery 88 │     66.32 / 73.31 ±4.56 / 79.91 ms │    64.73 / 70.30 ±5.78 / 79.47 ms │     no change │
│ QQuery 89 │     43.98 / 44.21 ±0.20 / 44.50 ms │    43.63 / 43.91 ±0.22 / 44.27 ms │     no change │
│ QQuery 90 │     18.07 / 18.23 ±0.21 / 18.63 ms │    18.17 / 18.36 ±0.26 / 18.86 ms │     no change │
│ QQuery 91 │     51.95 / 55.66 ±4.46 / 64.08 ms │    51.66 / 53.15 ±1.54 / 55.93 ms │     no change │
│ QQuery 92 │     29.98 / 30.70 ±0.61 / 31.83 ms │    29.00 / 29.83 ±1.04 / 31.83 ms │     no change │
│ QQuery 93 │     50.09 / 54.63 ±6.16 / 66.70 ms │    49.29 / 53.23 ±3.72 / 60.21 ms │     no change │
│ QQuery 94 │     37.37 / 38.31 ±1.29 / 40.86 ms │    36.08 / 36.86 ±0.91 / 38.43 ms │     no change │
│ QQuery 95 │  125.09 / 127.67 ±2.48 / 132.33 ms │ 108.85 / 109.67 ±0.59 / 110.65 ms │ +1.16x faster │
│ QQuery 96 │     25.85 / 28.98 ±3.93 / 36.70 ms │    26.00 / 28.57 ±4.67 / 37.92 ms │     no change │
│ QQuery 97 │     50.56 / 51.64 ±0.87 / 53.14 ms │    49.02 / 50.09 ±0.75 / 51.27 ms │     no change │
│ QQuery 98 │     40.66 / 42.02 ±1.04 / 43.56 ms │    39.36 / 40.51 ±1.41 / 43.28 ms │     no change │
│ QQuery 99 │     69.35 / 71.27 ±1.82 / 73.71 ms │    68.23 / 70.59 ±2.40 / 74.39 ms │     no change │
└───────────┴────────────────────────────────────┴───────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                │ 9418.26ms │
│ Total Time (perf_cache-dynamic-filter-current)   │ 8791.84ms │
│ Average Time (HEAD)                              │   95.13ms │
│ Average Time (perf_cache-dynamic-filter-current) │   88.81ms │
│ Queries Faster                                   │        15 │
│ Queries Slower                                   │         2 │
│ Queries with No Change                           │        82 │
│ Queries with Failure                             │         0 │
└──────────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.0 GiB
Avg memory 1.3 GiB
CPU user 135.1s
CPU sys 6.1s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 45.0s
Peak memory 1.7 GiB
Avg memory 1.2 GiB
CPU user 125.9s
CPU sys 5.8s
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 perf_cache-dynamic-filter-current
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃     perf_cache-dynamic-filter-current ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.23 / 3.97 ±5.40 / 14.77 ms │          1.25 / 4.03 ±5.48 / 14.98 ms │     no change │
│ QQuery 1  │        12.83 / 13.08 ±0.14 / 13.25 ms │        13.30 / 13.41 ±0.07 / 13.50 ms │     no change │
│ QQuery 2  │        36.06 / 36.23 ±0.17 / 36.52 ms │        37.00 / 37.27 ±0.17 / 37.43 ms │     no change │
│ QQuery 3  │        31.07 / 31.69 ±0.97 / 33.60 ms │        30.95 / 31.19 ±0.13 / 31.34 ms │     no change │
│ QQuery 4  │     227.30 / 228.24 ±0.51 / 228.75 ms │     219.52 / 225.21 ±3.60 / 229.11 ms │     no change │
│ QQuery 5  │     271.13 / 274.64 ±2.22 / 277.50 ms │     269.41 / 274.25 ±4.80 / 282.50 ms │     no change │
│ QQuery 6  │           1.30 / 1.44 ±0.23 / 1.91 ms │           1.30 / 1.45 ±0.23 / 1.91 ms │     no change │
│ QQuery 7  │        16.66 / 16.82 ±0.08 / 16.89 ms │        17.15 / 17.24 ±0.08 / 17.34 ms │     no change │
│ QQuery 8  │     325.23 / 327.67 ±2.37 / 332.05 ms │     323.94 / 328.60 ±2.73 / 331.68 ms │     no change │
│ QQuery 9  │     454.39 / 460.59 ±4.06 / 466.88 ms │     453.18 / 465.77 ±7.52 / 474.94 ms │     no change │
│ QQuery 10 │        94.16 / 95.35 ±1.41 / 97.84 ms │        94.57 / 95.54 ±0.75 / 96.79 ms │     no change │
│ QQuery 11 │     104.78 / 106.37 ±1.14 / 108.34 ms │     105.20 / 106.69 ±1.14 / 108.69 ms │     no change │
│ QQuery 12 │     297.04 / 301.96 ±4.14 / 307.23 ms │    297.76 / 309.72 ±10.19 / 326.51 ms │     no change │
│ QQuery 13 │    404.33 / 417.48 ±11.94 / 436.82 ms │    413.82 / 432.93 ±12.45 / 447.39 ms │     no change │
│ QQuery 14 │     314.78 / 319.69 ±4.16 / 324.35 ms │     317.50 / 321.06 ±3.34 / 326.22 ms │     no change │
│ QQuery 15 │     273.13 / 276.80 ±3.26 / 281.28 ms │    273.84 / 289.91 ±11.80 / 305.50 ms │     no change │
│ QQuery 16 │     616.04 / 623.35 ±6.22 / 633.16 ms │     623.42 / 632.24 ±8.76 / 643.01 ms │     no change │
│ QQuery 17 │    608.87 / 628.01 ±14.10 / 650.16 ms │     632.57 / 637.77 ±4.68 / 646.38 ms │     no change │
│ QQuery 18 │ 1243.28 / 1255.48 ±13.05 / 1279.13 ms │ 1274.19 / 1291.10 ±10.51 / 1305.08 ms │     no change │
│ QQuery 19 │       29.59 / 41.66 ±22.46 / 86.57 ms │       29.30 / 36.88 ±14.31 / 65.50 ms │ +1.13x faster │
│ QQuery 20 │     514.00 / 521.45 ±7.80 / 535.03 ms │     515.00 / 522.75 ±5.74 / 532.29 ms │     no change │
│ QQuery 21 │     565.87 / 575.15 ±8.23 / 589.49 ms │     572.16 / 580.31 ±6.35 / 590.40 ms │     no change │
│ QQuery 22 │     788.32 / 794.35 ±6.51 / 806.01 ms │     789.47 / 803.23 ±6.93 / 807.39 ms │     no change │
│ QQuery 23 │    132.79 / 145.74 ±14.15 / 172.80 ms │    133.16 / 146.20 ±10.25 / 161.08 ms │     no change │
│ QQuery 24 │        45.61 / 47.50 ±1.88 / 50.98 ms │        45.86 / 46.70 ±0.83 / 47.90 ms │     no change │
│ QQuery 25 │     144.59 / 148.82 ±3.91 / 153.54 ms │     146.35 / 150.11 ±4.25 / 157.94 ms │     no change │
│ QQuery 26 │        49.50 / 50.57 ±0.82 / 52.00 ms │        49.08 / 50.21 ±0.63 / 50.81 ms │     no change │
│ QQuery 27 │     705.64 / 720.17 ±8.42 / 731.89 ms │     727.77 / 736.70 ±7.68 / 747.02 ms │     no change │
│ QQuery 28 │ 3059.00 / 3075.50 ±11.93 / 3091.62 ms │ 3057.13 / 3078.68 ±28.93 / 3133.14 ms │     no change │
│ QQuery 29 │        41.08 / 41.62 ±0.73 / 43.04 ms │       41.28 / 52.24 ±13.85 / 77.39 ms │  1.26x slower │
│ QQuery 30 │     314.48 / 317.86 ±3.67 / 323.99 ms │    315.69 / 326.81 ±16.08 / 358.29 ms │     no change │
│ QQuery 31 │     293.20 / 299.06 ±3.11 / 302.26 ms │     290.69 / 298.24 ±6.74 / 308.50 ms │     no change │
│ QQuery 32 │   924.06 / 953.63 ±28.70 / 1004.29 ms │   968.35 / 993.08 ±13.25 / 1007.35 ms │     no change │
│ QQuery 33 │ 1450.63 / 1477.29 ±23.94 / 1517.90 ms │ 1474.33 / 1488.19 ±10.87 / 1506.65 ms │     no change │
│ QQuery 34 │ 1466.21 / 1495.15 ±22.65 / 1521.36 ms │ 1487.98 / 1500.05 ±10.64 / 1514.08 ms │     no change │
│ QQuery 35 │    281.02 / 320.69 ±48.19 / 412.65 ms │    277.72 / 297.61 ±15.75 / 324.93 ms │ +1.08x faster │
│ QQuery 36 │      65.90 / 77.59 ±12.39 / 101.25 ms │        69.58 / 81.67 ±8.49 / 94.65 ms │  1.05x slower │
│ QQuery 37 │        36.57 / 39.13 ±2.30 / 42.74 ms │        36.49 / 41.11 ±6.78 / 54.50 ms │  1.05x slower │
│ QQuery 38 │        38.90 / 42.71 ±4.25 / 50.98 ms │        36.27 / 40.40 ±5.30 / 50.53 ms │ +1.06x faster │
│ QQuery 39 │     130.24 / 143.39 ±9.72 / 159.83 ms │     133.69 / 147.15 ±8.91 / 160.89 ms │     no change │
│ QQuery 40 │        18.29 / 20.50 ±3.38 / 27.21 ms │        19.02 / 22.34 ±3.68 / 28.67 ms │  1.09x slower │
│ QQuery 41 │        16.75 / 22.40 ±7.30 / 35.72 ms │        16.65 / 18.63 ±3.23 / 25.02 ms │ +1.20x faster │
│ QQuery 42 │        13.87 / 14.24 ±0.25 / 14.59 ms │        14.18 / 14.57 ±0.29 / 14.93 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                │ 16805.06ms │
│ Total Time (perf_cache-dynamic-filter-current)   │ 16989.22ms │
│ Average Time (HEAD)                              │   390.82ms │
│ Average Time (perf_cache-dynamic-filter-current) │   395.10ms │
│ Queries Faster                                   │          4 │
│ Queries Slower                                   │          4 │
│ Queries with No Change                           │         35 │
│ Queries with Failure                             │          0 │
└──────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 85.0s
Peak memory 11.6 GiB
Avg memory 4.7 GiB
CPU user 859.9s
CPU sys 58.3s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 90.0s
Peak memory 11.2 GiB
Avg memory 4.4 GiB
CPU user 864.1s
CPU sys 61.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb adriangb added this pull request to the merge queue Jul 14, 2026
Merged via the queue into apache:main with commit d1e6d45 Jul 14, 2026
40 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

physical-expr Changes to the physical-expr crates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf: DynamicFilterPhysicalExpr::current() re-runs the remap tree walk on every batch

4 participants