Skip to content

perf: make GroupsAccumulatorAdapter cost proportional to the batch, not the group count - #25123

Open
adriangb wants to merge 3 commits into
apache:mainfrom
pydantic:claude/datafusion-issue-25116-75677f
Open

perf: make GroupsAccumulatorAdapter cost proportional to the batch, not the group count#25123
adriangb wants to merge 3 commits into
apache:mainfrom
pydantic:claude/datafusion-issue-25116-75677f

Conversation

@adriangb

@adriangb adriangb commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Some aggregate functions do not have a GroupsAccumulator. The built-in
examples are covar_samp, covar_pop, regr_*, approx_percentile_cont,
approx_median, nth_value and any_value. A user-defined aggregate that has
only an Accumulator is also an example. For all of these, DataFusion uses
GroupsAccumulatorAdapter. The adapter keeps one Accumulator for each group.
It sends the rows of each input batch to the correct accumulators.

If you group by a column that has many different values, these queries are slow.
This query on the ClickBench hits data is an example:

SELECT "UserID", covar_samp("ResolutionWidth", "ResolutionHeight") AS c
FROM hits
GROUP BY "UserID";

The cause is the adapter. For each input batch, the adapter looked at every
group that exists. It did this even when the batch had rows for only a few of
those groups. There are 17.6 million different UserID values, thus
approximately 1.5 million groups in each of the 12 partitions. With 8192 rows in
a batch, the adapter did approximately 180 steps for each input row before it
started the aggregate work.

The adapter also kept a scratch Vec<u32> of row indexes for each group. That
memory stayed for the full life of the group.

What changes are included in this PR?

1. The adapter sorts the rows of a batch by group with a count

Each group now keeps one u32 value in place of the scratch Vec<u32>. The
value is 0 between batches. For each batch, the adapter does three steps:

  1. It counts the rows of each group. It also records a group the first time that
    it finds a row for that group.
  2. It adds those counts together to get the position where the rows of each
    group start in the take index. Each count becomes that start position.
  3. It writes each row index at the position for its group. The positions then go
    back to 0 for the next batch.

Each step goes through the rows of the batch, or through the groups that the
batch has rows for. No step goes through all the groups that exist. The only
scratch memory that stays between batches is the list of groups with rows and
the list of start positions. Both are not larger than one batch. size() counts
both of them.

The rows of a group stay in the same order as in the input. Thus each
Accumulator gets the same rows, in the same order, as before this change.

This change also makes #24858
unnecessary. There is no more scratch memory for each group to account for. The
two memory limit tests in that PR show that the adapter spills because of that
memory, thus they do not apply after this change.

2. Two new clickbench_extended queries

Q15 groups covar_samp by "UserID" (17.6 million groups) and Q16 groups it by
"RegionID" (9,040 groups). The aggregate is cheap, thus the adapter is the
largest part of the time. An outer MAX keeps the result small.

3. A new benchmark for the adapter

datafusion/functions-aggregate/benches/groups_accumulator_adapter.rs moves the
group count from 64 to 1,000,000. It uses two accumulators, because the cost of
the adapter and the cost of the aggregate move in opposite directions as the
group count increases:

  • adapter_routing uses an accumulator that only counts the rows that it gets.
    What it measures is the adapter and nothing else.
  • adapter_covar_samp uses a real aggregate that has no GroupsAccumulator. It
    shows how much of that a query gets.

Benchmark results

ClickBench

hits_partitioned, 100 million rows, 12 partitions, warm page cache, release
build, M-series laptop with 12 cores. This machine moves by approximately 10%
between sequential runs. Thus the two binaries ran one after the other for each
single measurement, and the numbers below are medians of 12 measurements for
"RegionID" and 6 for "UserID". corr on the same two columns is the control:
it has a GroupsAccumulator, thus this PR does not change it.

Query main this PR Ratio
covar_samp by "UserID" (17.6M groups) 7278 ms 5226 ms 1.39x
corr by "UserID" (control) 663 ms 708 ms 0.94x
covar_samp by "RegionID" (9k groups) 267 ms 275 ms 0.97x
corr by "RegionID" (control) 189 ms 183 ms 1.04x

The two controls give a noise band of approximately 6%. The "RegionID" result
is inside that band, thus this PR does not make the low group count slower.

The new adapter benchmark

Groups adapter_routing adapter_covar_samp
64 0.93x 1.00x (p = 0.22)
1,024 1.06x 1.04x (p = 0.18)
16,384 1.09x 1.05x
262,144 1.48x 1.24x
1,000,000 1.78x 1.58x

At 64 groups the adapter alone is approximately 7% slower. The old code copied
one contiguous block of row indexes for each group, and the new code writes each
row index on its own. A real accumulator hides that cost: adapter_covar_samp
at 64 and at 1,024 groups shows no difference that is statistically significant.

A second code path above a group count limit would remove those 7%. This PR does
not add one. One design is sufficient at both ends, and a second path adds a
value to tune.

What is the testing strategy for this PR?

Two new unit tests in
datafusion/functions-aggregate-common/src/aggregate/groups_accumulator.rs:

  • adapter_routes_rows_to_their_own_group sends five batches, which include an
    empty batch, through the adapter. The batches interleave the groups, they go
    back to groups that they already used, and they leave some groups with no
    rows. The test then compares all the groups against a result that it counts
    itself.
  • adapter_routes_filtered_rows shows that a filter keeps rows away from the
    accumulators. This includes a group where the filter removes all of the rows.

To make sure that the first test catches an error, I removed the step that sets
the positions back to 0. The test failed. I then put the step back.

The full extended test suite is green: 11,042 tests pass.

Are there any user-facing changes?

Queries that group by a column with many different values, and that use an
aggregate with no GroupsAccumulator, are faster. There are no changes to any
public API.

GroupsAccumulatorAdapter::size() reports a different number. It no longer
counts scratch memory for each group, because there is none. It now counts the
scratch memory of one batch. A memory pool sees a smaller number for the same
query.

🤖 Generated with Claude Code

@github-actions github-actions Bot added the functions Changes to functions implementation label Sep 9, 2026
adriangb and others added 3 commits September 9, 2026 11:27
…the batch

`GroupsAccumulatorAdapter` routed each input batch through one scratch
`Vec<u32>` of row indices per group. Building the `take` index meant
walking every group that exists and skipping the empty ones, so each
batch cost one iteration per group whatever it touched: with 1.5M groups
in a partition and 8192-row batches, about 180 iterations per input row
before any aggregation happened. The vectors also held their capacity
between batches, so scratch space was retained per group for the
lifetime of the group.

Route the batch by counting sort instead. Each state carries a single
`u32`: pass one counts the rows of each group and records a group the
first time it is seen, pass two turns those counts into the offsets at
which each group's rows start and leaves every cursor at the start of
its own range, and pass three scatters the rows into the `take` index
and walks the cursors back to zero for the next batch. Every pass is
over the rows of the batch or over the groups the batch touches, and the
only scratch that outlives a batch is `groups_with_rows` and `offsets`,
both bounded by the batch size and both charged in `size()`.

Rows keep their relative order within a group, so each accumulator sees
exactly the rows, in the order, it saw before.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`covar_samp` has no native `GroupsAccumulator`, so it runs through
`GroupsAccumulatorAdapter`. The aggregate itself is cheap, which leaves
the adapter's routing as the dominant cost and makes these queries a
direct measure of it.

q15 groups by `"UserID"` (about 17.6M groups) and q16 by `"RegionID"`
(about 9,000), so the pair covers both ends of the cardinality range
that the adapter has to stay fast at. `corr` over the same two columns
is the native-`GroupsAccumulator` control. The outer `MAX` keeps the
stored result small.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was no benchmark that isolated what `GroupsAccumulatorAdapter`
costs, so a change to its routing could only be judged through a whole
query, where the parquet scan and the aggregate itself hide the effect.

Sweep the group count from 64 to 1M with two accumulators. `routing`
wraps an accumulator that only counts the rows it is handed, so what it
measures is the adapter and nothing else: the upper bound on what a
change to the routing can move. `covar_samp` wraps a real aggregate with
no native `GroupsAccumulator`, so it shows how much of that upper bound
a query sees.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@adriangb
adriangb force-pushed the claude/datafusion-issue-25116-75677f branch from afc4aa0 to 3238cd6 Compare September 9, 2026 16:28
@adriangb

adriangb commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended clickbench_partitioned external_aggr tpch

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5605256201-2273-rkhdp 6.12.94+ #1 SMP Fri Jul 17 09:42:57 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 claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark external_aggr

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-c5605256201-2274-xpstt 6.12.94+ #1 SMP Fri Jul 17 09:42:57 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 claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark 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-c5605256201-2272-zfs4x 6.12.94+ #1 SMP Fri Jul 17 09:42:57 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 claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark 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-c5605256201-2271-q8ffw 6.12.94+ #1 SMP Fri Jul 17 09:42:57 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 claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark clickbench_extended

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)

Comparing claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark tpch
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 claude_datafusion-issue-25116-75677f
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ claude_datafusion-issue-25116-75677f ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1  │ 38.39 ms │                             37.98 ms │ no change │
│ QQuery 2  │ 19.05 ms │                             18.65 ms │ no change │
│ QQuery 3  │ 28.74 ms │                             28.36 ms │ no change │
│ QQuery 4  │ 17.98 ms │                             17.74 ms │ no change │
│ QQuery 5  │ 36.00 ms │                             35.60 ms │ no change │
│ QQuery 6  │ 15.76 ms │                             16.11 ms │ no change │
│ QQuery 7  │ 40.61 ms │                             40.62 ms │ no change │
│ QQuery 8  │ 40.90 ms │                             40.60 ms │ no change │
│ QQuery 9  │ 48.23 ms │                             49.08 ms │ no change │
│ QQuery 10 │ 41.99 ms │                             42.05 ms │ no change │
│ QQuery 11 │ 13.51 ms │                             13.51 ms │ no change │
│ QQuery 12 │ 23.73 ms │                             23.45 ms │ no change │
│ QQuery 13 │ 39.43 ms │                             39.60 ms │ no change │
│ QQuery 14 │ 24.22 ms │                             24.50 ms │ no change │
│ QQuery 15 │ 30.43 ms │                             30.74 ms │ no change │
│ QQuery 16 │ 13.86 ms │                             13.83 ms │ no change │
│ QQuery 17 │ 70.83 ms │                             70.26 ms │ no change │
│ QQuery 18 │ 60.13 ms │                             58.33 ms │ no change │
│ QQuery 19 │ 32.62 ms │                             32.51 ms │ no change │
│ QQuery 20 │ 31.16 ms │                             30.99 ms │ no change │
│ QQuery 21 │ 55.51 ms │                             55.05 ms │ no change │
│ QQuery 22 │ 14.10 ms │                             14.21 ms │ no change │
└───────────┴──────────┴──────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 737.19ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 733.75ms │
│ Average Time (HEAD)                                 │  33.51ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  33.35ms │
│ Queries Faster                                      │        0 │
│ Queries Slower                                      │        0 │
│ Queries with No Change                              │       22 │
│ Queries with Failure                                │        0 │
└─────────────────────────────────────────────────────┴──────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and claude_datafusion-issue-25116-75677f
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃ claude_datafusion-issue-25116-75677f ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1  │ 38.39 / 40.29 ±2.06 / 43.43 ms │       37.98 / 39.23 ±2.24 / 43.70 ms │ no change │
│ QQuery 2  │ 19.05 / 19.19 ±0.18 / 19.53 ms │       18.65 / 18.86 ±0.13 / 19.03 ms │ no change │
│ QQuery 3  │ 28.74 / 29.03 ±0.25 / 29.43 ms │       28.36 / 28.70 ±0.31 / 29.21 ms │ no change │
│ QQuery 4  │ 17.98 / 18.07 ±0.08 / 18.20 ms │       17.74 / 17.89 ±0.12 / 18.10 ms │ no change │
│ QQuery 5  │ 36.00 / 36.54 ±0.46 / 37.22 ms │       35.60 / 35.78 ±0.17 / 36.04 ms │ no change │
│ QQuery 6  │ 15.76 / 15.95 ±0.15 / 16.14 ms │       16.11 / 16.63 ±0.96 / 18.55 ms │ no change │
│ QQuery 7  │ 40.61 / 42.70 ±1.53 / 45.23 ms │       40.62 / 41.94 ±1.46 / 44.67 ms │ no change │
│ QQuery 8  │ 40.90 / 41.63 ±0.70 / 42.64 ms │       40.60 / 42.49 ±2.37 / 47.18 ms │ no change │
│ QQuery 9  │ 48.23 / 49.70 ±1.10 / 51.01 ms │       49.08 / 50.22 ±0.67 / 50.86 ms │ no change │
│ QQuery 10 │ 41.99 / 42.19 ±0.12 / 42.35 ms │       42.05 / 42.21 ±0.22 / 42.64 ms │ no change │
│ QQuery 11 │ 13.51 / 13.79 ±0.31 / 14.32 ms │       13.51 / 13.73 ±0.13 / 13.85 ms │ no change │
│ QQuery 12 │ 23.73 / 23.97 ±0.18 / 24.20 ms │       23.45 / 24.23 ±0.46 / 24.89 ms │ no change │
│ QQuery 13 │ 39.43 / 39.82 ±0.22 / 40.10 ms │       39.60 / 40.54 ±1.08 / 42.32 ms │ no change │
│ QQuery 14 │ 24.22 / 24.51 ±0.19 / 24.74 ms │       24.50 / 24.60 ±0.10 / 24.72 ms │ no change │
│ QQuery 15 │ 30.43 / 30.81 ±0.27 / 31.15 ms │       30.74 / 31.03 ±0.16 / 31.20 ms │ no change │
│ QQuery 16 │ 13.86 / 13.97 ±0.15 / 14.26 ms │       13.83 / 13.98 ±0.18 / 14.32 ms │ no change │
│ QQuery 17 │ 70.83 / 71.78 ±1.09 / 73.63 ms │       70.26 / 71.65 ±1.59 / 74.63 ms │ no change │
│ QQuery 18 │ 60.13 / 61.20 ±1.01 / 62.46 ms │       58.33 / 59.84 ±1.09 / 61.46 ms │ no change │
│ QQuery 19 │ 32.62 / 33.53 ±1.13 / 35.70 ms │       32.51 / 32.74 ±0.23 / 33.11 ms │ no change │
│ QQuery 20 │ 31.16 / 31.91 ±0.47 / 32.49 ms │       30.99 / 31.52 ±0.36 / 32.11 ms │ no change │
│ QQuery 21 │ 55.51 / 56.73 ±1.33 / 59.21 ms │       55.05 / 56.42 ±1.30 / 58.66 ms │ no change │
│ QQuery 22 │ 14.10 / 14.24 ±0.11 / 14.41 ms │       14.21 / 14.33 ±0.10 / 14.51 ms │ no change │
└───────────┴────────────────────────────────┴──────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 751.55ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 748.58ms │
│ Average Time (HEAD)                                 │  34.16ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  34.03ms │
│ Queries Faster                                      │        0 │
│ Queries Slower                                      │        0 │
│ Queries with No Change                              │       22 │
│ Queries with Failure                                │        0 │
└─────────────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

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

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 489.7 MiB
CPU user 20.9s
CPU sys 1.7s
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)

Comparing claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
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 claude_datafusion-issue-25116-75677f
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ claude_datafusion-issue-25116-75677f ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │    1.20 ms │                              1.21 ms │ no change │
│ QQuery 1  │   11.68 ms │                             11.76 ms │ no change │
│ QQuery 2  │   35.92 ms │                             36.08 ms │ no change │
│ QQuery 3  │   30.70 ms │                             30.55 ms │ no change │
│ QQuery 4  │  223.75 ms │                            219.20 ms │ no change │
│ QQuery 5  │  273.54 ms │                            270.89 ms │ no change │
│ QQuery 6  │    1.24 ms │                              1.24 ms │ no change │
│ QQuery 7  │   12.98 ms │                             12.90 ms │ no change │
│ QQuery 8  │  323.33 ms │                            321.66 ms │ no change │
│ QQuery 9  │  436.33 ms │                            452.30 ms │ no change │
│ QQuery 10 │   70.33 ms │                             68.66 ms │ no change │
│ QQuery 11 │   81.32 ms │                             80.12 ms │ no change │
│ QQuery 12 │  264.58 ms │                            264.56 ms │ no change │
│ QQuery 13 │  363.34 ms │                            360.63 ms │ no change │
│ QQuery 14 │  279.69 ms │                            280.77 ms │ no change │
│ QQuery 15 │  268.77 ms │                            263.95 ms │ no change │
│ QQuery 16 │  607.40 ms │                            613.58 ms │ no change │
│ QQuery 17 │  610.19 ms │                            614.54 ms │ no change │
│ QQuery 18 │ 1249.79 ms │                           1265.66 ms │ no change │
│ QQuery 19 │   27.01 ms │                             27.16 ms │ no change │
│ QQuery 20 │  514.29 ms │                            514.97 ms │ no change │
│ QQuery 21 │  512.30 ms │                            511.36 ms │ no change │
│ QQuery 22 │  982.52 ms │                            985.65 ms │ no change │
│ QQuery 23 │ 3073.48 ms │                           3008.62 ms │ no change │
│ QQuery 24 │   41.95 ms │                             40.79 ms │ no change │
│ QQuery 25 │  110.31 ms │                            110.85 ms │ no change │
│ QQuery 26 │   41.04 ms │                             41.09 ms │ no change │
│ QQuery 27 │  513.24 ms │                            513.91 ms │ no change │
│ QQuery 28 │ 2885.33 ms │                           2907.21 ms │ no change │
│ QQuery 29 │   40.90 ms │                             41.10 ms │ no change │
│ QQuery 30 │  299.05 ms │                            302.21 ms │ no change │
│ QQuery 31 │  273.89 ms │                            280.04 ms │ no change │
│ QQuery 32 │  919.74 ms │                            914.38 ms │ no change │
│ QQuery 33 │ 1448.94 ms │                           1449.75 ms │ no change │
│ QQuery 34 │ 1439.74 ms │                           1445.86 ms │ no change │
│ QQuery 35 │  272.66 ms │                            271.80 ms │ no change │
│ QQuery 36 │   66.34 ms │                             65.64 ms │ no change │
│ QQuery 37 │   35.08 ms │                             35.80 ms │ no change │
│ QQuery 38 │   41.09 ms │                             42.82 ms │ no change │
│ QQuery 39 │  135.05 ms │                            136.92 ms │ no change │
│ QQuery 40 │   13.99 ms │                             13.88 ms │ no change │
│ QQuery 41 │   13.38 ms │                             13.43 ms │ no change │
│ QQuery 42 │   12.83 ms │                             13.04 ms │ no change │
└───────────┴────────────┴──────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 18860.20ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 18858.53ms │
│ Average Time (HEAD)                                 │   438.61ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │   438.57ms │
│ Queries Faster                                      │          0 │
│ Queries Slower                                      │          0 │
│ Queries with No Change                              │         43 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and claude_datafusion-issue-25116-75677f
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃  claude_datafusion-issue-25116-75677f ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.20 / 3.92 ±5.37 / 14.67 ms │          1.21 / 3.92 ±5.36 / 14.64 ms │     no change │
│ QQuery 1  │        11.68 / 11.89 ±0.13 / 12.07 ms │        11.76 / 11.90 ±0.16 / 12.15 ms │     no change │
│ QQuery 2  │        35.92 / 36.38 ±0.31 / 36.75 ms │        36.08 / 36.20 ±0.11 / 36.38 ms │     no change │
│ QQuery 3  │        30.70 / 31.23 ±0.76 / 32.74 ms │        30.55 / 30.76 ±0.17 / 30.90 ms │     no change │
│ QQuery 4  │     223.75 / 225.83 ±2.50 / 230.24 ms │     219.20 / 222.28 ±2.47 / 224.92 ms │     no change │
│ QQuery 5  │     273.54 / 275.84 ±1.38 / 277.22 ms │     270.89 / 274.52 ±1.94 / 276.20 ms │     no change │
│ QQuery 6  │           1.24 / 1.39 ±0.22 / 1.82 ms │           1.24 / 1.39 ±0.22 / 1.82 ms │     no change │
│ QQuery 7  │        12.98 / 13.20 ±0.15 / 13.44 ms │        12.90 / 12.96 ±0.05 / 13.04 ms │     no change │
│ QQuery 8  │     323.33 / 327.90 ±2.64 / 331.31 ms │     321.66 / 328.05 ±4.64 / 336.04 ms │     no change │
│ QQuery 9  │     436.33 / 446.60 ±6.42 / 456.32 ms │     452.30 / 457.84 ±4.02 / 463.66 ms │     no change │
│ QQuery 10 │        70.33 / 70.60 ±0.27 / 71.10 ms │        68.66 / 71.49 ±4.42 / 80.27 ms │     no change │
│ QQuery 11 │        81.32 / 83.75 ±3.78 / 91.26 ms │        80.12 / 80.61 ±0.49 / 81.55 ms │     no change │
│ QQuery 12 │     264.58 / 269.45 ±4.69 / 277.23 ms │     264.56 / 270.88 ±4.62 / 277.10 ms │     no change │
│ QQuery 13 │    363.34 / 376.70 ±17.85 / 411.08 ms │     360.63 / 366.98 ±4.80 / 371.78 ms │     no change │
│ QQuery 14 │     279.69 / 282.78 ±2.84 / 287.23 ms │     280.77 / 289.16 ±6.76 / 299.94 ms │     no change │
│ QQuery 15 │     268.77 / 278.23 ±6.15 / 285.01 ms │     263.95 / 270.12 ±5.12 / 278.99 ms │     no change │
│ QQuery 16 │     607.40 / 614.92 ±5.18 / 621.58 ms │     613.58 / 627.29 ±9.07 / 640.74 ms │     no change │
│ QQuery 17 │     610.19 / 620.10 ±6.77 / 630.95 ms │     614.54 / 627.60 ±7.11 / 636.09 ms │     no change │
│ QQuery 18 │ 1249.79 / 1265.87 ±13.59 / 1283.47 ms │ 1265.66 / 1286.53 ±21.35 / 1326.73 ms │     no change │
│ QQuery 19 │        27.01 / 28.83 ±3.38 / 35.59 ms │        27.16 / 27.33 ±0.20 / 27.72 ms │ +1.05x faster │
│ QQuery 20 │    514.29 / 534.27 ±23.57 / 578.97 ms │     514.97 / 520.04 ±4.14 / 524.21 ms │     no change │
│ QQuery 21 │     512.30 / 520.35 ±6.45 / 529.44 ms │     511.36 / 518.86 ±3.99 / 522.35 ms │     no change │
│ QQuery 22 │   982.52 / 990.81 ±10.18 / 1010.40 ms │    985.65 / 994.69 ±7.00 / 1006.53 ms │     no change │
│ QQuery 23 │ 3073.48 / 3100.51 ±20.37 / 3132.57 ms │ 3008.62 / 3038.40 ±25.67 / 3078.24 ms │     no change │
│ QQuery 24 │        41.95 / 44.47 ±2.23 / 47.50 ms │        40.79 / 43.14 ±3.83 / 50.75 ms │     no change │
│ QQuery 25 │     110.31 / 114.47 ±7.19 / 128.82 ms │     110.85 / 115.19 ±5.11 / 124.73 ms │     no change │
│ QQuery 26 │       41.04 / 47.74 ±12.53 / 72.78 ms │        41.09 / 44.57 ±4.72 / 53.89 ms │ +1.07x faster │
│ QQuery 27 │    513.24 / 531.44 ±15.99 / 558.31 ms │     513.91 / 521.98 ±7.28 / 534.76 ms │     no change │
│ QQuery 28 │ 2885.33 / 2927.59 ±23.81 / 2951.81 ms │ 2907.21 / 2942.99 ±28.88 / 2985.56 ms │     no change │
│ QQuery 29 │        40.90 / 44.50 ±6.52 / 57.52 ms │      41.10 / 63.55 ±35.85 / 134.16 ms │  1.43x slower │
│ QQuery 30 │     299.05 / 309.47 ±8.64 / 324.47 ms │    302.21 / 313.40 ±15.64 / 343.52 ms │     no change │
│ QQuery 31 │    273.89 / 297.94 ±19.00 / 325.28 ms │    280.04 / 295.66 ±13.39 / 318.01 ms │     no change │
│ QQuery 32 │    919.74 / 947.12 ±15.67 / 968.18 ms │    914.38 / 950.97 ±30.05 / 990.27 ms │     no change │
│ QQuery 33 │ 1448.94 / 1483.74 ±33.28 / 1546.00 ms │ 1449.75 / 1479.28 ±25.52 / 1519.70 ms │     no change │
│ QQuery 34 │ 1439.74 / 1495.03 ±33.86 / 1528.79 ms │ 1445.86 / 1502.97 ±50.94 / 1597.05 ms │     no change │
│ QQuery 35 │    272.66 / 300.25 ±37.44 / 373.98 ms │    271.80 / 298.23 ±26.73 / 348.57 ms │     no change │
│ QQuery 36 │        66.34 / 67.15 ±0.94 / 68.41 ms │        65.64 / 72.54 ±8.29 / 88.28 ms │  1.08x slower │
│ QQuery 37 │        35.08 / 35.45 ±0.45 / 36.30 ms │        35.80 / 36.72 ±1.30 / 39.29 ms │     no change │
│ QQuery 38 │        41.09 / 45.81 ±4.45 / 53.82 ms │        42.82 / 46.85 ±5.50 / 57.71 ms │     no change │
│ QQuery 39 │    135.05 / 151.92 ±10.88 / 168.86 ms │    136.92 / 151.83 ±12.28 / 168.88 ms │     no change │
│ QQuery 40 │        13.99 / 16.45 ±4.62 / 25.69 ms │        13.88 / 16.97 ±4.96 / 26.86 ms │     no change │
│ QQuery 41 │        13.38 / 16.88 ±4.09 / 21.95 ms │        13.43 / 13.65 ±0.20 / 13.93 ms │ +1.24x faster │
│ QQuery 42 │        12.83 / 13.33 ±0.65 / 14.57 ms │        13.04 / 15.45 ±4.46 / 24.36 ms │  1.16x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 19302.11ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 19295.70ms │
│ Average Time (HEAD)                                 │   448.89ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │   448.74ms │
│ Queries Faster                                      │          3 │
│ Queries Slower                                      │          3 │
│ Queries with No Change                              │         37 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 12.2 GiB
Avg memory 4.6 GiB
CPU user 987.0s
CPU sys 68.2s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 12.0 GiB
Avg memory 4.2 GiB
CPU user 985.0s
CPU sys 71.7s
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)

Comparing claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark clickbench_extended
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 claude_datafusion-issue-25116-75677f
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_datafusion-issue-25116-75677f ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │   783.31 ms │                            757.62 ms │     no change │
│ QQuery 1  │   194.61 ms │                            189.27 ms │     no change │
│ QQuery 2  │   459.13 ms │                            512.92 ms │  1.12x slower │
│ QQuery 3  │   314.12 ms │                            314.80 ms │     no change │
│ QQuery 4  │  1137.90 ms │                           1117.75 ms │     no change │
│ QQuery 5  │ 11099.83 ms │                          10615.10 ms │     no change │
│ QQuery 6  │     2.77 ms │                              2.58 ms │ +1.07x faster │
│ QQuery 7  │   733.70 ms │                            667.76 ms │ +1.10x faster │
│ QQuery 8  │   414.07 ms │                            418.55 ms │     no change │
│ QQuery 9  │  2967.17 ms │                           2988.42 ms │     no change │
│ QQuery 10 │   624.24 ms │                            643.00 ms │     no change │
│ QQuery 11 │  2276.36 ms │                           2299.17 ms │     no change │
│ QQuery 12 │   202.63 ms │                            188.90 ms │ +1.07x faster │
│ QQuery 13 │   573.06 ms │                            546.76 ms │     no change │
│ QQuery 14 │  2637.70 ms │                           2331.57 ms │ +1.13x faster │
└───────────┴─────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 24420.57ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 23594.17ms │
│ Average Time (HEAD)                                 │  1628.04ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  1572.94ms │
│ Queries Faster                                      │          4 │
│ Queries Slower                                      │          1 │
│ Queries with No Change                              │         10 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and claude_datafusion-issue-25116-75677f
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃      claude_datafusion-issue-25116-75677f ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        783.31 / 895.13 ±71.85 / 984.09 ms │        757.62 / 817.73 ±60.21 / 928.58 ms │ +1.09x faster │
│ QQuery 1  │         194.61 / 195.22 ±0.96 / 197.13 ms │         189.27 / 190.03 ±0.48 / 190.64 ms │     no change │
│ QQuery 2  │         459.13 / 462.90 ±2.40 / 466.61 ms │         512.92 / 520.64 ±7.37 / 530.67 ms │  1.12x slower │
│ QQuery 3  │         314.12 / 315.27 ±1.31 / 317.73 ms │         314.80 / 317.38 ±2.21 / 320.69 ms │     no change │
│ QQuery 4  │     1137.90 / 1179.10 ±25.13 / 1203.05 ms │     1117.75 / 1129.00 ±12.77 / 1150.78 ms │     no change │
│ QQuery 5  │ 11099.83 / 11626.79 ±314.08 / 11937.69 ms │ 10615.10 / 10977.58 ±253.20 / 11344.85 ms │ +1.06x faster │
│ QQuery 6  │               2.77 / 3.01 ±0.42 / 3.85 ms │               2.58 / 2.84 ±0.34 / 3.50 ms │ +1.06x faster │
│ QQuery 7  │        733.70 / 785.66 ±33.53 / 836.33 ms │        667.76 / 696.42 ±19.53 / 714.35 ms │ +1.13x faster │
│ QQuery 8  │         414.07 / 423.98 ±9.03 / 438.09 ms │        418.55 / 429.50 ±11.68 / 446.73 ms │     no change │
│ QQuery 9  │     2967.17 / 3027.53 ±68.42 / 3154.92 ms │     2988.42 / 3043.21 ±52.91 / 3128.10 ms │     no change │
│ QQuery 10 │        624.24 / 643.83 ±14.02 / 664.45 ms │         643.00 / 652.30 ±6.77 / 661.53 ms │     no change │
│ QQuery 11 │     2276.36 / 2332.74 ±89.15 / 2509.43 ms │     2299.17 / 2346.14 ±39.51 / 2388.29 ms │     no change │
│ QQuery 12 │        202.63 / 215.81 ±20.73 / 257.12 ms │        188.90 / 224.98 ±65.80 / 356.47 ms │     no change │
│ QQuery 13 │         573.06 / 575.59 ±2.96 / 581.15 ms │         546.76 / 551.04 ±7.48 / 565.91 ms │     no change │
│ QQuery 14 │    2637.70 / 2946.31 ±184.16 / 3158.77 ms │    2331.57 / 2469.08 ±102.59 / 2628.38 ms │ +1.19x faster │
└───────────┴───────────────────────────────────────────┴───────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 25628.86ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 24367.88ms │
│ Average Time (HEAD)                                 │  1708.59ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  1624.53ms │
│ Queries Faster                                      │          5 │
│ Queries Slower                                      │          1 │
│ Queries with No Change                              │          9 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 130.0s
Peak memory 11.7 GiB
Avg memory 5.2 GiB
CPU user 1140.7s
CPU sys 60.0s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 125.0s
Peak memory 11.4 GiB
Avg memory 4.9 GiB
CPU user 1087.0s
CPU sys 57.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)

Comparing claude/datafusion-issue-25116-75677f (3238cd6) to 4048898 (merge-base) diff

Run configuration
run benchmark external_aggr
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 claude_datafusion-issue-25116-75677f
--------------------
Benchmark external_aggr.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃      HEAD ┃ claude_datafusion-issue-25116-75677f ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1(64.0 MB)  │  53.09 ms │                             53.48 ms │ no change │
│ Q1(32.0 MB)  │  51.13 ms │                             51.30 ms │ no change │
│ Q1(16.0 MB)  │  48.00 ms │                             49.64 ms │ no change │
│ Q2(512.0 MB) │ 299.35 ms │                            291.22 ms │ no change │
│ Q2(256.0 MB) │ 270.96 ms │                            265.51 ms │ no change │
│ Q2(128.0 MB) │ 246.36 ms │                            242.21 ms │ no change │
│ Q2(64.0 MB)  │ 243.25 ms │                            241.67 ms │ no change │
│ Q2(32.0 MB)  │ 300.81 ms │                            300.62 ms │ no change │
└──────────────┴───────────┴──────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 1512.94ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 1495.65ms │
│ Average Time (HEAD)                                 │  189.12ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  186.96ms │
│ Queries Faster                                      │         0 │
│ Queries Slower                                      │         0 │
│ Queries with No Change                              │         8 │
│ Queries with Failure                                │         0 │
└─────────────────────────────────────────────────────┴───────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and claude_datafusion-issue-25116-75677f
--------------------
Benchmark external_aggr.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃                              HEAD ┃ claude_datafusion-issue-25116-75677f ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1(64.0 MB)  │    53.09 / 57.40 ±3.76 / 63.77 ms │       53.48 / 58.25 ±3.69 / 64.58 ms │ no change │
│ Q1(32.0 MB)  │    51.13 / 53.16 ±1.57 / 55.95 ms │       51.30 / 52.85 ±0.98 / 53.85 ms │ no change │
│ Q1(16.0 MB)  │    48.00 / 49.73 ±1.07 / 50.87 ms │       49.64 / 52.04 ±2.91 / 57.64 ms │ no change │
│ Q2(512.0 MB) │ 299.35 / 304.95 ±6.76 / 318.02 ms │    291.22 / 297.49 ±5.45 / 304.01 ms │ no change │
│ Q2(256.0 MB) │ 270.96 / 289.38 ±9.29 / 296.09 ms │   265.51 / 281.30 ±20.32 / 321.49 ms │ no change │
│ Q2(128.0 MB) │ 246.36 / 249.86 ±2.45 / 253.60 ms │    242.21 / 250.48 ±7.73 / 264.98 ms │ no change │
│ Q2(64.0 MB)  │ 243.25 / 246.55 ±4.42 / 255.15 ms │    241.67 / 243.38 ±1.43 / 245.94 ms │ no change │
│ Q2(32.0 MB)  │ 300.81 / 306.89 ±3.82 / 311.43 ms │    300.62 / 306.03 ±3.62 / 311.71 ms │ no change │
└──────────────┴───────────────────────────────────┴──────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 1557.90ms │
│ Total Time (claude_datafusion-issue-25116-75677f)   │ 1541.82ms │
│ Average Time (HEAD)                                 │  194.74ms │
│ Average Time (claude_datafusion-issue-25116-75677f) │  192.73ms │
│ Queries Faster                                      │         0 │
│ Queries Slower                                      │         0 │
│ Queries with No Change                              │         8 │
│ Queries with Failure                                │         0 │
└─────────────────────────────────────────────────────┴───────────┘

Memory Pool Peaks

Peak MemoryPool reservation per query — what DataFusion's accounting believes it reserved. Recorded only when the benchmark runs with DATAFUSION_RUNTIME_MEMORY_LIMIT set.

Base: 4048898 (merge-base) | Changed: claude/datafusion-issue-25116-75677f

external_aggr

Query Base Changed Change
1(64.0 MB) 35.0 MiB 35.0 MiB +0.0%
1(32.0 MB) 17.8 MiB 18.6 MiB +4.9%
1(16.0 MB) 11.4 MiB 11.3 MiB -0.9%
2(512.0 MB) 139.7 MiB 135.5 MiB -3.0%
2(256.0 MB) 98.5 MiB 97.6 MiB -0.9%
2(128.0 MB) 49.2 MiB 49.0 MiB -0.4%
2(64.0 MB) 30.5 MiB 30.5 MiB -0.0%
2(32.0 MB) 30.0 MiB 30.0 MiB +0.0%

Pool accounting vs. process RSS

Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.

Benchmark Side Max pool peak Peak RSS Gap RSS / pool
external_aggr base (4048898 (merge-base)) 139.7 MiB 476.3 MiB 336.6 MiB 3.4×
external_aggr changed (claude/datafusion-issue-25116-75677f) 135.5 MiB 457.6 MiB 322.1 MiB 3.4×
Resource Usage

external_aggr — base (merge-base)

Metric Value
Wall time 575.1s
Peak memory 476.3 MiB
Avg memory 8.6 MiB
CPU user 25.6s
CPU sys 4.1s
Peak spill 0 B

external_aggr — branch

Metric Value
Wall time 555.1s
Peak memory 457.6 MiB
Avg memory 8.5 MiB
CPU user 25.8s
CPU sys 3.8s
Peak spill 0 B

File an issue against this benchmark runner

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

Labels

functions Changes to functions implementation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GroupsAccumulatorAdapter: per-batch cost scales with total group count, not batch rows

2 participants