Skip to content

fix: stop pre-allocating and undercounting a hash table per COUNT(DISTINCT) group - #24857

Open
adriangb wants to merge 7 commits into
mainfrom
claude/bytes-map-initial-capacity-accounting
Open

fix: stop pre-allocating and undercounting a hash table per COUNT(DISTINCT) group#24857
adriangb wants to merge 7 commits into
mainfrom
claude/bytes-map-initial-capacity-accounting

Conversation

@adriangb

@adriangb adriangb commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

A grouped COUNT(DISTINCT <string>) over 4,000 groups holding 2 short strings each needs a 36 MB memory budget. It needs 2.0 MB after this change.

Every group gets its own hash table, and each table is allocated at warm-up size before the group holds anything, so the memory the query needs tracks the number of groups rather than the amount of data. The query also reports less memory than it holds, so a memory limit does not stop it at the right point.

Reproduction

This needs only datafusion-cli. There is no patch, no custom allocator and no data file.

-- repro.sql
SET datafusion.execution.target_partitions = 1;

-- 4,000 groups with 2 distinct short strings in each.
-- avg() stops SingleDistinctToGroupBy from rewriting the distinct aggregate away.
SELECT g, count(DISTINCT s) AS d, avg(p) AS a
FROM (
  SELECT v % 4000 AS g, 'v' || CAST(v AS VARCHAR) AS s, v AS p
  FROM generate_series(0, 7999) AS t(v)
)
GROUP BY g
ORDER BY g
LIMIT 3;
datafusion-cli -m 8M -f repro.sql

s is a Utf8View column, so this exercises ArrowBytesViewMap. The 8,000 rows arrive in one batch, so the aggregate builds all 4,000 accumulators before it can emit or spill.

Current main at 20d1c56761 fails:

Resources exhausted: Additional allocation failed for SingleHashAggregateStream[0] with top memory
consumers (across reservations) as:
  DataFusion-Cli#1(can spill: false) consumed 0.0 B, peak 0.0 B,
  SingleHashAggregateStream[0]#2(can spill: true) consumed 0.0 B, peak 48.0 B,
  TopK[0]#3(can spill: false) consumed 0.0 B, peak 0.0 B.
Error: Failed to allocate additional 111.1 MB for SingleHashAggregateStream[0] with 0.0 B already
allocated for this reservation - 8.0 MB remain available for the total memory pool:
greedy(used: 0.0 B, pool_size: 8.0 MB)

This branch returns the rows:

+---+---+--------+
| g | d | a      |
+---+---+--------+
| 0 | 2 | 2000.0 |
| 1 | 2 | 2001.0 |
| 2 | 2 | 2002.0 |
+---+---+--------+
3 row(s) fetched.
Elapsed 0.006 seconds.

Those 4,000 accumulators hold 8,000 short strings, which is about 100 KB of data. The base asks the pool for 111.1 MB to hold it. This branch runs the same query inside -m 3M. Both builds return the same rows, and the base does so at -m 200M. Each run takes well under a second, and the outcome repeats exactly over three runs on each side.

How much it improves

The minimum memory limit at which that query completes, bisected on each side:

value column before after
Utf8 fails 34 MB, passes 36 MB fails 1.8 MB, passes 2.0 MB
Utf8View fails 120 MB, passes 124 MB fails 2.4 MB, passes 2.6 MB

clickbench_extended at DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G, pool peak over six runs:

query base this branch change
Q2, grouped, 4 string distincts 98.1 to 98.6 MiB 11.7 MiB in all six runs -88.1%
Q1, ungrouped string distincts 3.4 MiB 2.4 MiB -29.4%
Q0, ungrouped, high cardinality 796.8 to 834.8 MiB 846.5 to 885.5 MiB +6.3%

Q2 is the only query in any benchmark suite that puts a grouped COUNT(DISTINCT) on a non-integer column.

Q0 costs more, and it is the one disclosed cost of this PR. Those extra bytes are memory Q0 always held and the pool could not see, not new allocation; appendix A has the three-build decomposition that separates the two. Latency does not move anywhere, which is what an allocation-sizing change should do.

Which issue does this PR close?

No existing issue. I found this when I investigated a production out of memory. I can file an issue if you want it in the changelog.

Rationale for this change

Pre-allocating is right for the one long-lived map behind a GROUP BY on a string column. It is wrong for the distinct-count accumulators, because GroupsAccumulatorAdapter creates one accumulator per group and most groups hold a handful of values. There the warm-up dwarfs the data.

Both maps also under-report the table they hold. ArrowBytesViewMap left the control bytes out. ArrowBytesMap charged the table only when it grew, so a map that stayed inside its pre-allocation reported its table as free forever. A memory limit acted on a number that was too small.

clear_shrink is the third part. The aggregate stream calls it to hand memory back before it spills and before a downstream sort. It restored the warm-up capacity instead of releasing it, so nothing came back.

What changes are included in this PR?

  • new on both maps allocates nothing. A new with_capacity keeps the previous pre-allocating behavior. GroupValuesBytes and GroupValuesBytesView use with_capacity, and the two distinct-count accumulators use new. A map remembers how it was built, so take warms it back up the way it started.
  • size() reports HashTable::allocation_size(), the real hashbrown allocation including the control bytes, in place of the old estimate.
  • A new clear_and_release drops every allocation the map holds, and clear_shrink calls it.
  • The value buffer rounds each growth up to a power of two. A lazily grown buffer and a pre-allocated one then sit on one ladder, so a lazy map is never the larger of the two for the same values. Growth stays geometric.
  • benches/arrow_bytes_map.rs moves to with_capacity so it keeps measuring the pre-allocating constructor.

What is the testing strategy for this PR?

Two tests in datafusion/core/tests/memory_limit/mod.rs, group_by_count_distinct_utf8 and group_by_count_distinct_utf8_view, turn the headline claim into a pass or a fail rather than a number. They run the reproduction query over 4,000 groups with spilling disabled and target_partitions pinned to 1, so completing means the query fits the budget rather than spills out of it. The limits are 8 MB and 16 MB, at least 4x clear of both cliffs in the table above. Both tests fail on the merge base and pass here, over five consecutive runs. The avg(payload) in the query is load bearing; appendix C says why.

Unit tests cover what the memory-limit tests cannot see: that new allocates nothing, that with_capacity reports a table size bracketed by an independently derived lower bound, that take preserves the configured capacity, that clear_shrink drops the reported size to near zero, and that a lazily grown buffer never exceeds a pre-allocated one holding the same values.

Run locally on the rebased head, all passing: datafusion-physical-expr-common (87 lib, 8 doc), datafusion-functions-aggregate-common (49), datafusion-functions-aggregate -- count_distinct (2), datafusion-physical-plan -- group_values (96) and the memory_limit module (39, which includes the count_distinct_spill test that arrived on main in #24888 and #24918). cargo fmt --check and cargo clippy --all-targets -D warnings are clean on the changed crates. CI has not yet run this branch against the new base.

No query results change.

Are there any user-facing changes?

Yes, in datafusion-physical-expr-common. ArrowBytesMap::new and ArrowBytesViewMap::new no longer pre-allocate, and callers that want the previous behavior should use the new with_capacity. Both types also gain clear_and_release. This changes an existing public constructor rather than adding one, so tell me if you would like the api change label.

For users, a grouped COUNT(DISTINCT) on string and binary columns uses much less memory and reports its usage to the MemoryPool accurately. A query that previously hit a memory limit may now succeed.


Appendix A: Query 0 costs 6.3% more

Q0 is COUNT(DISTINCT) over three high-cardinality strings with no GROUP BY. It is a handful of maps that each grow to millions of entries, which is the opposite population from the one this PR targets. The pre-allocation was never the dominant cost there, so removing it buys nothing.

Over six runs the base spans 796.8 to 834.8 MiB and this branch spans 846.5 to 885.5 MiB. The ranges do not overlap, so the effect is real and not run-to-run noise.

Three local builds on a deterministic subset separate the two changes. The middle build differs from the base only in the accounting, because restoring the warm-up makes the constructors byte-identical to base:

build Q0 pool peak
base 48,421,820
this branch with the warm-up restored 51,048,396
this branch 51,018,828

That decomposes the increase exactly. +2,626,576 is the accounting correction: allocation_size() charges the real hashbrown allocation, which is 4 * buckets + 5,384 more than the old formula, being the control bytes plus the 7/8 load-factor slack. -29,568 is the lazy constructor, which makes Q0 slightly better.

Reverting the accounting would restore an under-report of about 19% on this path. That under-report is the bug this PR exists to fix, and the memory-limit result above depends on fixing it.

Appendix B: what one accumulator costs

One per-group accumulator holding a single 24-byte value:

before, actual before, reported after
BytesDistinctCountAccumulator 14,648 B 8,240 B 180 B
BytesViewDistinctCountAccumulator 33,920 B 28,792 B 260 B

The middle column is the reporting gap. The Utf8 map really held 14,648 bytes and reported 8,240, because the whole hash table was invisible to the old accounting.

These are measured directly rather than asserted in a test, since the exact numbers follow the hashbrown layout.

Appendix C: notes on the tests and the benchmarks

The memory-limit query uses avg(payload), not count(*). A non-distinct count lets SingleDistinctToGroupBy rewrite the distinct aggregate into a plain two-stage GROUP BY. The per-group accumulators would then never exist, and the tests would pass by construction on the base commit too. That rule accepts a non-distinct sum, min or max because each re-aggregates its own partial results correctly over the deduplicated inner group by. avg does not, so the rule can never admit it under any extension, including the one #24859 proposes.

The benchmark figures were measured against the previous merge base da89c7c85b. They have not been re-run against the current base 20d1c56761. The commits after 84f07da on this branch touch only datafusion/core/tests/memory_limit/mod.rs, so nothing on this branch since then can move a benchmark, but the base itself has moved.

Pool peak is the instrument here, not peak RSS. Pool peak reproduces to under 1% on a 98 MiB query and exactly on the 3.4 and 11.7 MiB ones. Peak RSS on this harness has a 4.1% standard deviation over 11 readings of identical code plus a 2.3% order bias, and shows no effect from this change once that null is accounted for.

Follow-ups, not in this PR

  • The same undercount remains at five other production insert_accounted call sites: group_values/row.rs:171, multi_group_by/mod.rs:434,554, multi_group_by/dictionary.rs:197,584 and array_agg.rs:989. Each is one map per query, so the absolute error is bounded, and the fix is the same one-line swap.
  • The count_distinct_groups benchmarks in datafusion/functions-aggregate/benches/count_distinct.rs cover Int64, Int32 and UInt32 only, so this path has no criterion coverage.

@github-actions github-actions Bot added physical-expr Changes to the physical-expr crates functions Changes to functions implementation physical-plan Changes to the physical-plan crate labels Sep 1, 2026
@codecov-commenter

codecov-commenter commented Sep 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.35258% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.65%. Comparing base (20d1c56) to head (f31fc51).

Files with missing lines Patch % Lines
datafusion/physical-expr-common/src/binary_map.rs 96.18% 4 Missing and 1 partial ⚠️
...fusion/physical-expr-common/src/binary_view_map.rs 93.42% 5 Missing ⚠️
...c/aggregates/group_values/single_group_by/bytes.rs 96.66% 1 Missing ⚠️
...regates/group_values/single_group_by/bytes_view.rs 96.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #24857      +/-   ##
==========================================
+ Coverage   81.64%   81.65%   +0.01%     
==========================================
  Files        1123     1123              
  Lines      410248   410542     +294     
  Branches   410248   410542     +294     
==========================================
+ Hits       334940   335233     +293     
  Misses      55617    55617              
- Partials    19691    19692       +1     

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

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

@adriangb

adriangb commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned external_aggr
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G

@adriangb

adriangb commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5500225182-2071-jkjtq 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/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark external_aggr
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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-c5500225182-2070-4vmtd 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/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.23 ms │                                      1.32 ms │  1.08x slower │
│ QQuery 1  │   11.87 ms │                                     12.24 ms │     no change │
│ QQuery 2  │   37.03 ms │                                     37.14 ms │     no change │
│ QQuery 3  │   30.75 ms │                                     31.12 ms │     no change │
│ QQuery 4  │  223.17 ms │                                    221.08 ms │     no change │
│ QQuery 5  │  285.25 ms │                                    270.37 ms │ +1.06x faster │
│ QQuery 6  │    1.29 ms │                                      1.26 ms │     no change │
│ QQuery 7  │   13.79 ms │                                     13.00 ms │ +1.06x faster │
│ QQuery 8  │  337.69 ms │                                    324.59 ms │     no change │
│ QQuery 9  │  464.26 ms │                                    447.01 ms │     no change │
│ QQuery 10 │   69.85 ms │                                     69.34 ms │     no change │
│ QQuery 11 │   80.66 ms │                                     79.62 ms │     no change │
│ QQuery 12 │  264.12 ms │                                    263.94 ms │     no change │
│ QQuery 13 │  947.17 ms │                                    958.24 ms │     no change │
│ QQuery 14 │  282.13 ms │                                    281.33 ms │     no change │
│ QQuery 15 │  263.04 ms │                                    315.06 ms │  1.20x slower │
│ QQuery 16 │ 1233.84 ms │                                   1230.73 ms │     no change │
│ QQuery 17 │  894.36 ms │                                    892.01 ms │     no change │
│ QQuery 18 │ 2499.59 ms │                                   2436.75 ms │     no change │
│ QQuery 19 │   29.97 ms │                                     28.02 ms │ +1.07x faster │
│ QQuery 20 │  512.10 ms │                                    518.54 ms │     no change │
│ QQuery 21 │  512.03 ms │                                    517.63 ms │     no change │
│ QQuery 22 │  988.93 ms │                                    983.27 ms │     no change │
│ QQuery 23 │ 2987.12 ms │                                   2961.53 ms │     no change │
│ QQuery 24 │   42.32 ms │                                     40.54 ms │     no change │
│ QQuery 25 │  110.79 ms │                                    109.66 ms │     no change │
│ QQuery 26 │   42.14 ms │                                     40.99 ms │     no change │
│ QQuery 27 │  509.97 ms │                                    507.01 ms │     no change │
│ QQuery 28 │ 2894.22 ms │                                   2923.06 ms │     no change │
│ QQuery 29 │   40.70 ms │                                     41.01 ms │     no change │
│ QQuery 30 │  300.43 ms │                                    298.54 ms │     no change │
│ QQuery 31 │  272.84 ms │                                    276.82 ms │     no change │
│ QQuery 32 │ 3273.28 ms │                                   3195.54 ms │     no change │
│ QQuery 33 │ 2542.24 ms │                                   2548.40 ms │     no change │
│ QQuery 34 │ 2571.08 ms │                                   2612.72 ms │     no change │
│ QQuery 35 │  275.22 ms │                                    273.74 ms │     no change │
│ QQuery 36 │   67.98 ms │                                     64.78 ms │     no change │
│ QQuery 37 │   35.54 ms │                                     35.25 ms │     no change │
│ QQuery 38 │   42.61 ms │                                     39.68 ms │ +1.07x faster │
│ QQuery 39 │  131.98 ms │                                    129.49 ms │     no change │
│ QQuery 40 │   13.82 ms │                                     13.64 ms │     no change │
│ QQuery 41 │   13.57 ms │                                     13.26 ms │     no change │
│ QQuery 42 │   13.25 ms │                                     12.77 ms │     no change │
└───────────┴────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 26165.22ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 26072.05ms │
│ Average Time (HEAD)                                         │   608.49ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │   606.33ms │
│ Queries Faster                                              │          4 │
│ Queries Slower                                              │          2 │
│ Queries with No Change                                      │         37 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │           1.23 / 4.06 ±5.38 / 14.82 ms │                 1.32 / 4.36 ±5.91 / 16.18 ms │  1.07x slower │
│ QQuery 1  │         11.87 / 11.94 ±0.08 / 12.10 ms │               12.24 / 12.61 ±0.27 / 12.95 ms │  1.06x slower │
│ QQuery 2  │         37.03 / 37.49 ±0.32 / 37.98 ms │               37.14 / 37.73 ±0.37 / 38.18 ms │     no change │
│ QQuery 3  │         30.75 / 31.60 ±0.76 / 32.93 ms │               31.12 / 31.74 ±0.69 / 32.99 ms │     no change │
│ QQuery 4  │     223.17 / 243.68 ±15.91 / 260.98 ms │            221.08 / 224.88 ±4.37 / 232.98 ms │ +1.08x faster │
│ QQuery 5  │      285.25 / 290.21 ±5.57 / 300.90 ms │            270.37 / 277.03 ±6.09 / 287.91 ms │     no change │
│ QQuery 6  │            1.29 / 1.44 ±0.22 / 1.87 ms │                  1.26 / 1.40 ±0.22 / 1.82 ms │     no change │
│ QQuery 7  │         13.79 / 14.95 ±1.85 / 18.63 ms │               13.00 / 13.12 ±0.09 / 13.25 ms │ +1.14x faster │
│ QQuery 8  │     337.69 / 347.18 ±12.36 / 370.95 ms │            324.59 / 331.44 ±4.33 / 336.10 ms │     no change │
│ QQuery 9  │      464.26 / 467.05 ±1.90 / 469.66 ms │            447.01 / 455.74 ±9.75 / 473.92 ms │     no change │
│ QQuery 10 │         69.85 / 73.01 ±4.83 / 82.61 ms │               69.34 / 69.73 ±0.43 / 70.50 ms │     no change │
│ QQuery 11 │         80.66 / 81.35 ±0.58 / 82.41 ms │               79.62 / 80.60 ±0.70 / 81.47 ms │     no change │
│ QQuery 12 │      264.12 / 270.83 ±4.24 / 276.22 ms │            263.94 / 271.24 ±5.45 / 278.74 ms │     no change │
│ QQuery 13 │      947.17 / 961.22 ±8.45 / 972.87 ms │           958.24 / 970.47 ±12.66 / 994.02 ms │     no change │
│ QQuery 14 │      282.13 / 284.23 ±2.33 / 288.74 ms │           281.33 / 310.02 ±14.60 / 321.02 ms │  1.09x slower │
│ QQuery 15 │      263.04 / 268.74 ±5.92 / 280.04 ms │            315.06 / 318.95 ±4.09 / 325.97 ms │  1.19x slower │
│ QQuery 16 │  1233.84 / 1262.17 ±22.84 / 1298.97 ms │        1230.73 / 1324.19 ±51.98 / 1376.75 ms │     no change │
│ QQuery 17 │     894.36 / 929.71 ±25.94 / 967.95 ms │           892.01 / 939.67 ±34.45 / 988.98 ms │     no change │
│ QQuery 18 │  2499.59 / 2568.04 ±76.59 / 2674.70 ms │        2436.75 / 2477.07 ±27.94 / 2517.30 ms │     no change │
│ QQuery 19 │         29.97 / 31.76 ±2.48 / 36.52 ms │               28.02 / 30.83 ±3.70 / 37.66 ms │     no change │
│ QQuery 20 │     512.10 / 529.24 ±15.08 / 551.64 ms │            518.54 / 525.61 ±5.47 / 532.44 ms │     no change │
│ QQuery 21 │      512.03 / 516.78 ±4.90 / 525.33 ms │            517.63 / 527.16 ±8.43 / 539.28 ms │     no change │
│ QQuery 22 │   988.93 / 1003.97 ±11.57 / 1019.44 ms │            983.27 / 986.60 ±3.36 / 991.15 ms │     no change │
│ QQuery 23 │  2987.12 / 3034.87 ±26.46 / 3065.23 ms │        2961.53 / 3042.62 ±79.27 / 3177.07 ms │     no change │
│ QQuery 24 │        42.32 / 49.37 ±12.31 / 73.93 ms │               40.54 / 42.40 ±3.01 / 48.39 ms │ +1.16x faster │
│ QQuery 25 │      110.79 / 114.05 ±2.95 / 118.96 ms │            109.66 / 118.71 ±9.38 / 131.77 ms │     no change │
│ QQuery 26 │         42.14 / 42.83 ±0.90 / 44.54 ms │               40.99 / 41.32 ±0.46 / 42.19 ms │     no change │
│ QQuery 27 │      509.97 / 517.58 ±8.40 / 530.46 ms │            507.01 / 517.48 ±7.45 / 529.40 ms │     no change │
│ QQuery 28 │  2894.22 / 2965.95 ±57.94 / 3052.00 ms │        2923.06 / 3014.22 ±87.54 / 3152.23 ms │     no change │
│ QQuery 29 │         40.70 / 49.12 ±9.85 / 63.66 ms │               41.01 / 41.28 ±0.21 / 41.59 ms │ +1.19x faster │
│ QQuery 30 │      300.43 / 310.25 ±8.78 / 325.15 ms │            298.54 / 309.37 ±9.10 / 321.54 ms │     no change │
│ QQuery 31 │      272.84 / 284.09 ±7.19 / 293.05 ms │            276.82 / 293.77 ±8.93 / 302.74 ms │     no change │
│ QQuery 32 │ 3273.28 / 3434.58 ±141.98 / 3640.55 ms │        3195.54 / 3315.02 ±98.24 / 3475.47 ms │     no change │
│ QQuery 33 │  2542.24 / 2618.04 ±42.80 / 2664.49 ms │        2548.40 / 2613.45 ±51.35 / 2686.77 ms │     no change │
│ QQuery 34 │  2571.08 / 2652.97 ±59.28 / 2736.72 ms │        2612.72 / 2684.77 ±79.48 / 2839.62 ms │     no change │
│ QQuery 35 │     275.22 / 293.18 ±21.73 / 334.99 ms │            273.74 / 279.79 ±3.21 / 282.44 ms │     no change │
│ QQuery 36 │       67.98 / 76.97 ±14.42 / 105.60 ms │             64.78 / 78.58 ±16.44 / 110.77 ms │     no change │
│ QQuery 37 │         35.54 / 37.11 ±1.86 / 40.68 ms │               35.25 / 37.01 ±1.35 / 38.82 ms │     no change │
│ QQuery 38 │         42.61 / 44.76 ±2.18 / 48.97 ms │               39.68 / 40.95 ±0.97 / 42.32 ms │ +1.09x faster │
│ QQuery 39 │      131.98 / 145.08 ±8.45 / 153.71 ms │           129.49 / 141.03 ±11.90 / 163.19 ms │     no change │
│ QQuery 40 │         13.82 / 14.28 ±0.25 / 14.54 ms │               13.64 / 14.35 ±0.80 / 15.92 ms │     no change │
│ QQuery 41 │         13.57 / 13.80 ±0.32 / 14.43 ms │               13.26 / 13.45 ±0.15 / 13.69 ms │     no change │
│ QQuery 42 │         13.25 / 15.52 ±2.64 / 19.62 ms │               12.77 / 13.00 ±0.17 / 13.24 ms │ +1.19x faster │
└───────────┴────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 26945.09ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 26874.74ms │
│ Average Time (HEAD)                                         │   626.63ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │   624.99ms │
│ Queries Faster                                              │          6 │
│ Queries Slower                                              │          4 │
│ Queries with No Change                                      │         33 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_partitioned

Query Base Changed Change
Query 0 0 B 0 B 0.0%
Query 1 104 B 104 B +0.0%
Query 2 936 B 936 B +0.0%
Query 3 312 B 312 B +0.0%
Query 4 774.7 MiB 772.2 MiB -0.3%
Query 5 1.2 GiB 1.2 GiB +1.5%
Query 6 0 B 0 B 0.0%
Query 7 60.0 MiB 50.2 MiB -16.4%
Query 8 875.0 MiB 868.6 MiB -0.7%
Query 9 551.9 MiB 593.9 MiB +7.6%
Query 10 106.0 MiB 115.6 MiB +9.0%
Query 11 112.2 MiB 109.3 MiB -2.6%
Query 12 1.3 GiB 1.4 GiB +4.1%
Query 13 1013.0 MiB 1.0 GiB +4.1%
Query 14 1.3 GiB 1.3 GiB +2.0%
Query 15 1.2 GiB 1.1 GiB -1.2%
Query 16 2.0 GiB 1.9 GiB -2.7%
Query 17 1.7 GiB 2.2 GiB +32.0%
Query 18 1.9 GiB 1.9 GiB +0.5%
Query 19 0 B 0 B 0.0%
Query 20 104 B 104 B +0.0%
Query 21 3.6 MiB 3.3 MiB -9.0%
Query 22 3.0 MiB 3.1 MiB +2.9%
Query 23 26.0 MiB 27.1 MiB +4.2%
Query 24 60.1 MiB 59.3 MiB -1.4%
Query 25 182.1 MiB 176.2 MiB -3.2%
Query 26 64.9 MiB 63.1 MiB -2.7%
Query 27 2.2 MiB 2.4 MiB +10.0%
Query 28 1.5 GiB 1.5 GiB -3.6%
Query 29 624 B 624 B +0.0%
Query 30 740.3 MiB 729.6 MiB -1.4%
Query 31 1.6 GiB 1.5 GiB -5.8%
Query 32 927.3 MiB 967.7 MiB +4.4%
Query 33 2.0 GiB 2.1 GiB +5.8%
Query 34 2.1 GiB 2.2 GiB +2.3%
Query 35 597.1 MiB 614.0 MiB +2.8%
Query 36 124.1 MiB 112.6 MiB -9.3%
Query 37 6.9 MiB 6.6 MiB -4.6%
Query 38 5.6 MiB 5.4 MiB -4.7%
Query 39 298.1 MiB 297.5 MiB -0.2%
Query 40 2.0 MiB 1.7 MiB -14.4%
Query 41 3.1 MiB 3.1 MiB +0.0%
Query 42 1.6 MiB 1.8 MiB +12.5%

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
clickbench_partitioned base (da89c7c (merge-base)) 2.1 GiB 9.3 GiB 7.2 GiB 4.4×
clickbench_partitioned changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 9.6 GiB 7.4 GiB 4.4×
Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 140.0s
Peak memory 9.3 GiB
Avg memory 5.7 GiB
CPU user 1375.0s
CPU sys 130.4s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 135.0s
Peak memory 9.6 GiB
Avg memory 5.4 GiB
CPU user 1365.1s
CPU sys 129.7s
Peak spill 0 B

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-c5500235371-2073-mrv44 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/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark external_aggr
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark external_aggr.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1(64.0 MB)  │  54.18 ms │                                     52.13 ms │ no change │
│ Q1(32.0 MB)  │  49.54 ms │                                     51.82 ms │ no change │
│ Q1(16.0 MB)  │  47.47 ms │                                     48.32 ms │ no change │
│ Q2(512.0 MB) │ 271.98 ms │                                    279.84 ms │ no change │
│ Q2(256.0 MB) │ 260.04 ms │                                    266.66 ms │ no change │
│ Q2(128.0 MB) │ 242.68 ms │                                    247.07 ms │ no change │
│ Q2(64.0 MB)  │ 241.69 ms │                                    243.40 ms │ no change │
│ Q2(32.0 MB)  │ 303.67 ms │                                    309.17 ms │ no change │
└──────────────┴───────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 1471.25ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 1498.41ms │
│ Average Time (HEAD)                                         │  183.91ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  187.30ms │
│ 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_bytes-map-initial-capacity-accounting
--------------------
Benchmark external_aggr.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃                               HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1(64.0 MB)  │     54.18 / 56.90 ±3.65 / 64.10 ms │               52.13 / 55.86 ±4.02 / 63.35 ms │ no change │
│ Q1(32.0 MB)  │     49.54 / 51.81 ±1.14 / 52.47 ms │               51.82 / 52.37 ±0.58 / 53.49 ms │ no change │
│ Q1(16.0 MB)  │     47.47 / 49.70 ±1.25 / 51.14 ms │               48.32 / 50.12 ±2.65 / 55.37 ms │ no change │
│ Q2(512.0 MB) │ 271.98 / 287.24 ±10.43 / 299.89 ms │            279.84 / 285.28 ±6.77 / 298.19 ms │ no change │
│ Q2(256.0 MB) │ 260.04 / 286.63 ±23.42 / 324.59 ms │           266.66 / 286.57 ±10.78 / 296.15 ms │ no change │
│ Q2(128.0 MB) │  242.68 / 247.19 ±3.10 / 250.81 ms │            247.07 / 255.69 ±6.26 / 263.97 ms │ no change │
│ Q2(64.0 MB)  │ 241.69 / 251.69 ±14.02 / 279.49 ms │            243.40 / 246.04 ±1.64 / 248.52 ms │ no change │
│ Q2(32.0 MB)  │  303.67 / 308.53 ±2.78 / 311.25 ms │            309.17 / 311.02 ±1.50 / 313.29 ms │ no change │
└──────────────┴────────────────────────────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 1539.69ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 1542.94ms │
│ Average Time (HEAD)                                         │  192.46ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  192.87ms │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

external_aggr

Query Base Changed Change
1(64.0 MB) 36.8 MiB 36.8 MiB +0.0%
1(32.0 MB) 17.8 MiB 18.7 MiB +5.3%
1(16.0 MB) 11.3 MiB 11.4 MiB +0.4%
2(512.0 MB) 137.1 MiB 137.0 MiB -0.1%
2(256.0 MB) 97.9 MiB 97.9 MiB +0.0%
2(128.0 MB) 49.0 MiB 49.4 MiB +0.7%
2(64.0 MB) 29.2 MiB 29.2 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 (da89c7c (merge-base)) 137.1 MiB 418.8 MiB 281.7 MiB 3.1×
external_aggr changed (claude/bytes-map-initial-capacity-accounting) 137.0 MiB 445.6 MiB 308.6 MiB 3.3×
Resource Usage

external_aggr — base (merge-base)

Metric Value
Wall time 510.1s
Peak memory 418.8 MiB
Avg memory 8.8 MiB
CPU user 25.8s
CPU sys 3.7s
Peak spill 0 B

external_aggr — branch

Metric Value
Wall time 520.1s
Peak memory 445.6 MiB
Avg memory 8.6 MiB
CPU user 21.9s
CPU sys 3.1s
Peak spill 0 B

File an issue against this benchmark runner

@github-actions github-actions Bot added the core Core DataFusion crate label Sep 1, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing claude/bytes-map-initial-capacity-accounting (84f07da) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │   759.73 ms │                                    777.73 ms │     no change │
│ QQuery 1  │   191.85 ms │                                    188.58 ms │     no change │
│ QQuery 2  │   461.18 ms │                                    449.45 ms │     no change │
│ QQuery 3  │   316.36 ms │                                    315.46 ms │     no change │
│ QQuery 4  │  1939.19 ms │                                   1972.42 ms │     no change │
│ QQuery 5  │ 17961.07 ms │                                  18770.57 ms │     no change │
│ QQuery 6  │     2.71 ms │                                      2.51 ms │ +1.08x faster │
│ QQuery 7  │  6780.67 ms │                                   6541.07 ms │     no change │
│ QQuery 8  │   413.85 ms │                                    407.70 ms │     no change │
│ QQuery 9  │  2685.46 ms │                                   2806.90 ms │     no change │
│ QQuery 10 │   634.33 ms │                                    657.00 ms │     no change │
│ QQuery 11 │  1907.91 ms │                                   1769.18 ms │ +1.08x faster │
│ QQuery 12 │   199.35 ms │                                    187.42 ms │ +1.06x faster │
│ QQuery 13 │   567.73 ms │                                    537.52 ms │ +1.06x faster │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 34821.39ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35383.52ms │
│ Average Time (HEAD)                                         │  2487.24ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2527.39ms │
│ Queries Faster                                              │          4 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         10 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │      759.73 / 933.63 ±104.69 / 1025.92 ms │           777.73 / 847.50 ±54.54 / 904.14 ms │ +1.10x faster │
│ QQuery 1  │         191.85 / 192.97 ±0.72 / 194.07 ms │            188.58 / 189.46 ±0.60 / 190.27 ms │     no change │
│ QQuery 2  │         461.18 / 463.94 ±2.29 / 466.71 ms │            449.45 / 452.25 ±2.86 / 457.44 ms │     no change │
│ QQuery 3  │         316.36 / 320.10 ±2.65 / 323.24 ms │            315.46 / 317.01 ±1.64 / 320.03 ms │     no change │
│ QQuery 4  │     1939.19 / 2044.28 ±93.88 / 2205.14 ms │        1972.42 / 2012.03 ±32.28 / 2066.64 ms │     no change │
│ QQuery 5  │ 17961.07 / 18599.98 ±361.16 / 18964.48 ms │    18770.57 / 18949.41 ±196.42 / 19309.14 ms │     no change │
│ QQuery 6  │               2.71 / 3.47 ±1.14 / 5.69 ms │                  2.51 / 2.92 ±0.33 / 3.46 ms │ +1.19x faster │
│ QQuery 7  │  6780.67 / 8768.03 ±1639.91 / 10478.13 ms │      6541.07 / 7831.91 ±1401.44 / 9664.85 ms │ +1.12x faster │
│ QQuery 8  │         413.85 / 417.29 ±2.91 / 422.35 ms │            407.70 / 411.63 ±2.71 / 415.64 ms │     no change │
│ QQuery 9  │     2685.46 / 2737.34 ±60.65 / 2850.29 ms │       2806.90 / 2955.32 ±135.85 / 3181.21 ms │  1.08x slower │
│ QQuery 10 │         634.33 / 646.41 ±9.42 / 658.78 ms │            657.00 / 669.50 ±8.53 / 678.26 ms │     no change │
│ QQuery 11 │    1907.91 / 2042.36 ±129.72 / 2281.30 ms │       1769.18 / 1963.90 ±112.13 / 2082.76 ms │     no change │
│ QQuery 12 │         199.35 / 206.27 ±5.83 / 214.17 ms │           187.42 / 202.18 ±19.45 / 240.46 ms │     no change │
│ QQuery 13 │        567.73 / 585.03 ±16.61 / 610.85 ms │           537.52 / 562.53 ±27.74 / 614.97 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37961.07ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37367.55ms │
│ Average Time (HEAD)                                         │  2711.51ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2669.11ms │
│ Queries Faster                                              │          3 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         10 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 812.8 MiB 846.5 MiB +4.1%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.6 MiB 11.7 MiB -88.1%
Query 3 11.8 MiB 11.7 MiB -0.9%
Query 4 1.4 GiB 1.4 GiB +0.1%
Query 5 1.5 GiB 1.5 GiB -0.0%
Query 6 104 B 104 B +0.0%
Query 7 1.3 GiB 1.2 GiB -1.9%
Query 8 37.2 MiB 37.3 MiB +0.4%
Query 9 2.1 GiB 2.1 GiB -0.5%
Query 10 1.9 MiB 2.1 MiB +10.5%
Query 11 2.2 GiB 2.2 GiB -0.5%
Query 12 1.3 MiB 1.0 MiB -21.2%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.2 GiB 9.9 GiB 7.7 GiB 4.5×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 10.7 GiB 8.5 GiB 4.9×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 195.0s
Peak memory 9.9 GiB
Avg memory 3.7 GiB
CPU user 1920.2s
CPU sys 108.2s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 10.7 GiB
Avg memory 4.4 GiB
CPU user 1873.9s
CPU sys 110.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Summary of benchmarks and measurements

Consolidating the evidence for this PR in one place, including the parts that are not yet settled.

1. Minimum viable memory budget (strongest evidence)

Two tests added in datafusion/core/tests/memory_limit/. The query is
select group_key, count(distinct value), avg(payload) from t group by group_key
over 4,000 keys with 2 distinct short values each, target_partitions = 1, spilling disabled.
The minimum memory limit at which it completes, bisected on each side:

value column before after reduction
Utf8 fails 34 MB, passes 36 MB fails 1.8 MB, passes 2.0 MB ~18x
Utf8View fails 120 MB, passes 124 MB fails 2.4 MB, passes 2.6 MB ~46x

The tests are pinned at 8 MB and 16 MB, at least 4x clear of both cliffs, and were verified to
fail on the merge-base and pass on this branch, with five consecutive repeat runs green.

The avg(payload) is deliberate rather than incidental: a non-distinct count would let
SingleDistinctToGroupBy rewrite the aggregate away, so the per-group accumulators would never
exist and the test would pass for the wrong reason. avg cannot be admitted by that rule under
any extension, because averaging per-group averages is arithmetically wrong.

2. Per-accumulator footprint

One per-group accumulator holding a single 24-byte value, measured on the merge-base and on this
branch:

before, actual before, reported after
BytesDistinctCountAccumulator 14,648 B 8,240 B 180 B
BytesViewDistinctCountAccumulator 33,920 B 28,792 B 260 B

Two separate defects show up in that table. The pre-allocation is the large one. The reporting
gap is the second: ArrowBytesViewMap seeded map_size from
capacity() * size_of::<Entry<V>>(), which omits the control bytes and under-reports by 1.18x,
while ArrowBytesMap seeded it with 0 despite pre-allocating, so any map staying under its
pre-allocated capacity reported its hash table as free indefinitely.

3. Benchmarks, memory

clickbench_extended at DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G
(results).
Q2 is SELECT "BrowserCountry", COUNT(DISTINCT "SocialNetwork"), COUNT(DISTINCT "HitColor"), COUNT(DISTINCT "BrowserLanguage"), COUNT(DISTINCT "SocialAction") FROM hits GROUP BY 1, which is
the only query in the benchmark suites that puts a grouped COUNT(DISTINCT) on a non-integer
column and therefore the only one that reaches this code:

query base changed change
Q2 (grouped, 4 string distincts) 98.6 MiB 11.7 MiB -88.1%
Q1 (ungrouped string distincts) 3.4 MiB 2.4 MiB -29.4%
Q12 1.3 MiB 1.0 MiB -21.2%

Everything else moves by less than 5% in either direction. Worth stating plainly: this rests on a
single run of a single query, because no other benchmark query exercises the path. The
memory-limit tests in section 1 are the more reliable evidence.

Other suites at the same limit:
clickbench_partitioned,
external_aggr.
Neither contains a grouped non-integer distinct count, so neither shows movement, as expected.

4. Benchmarks, latency

No effect, which is the expected result for an allocation-sizing change. clickbench_extended
totals 37,961 ms against 37,367 ms, with 3 queries faster, 1 slower and 10 unchanged, all inside
run-to-run noise. No query failed and no spilling occurred on either side.

5. Open: peak RSS

Peak process RSS rose on all three runs: 9.3 to 9.6 GiB on clickbench_partitioned, 418.8 to
445.6 MiB on external_aggr, and 9.9 to 10.7 GiB on clickbench_extended. The direction is
consistent and the magnitude roughly tracks how much each suite uses the changed path.

It is not yet clear whether that is real. A companion accounting-only change that cannot alter
allocation moved RSS by -8.1%, -7.4% and +3.6% across the same three suites, so this harness shows
at least +/-8% single-run spread and these deltas sit inside it. Repeat runs, including
base-against-base to establish a null distribution, are in progress and will be posted here.

If the effect is real, the likely mechanism is allocator retention rather than live memory:
growing a table from zero by doubling costs log2(N) reallocations per accumulator where there was
previously one up-front allocation, and freed blocks return to allocator free lists rather than to
the OS. The mitigation would be a small non-zero initial capacity, on the order of 8 entries,
which keeps nearly all of the reduction (most per-group sets hold fewer than ten values) while
eliminating the growth steps for the common case. That variant will be measured before any
recommendation is made.

@adriangb

adriangb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended clickbench_extended clickbench_extended

Noise floor, not a comparison of this PR.

Both sides are pinned to da89c7c, the merge-base the earlier

clickbench_extended run used, so the two sides compile identical code and

every difference reported below is harness noise. Three jobs give three

independent A/A readings of peak RSS and of the per-query pool peaks.

env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G
baseline:
ref: da89c7c
changed:
ref: da89c7c

@adriangb

adriangb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended clickbench_extended clickbench_extended

Three repeats of the comparison in

#24857 (comment),

with both sides pinned so the repeats measure the same two commits.

84f07da is the last commit on this branch that changes benchmarked code;

the two commits after it touch only

datafusion/core/tests/memory_limit/mod.rs.

env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G
baseline:
ref: da89c7c
changed:
ref: 84f07da

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5513546272-2088-qb6v2 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 da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"

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-c5513547244-2092-mcrlg 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 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"

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-c5513547244-2093-wfjnv 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 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"

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-c5513546272-2090-k2bq4 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 da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"

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-c5513547244-2091-l8kw8 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 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"

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-c5513546272-2089-7cg8s 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 da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"

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 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │   762.47 ms │                                    748.38 ms │ no change │
│ QQuery 1  │   190.59 ms │                                    189.39 ms │ no change │
│ QQuery 2  │   452.71 ms │                                    449.91 ms │ no change │
│ QQuery 3  │   315.01 ms │                                    313.54 ms │ no change │
│ QQuery 4  │  1968.51 ms │                                   1980.74 ms │ no change │
│ QQuery 5  │ 18190.62 ms │                                  18164.06 ms │ no change │
│ QQuery 6  │     2.69 ms │                                      2.61 ms │ no change │
│ QQuery 7  │  6266.17 ms │                                   6290.68 ms │ no change │
│ QQuery 8  │   417.86 ms │                                    411.02 ms │ no change │
│ QQuery 9  │  2810.66 ms │                                   2691.79 ms │ no change │
│ QQuery 10 │   626.11 ms │                                    631.85 ms │ no change │
│ QQuery 11 │  1881.58 ms │                                   1936.01 ms │ no change │
│ QQuery 12 │   186.88 ms │                                    187.98 ms │ no change │
│ QQuery 13 │   540.90 ms │                                    546.30 ms │ no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 34612.78ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 34544.27ms │
│ Average Time (HEAD)                                         │  2472.34ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2467.45ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        762.47 / 776.48 ±12.90 / 798.60 ms │           748.38 / 761.05 ±10.11 / 778.08 ms │     no change │
│ QQuery 1  │         190.59 / 190.98 ±0.30 / 191.28 ms │            189.39 / 189.83 ±0.31 / 190.17 ms │     no change │
│ QQuery 2  │         452.71 / 457.08 ±4.09 / 463.63 ms │            449.91 / 453.08 ±3.18 / 459.14 ms │     no change │
│ QQuery 3  │         315.01 / 316.60 ±1.27 / 318.49 ms │            313.54 / 317.72 ±3.84 / 323.07 ms │     no change │
│ QQuery 4  │      1968.51 / 1980.18 ±9.66 / 1994.51 ms │        1980.74 / 2011.29 ±20.67 / 2034.72 ms │     no change │
│ QQuery 5  │ 18190.62 / 18569.72 ±237.08 / 18769.09 ms │    18164.06 / 18410.15 ±227.27 / 18796.82 ms │     no change │
│ QQuery 6  │               2.69 / 2.96 ±0.32 / 3.59 ms │                  2.61 / 2.84 ±0.33 / 3.48 ms │     no change │
│ QQuery 7  │  6266.17 / 7492.72 ±1816.65 / 11108.38 ms │       6290.68 / 6560.78 ±167.94 / 6742.35 ms │ +1.14x faster │
│ QQuery 8  │         417.86 / 422.86 ±6.00 / 434.55 ms │            411.02 / 415.56 ±3.03 / 419.36 ms │     no change │
│ QQuery 9  │     2810.66 / 2873.16 ±35.94 / 2910.16 ms │       2691.79 / 2843.33 ±102.95 / 2977.76 ms │     no change │
│ QQuery 10 │        626.11 / 649.15 ±16.00 / 675.65 ms │            631.85 / 641.07 ±7.16 / 652.92 ms │     no change │
│ QQuery 11 │     1881.58 / 1937.60 ±40.49 / 1990.92 ms │        1936.01 / 1998.18 ±50.62 / 2085.42 ms │     no change │
│ QQuery 12 │        186.88 / 199.25 ±11.64 / 214.20 ms │            187.98 / 190.64 ±2.09 / 193.84 ms │     no change │
│ QQuery 13 │         540.90 / 553.56 ±7.69 / 563.23 ms │            546.30 / 553.74 ±5.91 / 562.58 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 36422.29ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35349.25ms │
│ Average Time (HEAD)                                         │  2601.59ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2524.95ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         13 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: 84f07dadabe68e25900b59909c9c0c28e99c7c56

clickbench_extended

Query Base Changed Change
Query 0 798.8 MiB 850.5 MiB +6.5%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.4 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +0.2%
Query 5 1.5 GiB 1.5 GiB +0.5%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB -0.3%
Query 8 36.7 MiB 37.0 MiB +0.7%
Query 9 2.1 GiB 2.2 GiB +1.0%
Query 10 2.3 MiB 1.9 MiB -17.7%
Query 11 2.1 GiB 2.1 GiB +3.1%
Query 12 1.1 MiB 1.0 MiB -11.5%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.2 GiB 8.1 GiB 4.8×
clickbench_extended changed (84f07dadabe68e25900b59909c9c0c28e99c7c56) 2.2 GiB 9.9 GiB 7.7 GiB 4.6×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 185.0s
Peak memory 10.2 GiB
Avg memory 4.3 GiB
CPU user 1845.8s
CPU sys 103.7s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 180.0s
Peak memory 9.9 GiB
Avg memory 4.3 GiB
CPU user 1775.1s
CPU sys 103.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)

Comparing 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │   780.52 ms │                                    787.96 ms │    no change │
│ QQuery 1  │   190.31 ms │                                    189.13 ms │    no change │
│ QQuery 2  │   453.97 ms │                                    451.36 ms │    no change │
│ QQuery 3  │   314.79 ms │                                    315.49 ms │    no change │
│ QQuery 4  │  1976.60 ms │                                   1969.47 ms │    no change │
│ QQuery 5  │ 18748.08 ms │                                  18260.34 ms │    no change │
│ QQuery 6  │     2.64 ms │                                      2.65 ms │    no change │
│ QQuery 7  │  6550.89 ms │                                   6383.94 ms │    no change │
│ QQuery 8  │   418.37 ms │                                    415.53 ms │    no change │
│ QQuery 9  │  2685.43 ms │                                   2674.00 ms │    no change │
│ QQuery 10 │   641.51 ms │                                    633.80 ms │    no change │
│ QQuery 11 │  1800.39 ms │                                   1894.68 ms │ 1.05x slower │
│ QQuery 12 │   188.29 ms │                                    188.21 ms │    no change │
│ QQuery 13 │   553.92 ms │                                    550.97 ms │    no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35305.73ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 34717.53ms │
│ Average Time (HEAD)                                         │  2521.84ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2479.82ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        780.52 / 803.70 ±16.14 / 825.15 ms │           787.96 / 804.74 ±13.86 / 825.56 ms │     no change │
│ QQuery 1  │         190.31 / 191.15 ±0.46 / 191.65 ms │            189.13 / 192.83 ±6.33 / 205.45 ms │     no change │
│ QQuery 2  │         453.97 / 456.06 ±2.31 / 460.29 ms │            451.36 / 454.63 ±2.20 / 457.31 ms │     no change │
│ QQuery 3  │         314.79 / 316.25 ±1.32 / 318.23 ms │            315.49 / 316.33 ±0.70 / 317.16 ms │     no change │
│ QQuery 4  │     1976.60 / 1991.08 ±11.62 / 2006.97 ms │        1969.47 / 2009.43 ±24.40 / 2033.40 ms │     no change │
│ QQuery 5  │ 18748.08 / 18978.22 ±217.98 / 19274.72 ms │    18260.34 / 18706.84 ±399.86 / 19339.58 ms │     no change │
│ QQuery 6  │               2.64 / 2.94 ±0.35 / 3.61 ms │                  2.65 / 2.86 ±0.28 / 3.39 ms │     no change │
│ QQuery 7  │  6550.89 / 8298.15 ±1911.88 / 10908.07 ms │       6383.94 / 6520.07 ±122.11 / 6678.52 ms │ +1.27x faster │
│ QQuery 8  │         418.37 / 421.91 ±3.16 / 426.62 ms │            415.53 / 420.00 ±3.68 / 426.32 ms │     no change │
│ QQuery 9  │     2685.43 / 2770.86 ±78.00 / 2894.48 ms │       2674.00 / 2867.38 ±108.49 / 2981.52 ms │     no change │
│ QQuery 10 │        641.51 / 658.25 ±10.99 / 675.64 ms │           633.80 / 654.62 ±12.70 / 672.20 ms │     no change │
│ QQuery 11 │     1800.39 / 1861.98 ±48.38 / 1939.82 ms │        1894.68 / 2000.01 ±94.99 / 2126.78 ms │  1.07x slower │
│ QQuery 12 │         188.29 / 193.29 ±6.18 / 205.33 ms │           188.21 / 205.72 ±28.91 / 263.39 ms │  1.06x slower │
│ QQuery 13 │         553.92 / 567.84 ±9.50 / 582.51 ms │           550.97 / 572.89 ±19.20 / 599.21 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37511.67ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35728.35ms │
│ Average Time (HEAD)                                         │  2679.41ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2552.03ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          2 │
│ Queries with No Change                                      │         11 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: 84f07dadabe68e25900b59909c9c0c28e99c7c56

clickbench_extended

Query Base Changed Change
Query 0 840.8 MiB 858.5 MiB +2.1%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.2 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB -0.1%
Query 5 1.5 GiB 1.5 GiB +0.0%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.3 GiB +1.8%
Query 8 37.2 MiB 36.7 MiB -1.2%
Query 9 2.1 GiB 2.1 GiB +3.4%
Query 10 1.7 MiB 1.7 MiB +0.4%
Query 11 2.0 GiB 2.1 GiB +4.9%
Query 12 1.1 MiB 1.0 MiB -11.3%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 9.4 GiB 7.3 GiB 4.5×
clickbench_extended changed (84f07dadabe68e25900b59909c9c0c28e99c7c56) 2.1 GiB 9.2 GiB 7.0 GiB 4.3×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 9.4 GiB
Avg memory 3.6 GiB
CPU user 1888.5s
CPU sys 108.2s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 180.0s
Peak memory 9.2 GiB
Avg memory 4.2 GiB
CPU user 1771.5s
CPU sys 112.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 84f07da (84f07da) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "84f07dadabe68e25900b59909c9c0c28e99c7c56"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │   833.61 ms │                                    845.28 ms │ no change │
│ QQuery 1  │   191.83 ms │                                    189.71 ms │ no change │
│ QQuery 2  │   454.40 ms │                                    454.38 ms │ no change │
│ QQuery 3  │   318.77 ms │                                    317.44 ms │ no change │
│ QQuery 4  │  2009.22 ms │                                   2029.23 ms │ no change │
│ QQuery 5  │ 18170.51 ms │                                  18603.37 ms │ no change │
│ QQuery 6  │     2.72 ms │                                      2.80 ms │ no change │
│ QQuery 7  │  6624.90 ms │                                   6757.22 ms │ no change │
│ QQuery 8  │   434.42 ms │                                    433.97 ms │ no change │
│ QQuery 9  │  2699.51 ms │                                   2719.26 ms │ no change │
│ QQuery 10 │   637.75 ms │                                    643.46 ms │ no change │
│ QQuery 11 │  1922.09 ms │                                   1918.53 ms │ no change │
│ QQuery 12 │   193.03 ms │                                    194.49 ms │ no change │
│ QQuery 13 │   565.64 ms │                                    542.29 ms │ no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35058.40ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35651.42ms │
│ Average Time (HEAD)                                         │  2504.17ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2546.53ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │        833.61 / 872.77 ±26.70 / 909.13 ms │           845.28 / 874.62 ±23.57 / 909.57 ms │ no change │
│ QQuery 1  │         191.83 / 192.36 ±0.49 / 193.13 ms │            189.71 / 190.65 ±0.64 / 191.56 ms │ no change │
│ QQuery 2  │         454.40 / 458.79 ±3.03 / 463.87 ms │            454.38 / 456.42 ±1.61 / 458.21 ms │ no change │
│ QQuery 3  │         318.77 / 320.24 ±1.43 / 322.73 ms │            317.44 / 318.70 ±1.89 / 322.44 ms │ no change │
│ QQuery 4  │     2009.22 / 2035.24 ±25.83 / 2071.49 ms │        2029.23 / 2070.68 ±21.75 / 2093.01 ms │ no change │
│ QQuery 5  │ 18170.51 / 19008.04 ±556.97 / 19633.50 ms │    18603.37 / 19246.90 ±524.11 / 19768.70 ms │ no change │
│ QQuery 6  │               2.72 / 2.91 ±0.27 / 3.45 ms │                  2.80 / 3.01 ±0.25 / 3.44 ms │ no change │
│ QQuery 7  │   6624.90 / 7457.86 ±1196.28 / 9830.47 ms │     6757.22 / 7635.90 ±1289.09 / 10185.91 ms │ no change │
│ QQuery 8  │         434.42 / 439.93 ±4.90 / 448.17 ms │            433.97 / 445.53 ±5.89 / 449.77 ms │ no change │
│ QQuery 9  │    2699.51 / 2925.38 ±127.56 / 3068.50 ms │        2719.26 / 2854.74 ±94.27 / 3003.24 ms │ no change │
│ QQuery 10 │         637.75 / 647.30 ±8.87 / 659.02 ms │           643.46 / 664.03 ±14.19 / 687.00 ms │ no change │
│ QQuery 11 │     1922.09 / 2018.08 ±61.21 / 2111.76 ms │        1918.53 / 2022.17 ±92.46 / 2150.12 ms │ no change │
│ QQuery 12 │         193.03 / 199.19 ±6.15 / 207.36 ms │            194.49 / 198.99 ±3.84 / 205.45 ms │ no change │
│ QQuery 13 │         565.64 / 571.73 ±7.56 / 584.15 ms │           542.29 / 562.38 ±15.11 / 583.35 ms │ no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37149.82ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37544.74ms │
│ Average Time (HEAD)                                         │  2653.56ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2681.77ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: 84f07dadabe68e25900b59909c9c0c28e99c7c56

clickbench_extended

Query Base Changed Change
Query 0 796.8 MiB 871.0 MiB +9.3%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.5 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB -0.1%
Query 5 1.5 GiB 1.5 GiB +0.5%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.0%
Query 8 37.0 MiB 37.0 MiB -0.0%
Query 9 2.1 GiB 2.1 GiB +2.6%
Query 10 1.9 MiB 1.9 MiB +0.4%
Query 11 2.1 GiB 2.1 GiB -0.3%
Query 12 1.3 MiB 1.4 MiB +11.2%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.4 GiB 8.3 GiB 5.0×
clickbench_extended changed (84f07dadabe68e25900b59909c9c0c28e99c7c56) 2.1 GiB 9.7 GiB 7.6 GiB 4.6×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 10.4 GiB
Avg memory 4.1 GiB
CPU user 1865.0s
CPU sys 114.0s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 9.7 GiB
Avg memory 4.5 GiB
CPU user 1874.7s
CPU sys 119.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)

Comparing da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │   812.36 ms │                                    792.32 ms │    no change │
│ QQuery 1  │   191.09 ms │                                    190.66 ms │    no change │
│ QQuery 2  │   456.41 ms │                                    454.70 ms │    no change │
│ QQuery 3  │   316.21 ms │                                    315.41 ms │    no change │
│ QQuery 4  │  1998.07 ms │                                   1999.08 ms │    no change │
│ QQuery 5  │ 18320.13 ms │                                  18449.12 ms │    no change │
│ QQuery 6  │     2.71 ms │                                      2.72 ms │    no change │
│ QQuery 7  │  6646.31 ms │                                   6689.02 ms │    no change │
│ QQuery 8  │   417.69 ms │                                    421.44 ms │    no change │
│ QQuery 9  │  2684.85 ms │                                   2768.09 ms │    no change │
│ QQuery 10 │   630.37 ms │                                    643.25 ms │    no change │
│ QQuery 11 │  1787.14 ms │                                   1968.91 ms │ 1.10x slower │
│ QQuery 12 │   188.47 ms │                                    191.16 ms │    no change │
│ QQuery 13 │   544.61 ms │                                    549.80 ms │    no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 34996.43ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35435.67ms │
│ Average Time (HEAD)                                         │  2499.74ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2531.12ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │         812.36 / 825.00 ±8.99 / 839.16 ms │           792.32 / 812.92 ±18.80 / 837.28 ms │    no change │
│ QQuery 1  │         191.09 / 191.49 ±0.33 / 191.92 ms │            190.66 / 194.31 ±6.50 / 207.29 ms │    no change │
│ QQuery 2  │         456.41 / 457.46 ±0.86 / 458.76 ms │            454.70 / 457.48 ±2.34 / 461.28 ms │    no change │
│ QQuery 3  │         316.21 / 318.17 ±2.22 / 322.50 ms │            315.41 / 317.03 ±1.29 / 318.67 ms │    no change │
│ QQuery 4  │      1998.07 / 2006.54 ±7.69 / 2018.59 ms │        1999.08 / 2014.64 ±13.76 / 2036.83 ms │    no change │
│ QQuery 5  │ 18320.13 / 19048.57 ±477.39 / 19663.51 ms │    18449.12 / 18891.38 ±339.47 / 19469.60 ms │    no change │
│ QQuery 6  │               2.71 / 2.91 ±0.25 / 3.40 ms │                  2.72 / 3.73 ±1.59 / 6.84 ms │ 1.28x slower │
│ QQuery 7  │    6646.31 / 6967.21 ±242.77 / 7305.55 ms │       6689.02 / 6806.09 ±156.55 / 7088.88 ms │    no change │
│ QQuery 8  │         417.69 / 423.38 ±4.34 / 430.61 ms │            421.44 / 423.18 ±1.98 / 426.00 ms │    no change │
│ QQuery 9  │     2684.85 / 2867.47 ±92.19 / 2927.49 ms │        2768.09 / 2895.26 ±72.99 / 2961.18 ms │    no change │
│ QQuery 10 │        630.37 / 655.63 ±29.51 / 713.13 ms │           643.25 / 658.28 ±12.61 / 676.15 ms │    no change │
│ QQuery 11 │    1787.14 / 1945.12 ±100.28 / 2080.13 ms │        1968.91 / 2001.77 ±28.74 / 2038.59 ms │    no change │
│ QQuery 12 │         188.47 / 196.12 ±4.51 / 201.52 ms │           191.16 / 199.89 ±13.73 / 226.91 ms │    no change │
│ QQuery 13 │         544.61 / 550.00 ±5.45 / 560.45 ms │            549.80 / 559.34 ±7.89 / 569.48 ms │    no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 36455.07ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36235.30ms │
│ Average Time (HEAD)                                         │  2603.93ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2588.24ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a

clickbench_extended

Query Base Changed Change
Query 0 820.8 MiB 824.8 MiB +0.5%
Query 1 3.4 MiB 3.4 MiB +0.0%
Query 2 98.2 MiB 98.1 MiB -0.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +0.4%
Query 5 1.5 GiB 1.5 GiB -0.1%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB -0.1%
Query 8 36.9 MiB 37.0 MiB +0.4%
Query 9 2.1 GiB 2.1 GiB +1.5%
Query 10 1.7 MiB 1.9 MiB +12.5%
Query 11 2.1 GiB 2.1 GiB -3.5%
Query 12 1.4 MiB 1.3 MiB -9.1%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.3 GiB 8.2 GiB 4.8×
clickbench_extended changed (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.0 GiB 7.9 GiB 4.8×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 185.0s
Peak memory 10.3 GiB
Avg memory 4.1 GiB
CPU user 1820.0s
CPU sys 109.3s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 185.0s
Peak memory 10.0 GiB
Avg memory 4.3 GiB
CPU user 1817.2s
CPU sys 114.2s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │   920.44 ms │                                    914.39 ms │     no change │
│ QQuery 1  │   191.28 ms │                                    193.76 ms │     no change │
│ QQuery 2  │   458.22 ms │                                    464.66 ms │     no change │
│ QQuery 3  │   319.79 ms │                                    320.32 ms │     no change │
│ QQuery 4  │  2093.16 ms │                                   2077.79 ms │     no change │
│ QQuery 5  │ 18418.38 ms │                                  19037.92 ms │     no change │
│ QQuery 6  │     2.93 ms │                                      2.75 ms │ +1.07x faster │
│ QQuery 7  │  6138.37 ms │                                   6439.43 ms │     no change │
│ QQuery 8  │   443.91 ms │                                    439.36 ms │     no change │
│ QQuery 9  │  2835.00 ms │                                   2836.05 ms │     no change │
│ QQuery 10 │   640.50 ms │                                    645.30 ms │     no change │
│ QQuery 11 │  1889.41 ms │                                   1890.90 ms │     no change │
│ QQuery 12 │   200.06 ms │                                    190.67 ms │     no change │
│ QQuery 13 │   555.21 ms │                                    550.25 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35106.66ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36003.55ms │
│ Average Time (HEAD)                                         │  2507.62ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2571.68ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        920.44 / 939.73 ±10.70 / 952.85 ms │           914.39 / 942.19 ±20.01 / 971.54 ms │     no change │
│ QQuery 1  │         191.28 / 193.78 ±3.79 / 201.33 ms │            193.76 / 197.12 ±5.85 / 208.79 ms │     no change │
│ QQuery 2  │         458.22 / 463.75 ±4.20 / 469.12 ms │            464.66 / 467.71 ±2.54 / 472.22 ms │     no change │
│ QQuery 3  │         319.79 / 321.05 ±0.80 / 322.29 ms │            320.32 / 324.45 ±4.50 / 332.44 ms │     no change │
│ QQuery 4  │      2093.16 / 2105.83 ±9.08 / 2116.70 ms │        2077.79 / 2105.19 ±15.75 / 2126.51 ms │     no change │
│ QQuery 5  │ 18418.38 / 19464.47 ±586.17 / 20228.68 ms │    19037.92 / 19327.09 ±258.61 / 19655.91 ms │     no change │
│ QQuery 6  │               2.93 / 3.12 ±0.20 / 3.50 ms │                  2.75 / 3.00 ±0.22 / 3.38 ms │     no change │
│ QQuery 7  │  6138.37 / 7643.32 ±1412.35 / 10323.63 ms │       6439.43 / 7048.79 ±627.07 / 8081.62 ms │ +1.08x faster │
│ QQuery 8  │         443.91 / 448.60 ±5.74 / 458.64 ms │            439.36 / 443.11 ±2.57 / 445.82 ms │     no change │
│ QQuery 9  │    2835.00 / 3048.94 ±156.77 / 3218.23 ms │        2836.05 / 2864.61 ±29.74 / 2913.95 ms │ +1.06x faster │
│ QQuery 10 │        640.50 / 684.77 ±49.28 / 773.68 ms │           645.30 / 665.60 ±13.62 / 684.22 ms │     no change │
│ QQuery 11 │    1889.41 / 2090.82 ±114.47 / 2238.06 ms │        1890.90 / 1962.75 ±82.45 / 2117.27 ms │ +1.07x faster │
│ QQuery 12 │        200.06 / 210.85 ±15.95 / 242.46 ms │           190.67 / 204.92 ±16.13 / 235.97 ms │     no change │
│ QQuery 13 │        555.21 / 575.11 ±16.71 / 602.56 ms │           550.25 / 574.68 ±15.58 / 587.76 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 38194.15ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37131.21ms │
│ Average Time (HEAD)                                         │  2728.15ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2652.23ms │
│ Queries Faster                                              │          3 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         11 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a

clickbench_extended

Query Base Changed Change
Query 0 834.8 MiB 836.8 MiB +0.2%
Query 1 3.4 MiB 3.4 MiB +0.0%
Query 2 98.1 MiB 98.1 MiB -0.0%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB -0.0%
Query 5 1.5 GiB 1.5 GiB -0.2%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.3%
Query 8 37.2 MiB 37.0 MiB -0.4%
Query 9 2.1 GiB 2.1 GiB +1.9%
Query 10 1.9 MiB 1.9 MiB +0.3%
Query 11 2.1 GiB 2.1 GiB +0.7%
Query 12 1.4 MiB 1.3 MiB -9.7%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.1 GiB 8.0 GiB 4.9×
clickbench_extended changed (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 9.7 GiB 7.6 GiB 4.6×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 195.0s
Peak memory 10.1 GiB
Avg memory 4.0 GiB
CPU user 1894.9s
CPU sys 120.1s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 9.7 GiB
Avg memory 4.3 GiB
CPU user 1847.1s
CPU sys 122.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 da89c7c (da89c7c) to da89c7c diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
baseline:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
changed:
  ref: "da89c7c85b1c888ba4038317eacbdcfe03ab9b1a"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │   885.79 ms │                                    888.41 ms │    no change │
│ QQuery 1  │   191.94 ms │                                    191.72 ms │    no change │
│ QQuery 2  │   457.98 ms │                                    458.09 ms │    no change │
│ QQuery 3  │   319.30 ms │                                    318.21 ms │    no change │
│ QQuery 4  │  2066.86 ms │                                   2051.37 ms │    no change │
│ QQuery 5  │ 18847.35 ms │                                  18777.32 ms │    no change │
│ QQuery 6  │     2.85 ms │                                      2.97 ms │    no change │
│ QQuery 7  │  6382.52 ms │                                   6229.91 ms │    no change │
│ QQuery 8  │   444.86 ms │                                    442.22 ms │    no change │
│ QQuery 9  │  2676.61 ms │                                   2826.80 ms │ 1.06x slower │
│ QQuery 10 │   652.72 ms │                                    634.94 ms │    no change │
│ QQuery 11 │  2015.71 ms │                                   1942.50 ms │    no change │
│ QQuery 12 │   193.91 ms │                                    192.41 ms │    no change │
│ QQuery 13 │   562.93 ms │                                    551.90 ms │    no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35701.35ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35508.77ms │
│ Average Time (HEAD)                                         │  2550.10ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2536.34ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        885.79 / 919.27 ±22.76 / 951.46 ms │           888.41 / 914.03 ±17.04 / 936.86 ms │     no change │
│ QQuery 1  │         191.94 / 192.24 ±0.21 / 192.46 ms │            191.72 / 194.91 ±4.93 / 204.67 ms │     no change │
│ QQuery 2  │         457.98 / 461.04 ±2.88 / 465.48 ms │            458.09 / 461.87 ±2.10 / 464.15 ms │     no change │
│ QQuery 3  │         319.30 / 320.94 ±1.82 / 324.32 ms │            318.21 / 320.12 ±1.65 / 322.90 ms │     no change │
│ QQuery 4  │     2066.86 / 2099.75 ±18.31 / 2117.91 ms │        2051.37 / 2092.70 ±25.65 / 2132.26 ms │     no change │
│ QQuery 5  │ 18847.35 / 19402.36 ±320.74 / 19779.15 ms │    18777.32 / 19530.68 ±488.16 / 20090.01 ms │     no change │
│ QQuery 6  │               2.85 / 3.10 ±0.30 / 3.68 ms │                  2.97 / 3.37 ±0.62 / 4.60 ms │  1.09x slower │
│ QQuery 7  │    6382.52 / 7173.84 ±434.97 / 7555.57 ms │       6229.91 / 6681.99 ±523.57 / 7690.82 ms │ +1.07x faster │
│ QQuery 8  │         444.86 / 448.03 ±3.02 / 453.02 ms │            442.22 / 443.56 ±1.03 / 445.02 ms │     no change │
│ QQuery 9  │     2676.61 / 2842.53 ±96.99 / 2973.07 ms │        2826.80 / 2925.37 ±69.40 / 3037.63 ms │     no change │
│ QQuery 10 │         652.72 / 658.81 ±6.22 / 669.95 ms │           634.94 / 659.26 ±14.88 / 678.77 ms │     no change │
│ QQuery 11 │     2015.71 / 2061.36 ±42.06 / 2141.15 ms │        1942.50 / 1992.59 ±50.54 / 2081.08 ms │     no change │
│ QQuery 12 │        193.91 / 221.70 ±39.20 / 297.95 ms │            192.41 / 197.47 ±4.41 / 203.94 ms │ +1.12x faster │
│ QQuery 13 │        562.93 / 574.87 ±11.16 / 588.41 ms │           551.90 / 570.89 ±14.65 / 589.82 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37379.84ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36988.82ms │
│ Average Time (HEAD)                                         │  2669.99ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2642.06ms │
│ Queries Faster                                              │          2 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         11 │
│ 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: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a | Changed: da89c7c85b1c888ba4038317eacbdcfe03ab9b1a

clickbench_extended

Query Base Changed Change
Query 0 838.8 MiB 804.8 MiB -4.1%
Query 1 3.4 MiB 3.4 MiB +0.0%
Query 2 98.2 MiB 98.6 MiB +0.3%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB -0.2%
Query 5 1.5 GiB 1.5 GiB -0.1%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.5%
Query 8 37.2 MiB 37.0 MiB -0.5%
Query 9 2.3 GiB 2.1 GiB -9.1%
Query 10 1.9 MiB 1.5 MiB -21.4%
Query 11 2.0 GiB 2.1 GiB +2.8%
Query 12 1.1 MiB 1.3 MiB +12.3%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.3 GiB 10.6 GiB 8.3 GiB 4.6×
clickbench_extended changed (da89c7c85b1c888ba4038317eacbdcfe03ab9b1a) 2.1 GiB 10.6 GiB 8.5 GiB 5.0×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 10.6 GiB
Avg memory 4.0 GiB
CPU user 1867.8s
CPU sys 116.7s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 10.6 GiB
Avg memory 4.3 GiB
CPU user 1845.9s
CPU sys 121.9s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Repeat runs: RSS question resolved, and two corrections

Following up on the open item in the summary above. Six further runs of clickbench_extended at
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G, three of them base-against-base so both sides are the
identical commit, which gives a null distribution to measure everything else against.

Peak RSS: no effect. The earlier increase was a single high draw.

Peak RSS at the merge-base across 11 readings of identical code: 9.4, 9.5, 9.7, 9.9, 10.0, 10.1,
10.2, 10.3, 10.4, 10.6, 10.6 GiB. Mean 10.06 GiB, standard deviation 0.41 GiB (4.1%), and a
max/min span of 12.8%.

Within-run RSS delta on identical code: 0.0%, -2.9%, -4.0%. On the three base-vs-branch repeats:
-2.9%, -2.1%, -6.7%, against the +8.1% originally reported. Welch t about -0.87, p about 0.43.

There is also a mild order effect: the base side runs first in each pod and the second side reads
about 2.3% lower on average, so the original +8.1% was measured against that bias rather than with
it. The allocator-churn hypothesis is not supported and no mitigation is warranted.

Query 2 reproduces exactly. The single-run caveat is retired.

Null spread on identical code, 6 readings: 98.1, 98.1, 98.2, 98.2, 98.2, 98.6 MiB, a mean delta of
+0.10% with standard deviation 0.27. Pool peak reproduces to well under 1%.

Across the three repeats the changed side read 11.7 MiB every time, giving -88.12%, -88.09%,
-88.12%
, standard deviation 0.02 percentage points. With the original run that is four for four
at -88.1%.

It is also mechanistically predicted rather than only measured. Entry<()> in the view map is a
u128 plus a u64, 32 bytes aligned, and HashTable::with_capacity(512) rounds to 1024 buckets,
so each pre-allocated per-group set costs about 33.8 KiB. Q2 is four COUNT(DISTINCT) aggregates
grouped by BrowserCountry, roughly 2,900 accumulators, predicting about 96 MiB against the 98.3
MiB observed.

Query 1 also holds: 3.4 MiB base and 2.4 MiB changed in every run, with zero variance on either
side.

Correction 1: the Query 12 number was noise. Retracting it.

The summary above cited Q12 at -21.2%. That does not survive. The null spread on Q12 is -7.1% to
+18.2% (standard deviation 14.6) on identical code, and the repeats gave -9.1%, -9.1% and +7.7%.
Q12 is MAX(FIRST_VALUE(...) GROUP BY "OS") with no COUNT(DISTINCT) anywhere in it, so there is
no mechanism by which this change could touch it. It is roughly a 1.2 MiB quantity reported to 0.1
MiB granularity. Please disregard that row.

Correction 2: Query 0's pool peak genuinely increases, by about 4.2%

This is a real, opposite-signed cost that the first run did not surface, and it should be on the
record.

Base commit, 11 readings: 796.8 to 840.8 MiB, mean 821.9. Branch, 4 readings: 846.5, 850.5, 858.5,
871.0 MiB, mean 856.6. All four branch readings exceed all eleven base readings (exact rank
p = 0.0007). Restricting to second-position readings only, to control for the order effect, all
four branch values still exceed all three base values: +4.2%, p = 0.029, about +35 MiB.

Q0 is COUNT(DISTINCT) over three high-cardinality strings with no GROUP BY, so a handful of
maps that each grow to millions of entries. That is the opposite population from the one this
change targets, and the result is the expected flip side of removing a warm-up: a map destined to
get large now reaches its size through more doubling steps, and the pool records the transient
where the old and new tables are both live.

The overall picture is coherent. Ungrouped and low cardinality (Q1) improves because the
pre-allocation dominated; grouped with many tiny sets (Q2) improves enormously for the same
reason; ungrouped and high cardinality (Q0) costs a little, because the pre-allocation was never
the dominant term there.

A note on this harness that applies beyond this PR

Pool peak is a trustworthy instrument here and peak RSS is not. Pool peak reproduced to under 1% on
a 98 MiB query and exactly on 3.4 and 11.7 MiB ones. Peak RSS has a 4.1% standard deviation plus a
2.3% systematic order bias, so any claim resting on a single-run RSS figure needs at least three
runs and a null. Pool figures around 1 MiB, reported to 0.1 MiB, need repeats too, which is what
caught Q12.

Result comments: base-vs-base
1,
2,
3;
base-vs-branch
1,
2,
3.

@adriangb

adriangb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended clickbench_extended clickbench_extended
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5517561777-2108-554mb 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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-c5517561777-2109-77pmb 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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-c5517561777-2110-tcxfm 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │   800.75 ms │                                    805.35 ms │    no change │
│ QQuery 1  │   190.89 ms │                                    194.08 ms │    no change │
│ QQuery 2  │   454.51 ms │                                    455.90 ms │    no change │
│ QQuery 3  │   315.44 ms │                                    317.06 ms │    no change │
│ QQuery 4  │  1983.94 ms │                                   1975.37 ms │    no change │
│ QQuery 5  │ 17921.78 ms │                                  18707.01 ms │    no change │
│ QQuery 6  │     2.58 ms │                                      2.65 ms │    no change │
│ QQuery 7  │  6449.04 ms │                                   6370.85 ms │    no change │
│ QQuery 8  │   422.20 ms │                                    421.53 ms │    no change │
│ QQuery 9  │  2659.94 ms │                                   2676.47 ms │    no change │
│ QQuery 10 │   646.88 ms │                                    636.28 ms │    no change │
│ QQuery 11 │  1761.55 ms │                                   1898.10 ms │ 1.08x slower │
│ QQuery 12 │   189.73 ms │                                    191.02 ms │    no change │
│ QQuery 13 │   536.22 ms │                                    537.14 ms │    no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 34335.44ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35188.81ms │
│ Average Time (HEAD)                                         │  2452.53ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2513.49ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │        800.75 / 820.92 ±11.28 / 832.65 ms │           805.35 / 839.07 ±28.09 / 875.74 ms │    no change │
│ QQuery 1  │         190.89 / 191.32 ±0.32 / 191.84 ms │            194.08 / 195.13 ±0.83 / 196.64 ms │    no change │
│ QQuery 2  │         454.51 / 461.09 ±5.74 / 468.53 ms │            455.90 / 462.15 ±4.72 / 470.51 ms │    no change │
│ QQuery 3  │         315.44 / 317.35 ±1.78 / 320.56 ms │            317.06 / 319.32 ±2.61 / 324.22 ms │    no change │
│ QQuery 4  │     1983.94 / 2009.14 ±14.30 / 2023.88 ms │        1975.37 / 2002.30 ±21.84 / 2029.48 ms │    no change │
│ QQuery 5  │ 17921.78 / 19002.73 ±604.10 / 19609.39 ms │    18707.01 / 19019.99 ±281.96 / 19380.23 ms │    no change │
│ QQuery 6  │               2.58 / 2.91 ±0.30 / 3.45 ms │                  2.65 / 2.86 ±0.28 / 3.36 ms │    no change │
│ QQuery 7  │    6449.04 / 6713.99 ±271.07 / 7201.04 ms │     6370.85 / 7531.71 ±1825.27 / 11149.55 ms │ 1.12x slower │
│ QQuery 8  │         422.20 / 428.90 ±3.57 / 432.86 ms │            421.53 / 429.44 ±4.43 / 433.92 ms │    no change │
│ QQuery 9  │    2659.94 / 2826.55 ±148.85 / 3101.56 ms │       2676.47 / 2896.22 ±140.18 / 3057.01 ms │    no change │
│ QQuery 10 │        646.88 / 656.14 ±10.20 / 675.47 ms │            636.28 / 646.25 ±6.80 / 654.18 ms │    no change │
│ QQuery 11 │     1761.55 / 1922.77 ±83.52 / 1991.75 ms │        1898.10 / 1979.23 ±50.13 / 2055.68 ms │    no change │
│ QQuery 12 │        189.73 / 201.80 ±10.74 / 216.49 ms │            191.02 / 196.88 ±4.58 / 202.90 ms │    no change │
│ QQuery 13 │        536.22 / 555.17 ±13.03 / 567.74 ms │           537.14 / 561.48 ±14.06 / 580.20 ms │    no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 36110.78ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37082.03ms │
│ Average Time (HEAD)                                         │  2579.34ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2648.72ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 814.8 MiB 877.0 MiB +7.6%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.6 MiB 11.7 MiB -88.1%
Query 3 11.8 MiB 11.8 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +0.1%
Query 5 1.5 GiB 1.5 GiB -0.5%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.7%
Query 8 37.0 MiB 37.0 MiB +0.0%
Query 9 2.1 GiB 2.0 GiB -1.8%
Query 10 1.9 MiB 1.9 MiB +0.4%
Query 11 2.1 GiB 2.2 GiB +3.8%
Query 12 1.3 MiB 1.1 MiB -10.6%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.1 GiB 8.5 GiB 6.4 GiB 4.0×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 9.8 GiB 7.7 GiB 4.5×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 185.0s
Peak memory 8.5 GiB
Avg memory 4.0 GiB
CPU user 1800.9s
CPU sys 107.9s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 9.8 GiB
Avg memory 4.3 GiB
CPU user 1845.6s
CPU sys 117.1s
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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │   812.46 ms │                                   1000.71 ms │  1.23x slower │
│ QQuery 1  │   190.67 ms │                                    194.74 ms │     no change │
│ QQuery 2  │   455.26 ms │                                    460.97 ms │     no change │
│ QQuery 3  │   314.97 ms │                                    315.19 ms │     no change │
│ QQuery 4  │  2003.32 ms │                                   2001.46 ms │     no change │
│ QQuery 5  │ 18662.82 ms │                                  17967.64 ms │     no change │
│ QQuery 6  │     3.21 ms │                                      2.70 ms │ +1.19x faster │
│ QQuery 7  │  6791.96 ms │                                   6553.86 ms │     no change │
│ QQuery 8  │   423.01 ms │                                    421.73 ms │     no change │
│ QQuery 9  │  2783.78 ms │                                   2712.47 ms │     no change │
│ QQuery 10 │   633.64 ms │                                    625.14 ms │     no change │
│ QQuery 11 │  1826.59 ms │                                   2024.92 ms │  1.11x slower │
│ QQuery 12 │   189.34 ms │                                    195.36 ms │     no change │
│ QQuery 13 │   554.89 ms │                                    554.27 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35645.93ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35031.16ms │
│ Average Time (HEAD)                                         │  2546.14ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2502.23ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          2 │
│ Queries with No Change                                      │         11 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        812.46 / 838.50 ±14.05 / 850.48 ms │        1000.71 / 1021.21 ±15.83 / 1048.01 ms │  1.22x slower │
│ QQuery 1  │         190.67 / 193.83 ±5.93 / 205.69 ms │            194.74 / 196.49 ±1.14 / 197.86 ms │     no change │
│ QQuery 2  │         455.26 / 459.52 ±3.51 / 465.35 ms │            460.97 / 464.24 ±4.09 / 472.26 ms │     no change │
│ QQuery 3  │         314.97 / 316.16 ±0.89 / 317.09 ms │            315.19 / 318.50 ±3.16 / 322.29 ms │     no change │
│ QQuery 4  │     2003.32 / 2171.31 ±99.12 / 2250.06 ms │        2001.46 / 2047.01 ±34.69 / 2104.99 ms │ +1.06x faster │
│ QQuery 5  │ 18662.82 / 19087.88 ±531.24 / 20095.15 ms │    17967.64 / 18766.10 ±457.30 / 19282.70 ms │     no change │
│ QQuery 6  │               3.21 / 3.36 ±0.14 / 3.62 ms │                  2.70 / 2.91 ±0.29 / 3.48 ms │ +1.15x faster │
│ QQuery 7  │    6791.96 / 7901.09 ±899.53 / 9385.90 ms │     6553.86 / 8019.12 ±1433.39 / 10005.89 ms │     no change │
│ QQuery 8  │         423.01 / 429.14 ±3.63 / 434.34 ms │            421.73 / 424.98 ±2.72 / 429.59 ms │     no change │
│ QQuery 9  │     2783.78 / 2885.45 ±85.85 / 3018.58 ms │       2712.47 / 2888.18 ±101.49 / 3029.79 ms │     no change │
│ QQuery 10 │        633.64 / 665.78 ±20.43 / 694.76 ms │           625.14 / 649.28 ±17.57 / 670.16 ms │     no change │
│ QQuery 11 │    1826.59 / 1952.11 ±122.07 / 2103.91 ms │        2024.92 / 2133.46 ±90.38 / 2279.04 ms │  1.09x slower │
│ QQuery 12 │         189.34 / 192.64 ±3.14 / 198.54 ms │           195.36 / 212.55 ±18.38 / 248.00 ms │  1.10x slower │
│ QQuery 13 │        554.89 / 569.37 ±13.27 / 591.58 ms │           554.27 / 565.83 ±11.79 / 583.71 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37666.15ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37709.88ms │
│ Average Time (HEAD)                                         │  2690.44ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2693.56ms │
│ Queries Faster                                              │          2 │
│ Queries Slower                                              │          3 │
│ Queries with No Change                                      │          9 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 834.8 MiB 885.5 MiB +6.1%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.5 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.8 MiB +0.9%
Query 4 1.4 GiB 1.4 GiB -0.1%
Query 5 1.5 GiB 1.5 GiB -0.4%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.5%
Query 8 36.9 MiB 37.2 MiB +0.9%
Query 9 2.1 GiB 2.2 GiB +3.7%
Query 10 2.1 MiB 1.7 MiB -19.7%
Query 11 2.1 GiB 2.1 GiB -1.6%
Query 12 1.1 MiB 1.3 MiB +12.1%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.1 GiB 9.9 GiB 7.8 GiB 4.7×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 9.8 GiB 7.6 GiB 4.5×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 9.9 GiB
Avg memory 3.8 GiB
CPU user 1878.8s
CPU sys 116.9s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 9.8 GiB
Avg memory 4.5 GiB
CPU user 1889.8s
CPU sys 111.5s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing claude/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │   895.07 ms │                                    864.97 ms │    no change │
│ QQuery 1  │   190.89 ms │                                    194.69 ms │    no change │
│ QQuery 2  │   457.13 ms │                                    459.35 ms │    no change │
│ QQuery 3  │   318.92 ms │                                    318.05 ms │    no change │
│ QQuery 4  │  2084.56 ms │                                   2045.56 ms │    no change │
│ QQuery 5  │ 18565.95 ms │                                  18816.13 ms │    no change │
│ QQuery 6  │     2.71 ms │                                      2.65 ms │    no change │
│ QQuery 7  │  6541.61 ms │                                   6668.67 ms │    no change │
│ QQuery 8  │   437.07 ms │                                    435.00 ms │    no change │
│ QQuery 9  │  2688.74 ms │                                   2664.49 ms │    no change │
│ QQuery 10 │   635.83 ms │                                    648.73 ms │    no change │
│ QQuery 11 │  1756.53 ms │                                   1866.13 ms │ 1.06x slower │
│ QQuery 12 │   196.89 ms │                                    195.40 ms │    no change │
│ QQuery 13 │   545.50 ms │                                    545.20 ms │    no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35317.40ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35725.02ms │
│ Average Time (HEAD)                                         │  2522.67ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2551.79ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          1 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │        895.07 / 916.96 ±18.57 / 945.92 ms │           864.97 / 912.08 ±33.85 / 952.65 ms │     no change │
│ QQuery 1  │         190.89 / 193.50 ±4.28 / 202.03 ms │            194.69 / 196.92 ±3.53 / 203.94 ms │     no change │
│ QQuery 2  │         457.13 / 461.34 ±4.45 / 469.20 ms │            459.35 / 463.38 ±2.32 / 466.36 ms │     no change │
│ QQuery 3  │         318.92 / 319.72 ±0.64 / 320.55 ms │            318.05 / 318.73 ±0.38 / 319.17 ms │     no change │
│ QQuery 4  │    2084.56 / 2156.95 ±128.67 / 2413.98 ms │        2045.56 / 2113.17 ±82.16 / 2274.94 ms │     no change │
│ QQuery 5  │ 18565.95 / 19214.07 ±419.00 / 19867.57 ms │    18816.13 / 19387.06 ±496.61 / 20112.44 ms │     no change │
│ QQuery 6  │               2.71 / 3.65 ±1.35 / 6.31 ms │                  2.65 / 2.88 ±0.30 / 3.47 ms │ +1.27x faster │
│ QQuery 7  │    6541.61 / 7125.55 ±447.24 / 7660.89 ms │       6668.67 / 6963.88 ±200.52 / 7254.65 ms │     no change │
│ QQuery 8  │         437.07 / 438.32 ±1.11 / 440.40 ms │            435.00 / 437.54 ±2.13 / 440.38 ms │     no change │
│ QQuery 9  │    2688.74 / 2900.70 ±130.81 / 3067.71 ms │       2664.49 / 2814.33 ±154.00 / 3020.75 ms │     no change │
│ QQuery 10 │        635.83 / 652.31 ±10.92 / 667.74 ms │           648.73 / 667.81 ±19.84 / 698.74 ms │     no change │
│ QQuery 11 │    1756.53 / 2059.92 ±188.32 / 2330.83 ms │        1866.13 / 1988.67 ±76.49 / 2095.72 ms │     no change │
│ QQuery 12 │        196.89 / 208.09 ±16.69 / 241.18 ms │            195.40 / 200.67 ±4.85 / 208.64 ms │     no change │
│ QQuery 13 │        545.50 / 572.41 ±23.15 / 612.99 ms │           545.20 / 568.70 ±14.08 / 582.57 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37223.51ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 37035.82ms │
│ Average Time (HEAD)                                         │  2658.82ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2645.42ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         13 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 812.8 MiB 871.0 MiB +7.2%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.1 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +2.4%
Query 5 1.5 GiB 1.5 GiB -0.4%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB +0.0%
Query 8 37.0 MiB 37.0 MiB -0.0%
Query 9 2.1 GiB 2.1 GiB -3.3%
Query 10 1.9 MiB 1.9 MiB -0.4%
Query 11 2.1 GiB 2.2 GiB +4.8%
Query 12 1.3 MiB 1.1 MiB -11.0%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.1 GiB 10.5 GiB 8.4 GiB 4.9×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 10.4 GiB 8.2 GiB 4.7×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 10.5 GiB
Avg memory 4.0 GiB
CPU user 1854.0s
CPU sys 115.5s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 10.4 GiB
Avg memory 4.1 GiB
CPU user 1846.9s
CPU sys 117.6s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended clickbench_extended
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5520931345-2114-f2wk6 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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-c5520931345-2115-mcxp7 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │   811.80 ms │                                    817.26 ms │ no change │
│ QQuery 1  │   190.73 ms │                                    194.25 ms │ no change │
│ QQuery 2  │   455.32 ms │                                    460.59 ms │ no change │
│ QQuery 3  │   315.47 ms │                                    316.62 ms │ no change │
│ QQuery 4  │  1996.39 ms │                                   1996.02 ms │ no change │
│ QQuery 5  │ 18519.69 ms │                                  18504.21 ms │ no change │
│ QQuery 6  │     2.66 ms │                                      2.61 ms │ no change │
│ QQuery 7  │  6576.07 ms │                                   6555.87 ms │ no change │
│ QQuery 8  │   426.81 ms │                                    421.06 ms │ no change │
│ QQuery 9  │  2759.89 ms │                                   2698.06 ms │ no change │
│ QQuery 10 │   643.28 ms │                                    648.44 ms │ no change │
│ QQuery 11 │  1847.92 ms │                                   1909.69 ms │ no change │
│ QQuery 12 │   191.08 ms │                                    190.36 ms │ no change │
│ QQuery 13 │   548.12 ms │                                    555.21 ms │ no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35285.22ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35270.26ms │
│ Average Time (HEAD)                                         │  2520.37ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2519.30ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │        811.80 / 829.62 ±14.72 / 846.60 ms │           817.26 / 832.01 ±17.84 / 865.92 ms │ no change │
│ QQuery 1  │         190.73 / 193.95 ±5.57 / 205.08 ms │            194.25 / 197.73 ±6.43 / 210.58 ms │ no change │
│ QQuery 2  │         455.32 / 458.32 ±1.99 / 461.13 ms │            460.59 / 465.77 ±4.37 / 472.19 ms │ no change │
│ QQuery 3  │         315.47 / 318.01 ±1.48 / 319.88 ms │            316.62 / 317.28 ±0.56 / 318.06 ms │ no change │
│ QQuery 4  │     1996.39 / 2015.03 ±15.04 / 2040.72 ms │         1996.02 / 2012.67 ±9.74 / 2022.50 ms │ no change │
│ QQuery 5  │ 18519.69 / 19023.52 ±329.59 / 19408.71 ms │    18504.21 / 18916.17 ±379.38 / 19539.83 ms │ no change │
│ QQuery 6  │               2.66 / 2.94 ±0.35 / 3.62 ms │                  2.61 / 2.85 ±0.33 / 3.50 ms │ no change │
│ QQuery 7  │    6576.07 / 6975.33 ±307.56 / 7373.24 ms │       6555.87 / 6800.10 ±172.00 / 7092.19 ms │ no change │
│ QQuery 8  │         426.81 / 430.15 ±2.08 / 433.02 ms │            421.06 / 425.38 ±2.76 / 428.73 ms │ no change │
│ QQuery 9  │    2759.89 / 2892.15 ±120.81 / 3078.32 ms │       2698.06 / 2904.96 ±120.83 / 3065.00 ms │ no change │
│ QQuery 10 │        643.28 / 656.77 ±11.55 / 672.95 ms │            648.44 / 655.81 ±7.09 / 669.07 ms │ no change │
│ QQuery 11 │     1847.92 / 1973.29 ±92.51 / 2133.85 ms │        1909.69 / 1997.87 ±51.74 / 2070.95 ms │ no change │
│ QQuery 12 │        191.08 / 203.28 ±10.27 / 220.48 ms │           190.36 / 201.28 ±11.73 / 223.15 ms │ no change │
│ QQuery 13 │        548.12 / 571.83 ±19.07 / 606.49 ms │            555.21 / 559.42 ±3.63 / 565.61 ms │ no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 36544.19ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36289.29ms │
│ Average Time (HEAD)                                         │  2610.30ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2592.09ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 826.8 MiB 873.0 MiB +5.6%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.2 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.8 MiB +0.9%
Query 4 1.4 GiB 1.4 GiB +0.2%
Query 5 1.5 GiB 1.5 GiB +0.9%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB -0.4%
Query 8 37.7 MiB 37.0 MiB -1.7%
Query 9 2.1 GiB 2.2 GiB +1.7%
Query 10 1.9 MiB 1.9 MiB -0.3%
Query 11 2.1 GiB 2.1 GiB +3.8%
Query 12 1.3 MiB 1.1 MiB -10.2%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.1 GiB 8.9 GiB 6.8 GiB 4.2×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 10.1 GiB 7.9 GiB 4.7×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 185.0s
Peak memory 8.9 GiB
Avg memory 3.9 GiB
CPU user 1827.5s
CPU sys 110.5s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 185.0s
Peak memory 10.1 GiB
Avg memory 4.4 GiB
CPU user 1809.3s
CPU sys 119.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)

Comparing claude/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │   782.12 ms │                                    758.55 ms │     no change │
│ QQuery 1  │   189.93 ms │                                    194.67 ms │     no change │
│ QQuery 2  │   456.71 ms │                                    468.43 ms │     no change │
│ QQuery 3  │   315.18 ms │                                    320.59 ms │     no change │
│ QQuery 4  │  1953.15 ms │                                   1973.65 ms │     no change │
│ QQuery 5  │ 18764.23 ms │                                  18488.84 ms │     no change │
│ QQuery 6  │     2.88 ms │                                      2.53 ms │ +1.14x faster │
│ QQuery 7  │  6746.53 ms │                                   6551.32 ms │     no change │
│ QQuery 8  │   433.08 ms │                                    416.90 ms │     no change │
│ QQuery 9  │  2818.79 ms │                                   2706.21 ms │     no change │
│ QQuery 10 │   627.87 ms │                                    634.17 ms │     no change │
│ QQuery 11 │  1887.07 ms │                                   1816.40 ms │     no change │
│ QQuery 12 │   191.47 ms │                                    192.17 ms │     no change │
│ QQuery 13 │   546.74 ms │                                    546.07 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35715.73ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35070.51ms │
│ Average Time (HEAD)                                         │  2551.12ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2505.04ms │
│ Queries Faster                                              │          1 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         13 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │      782.12 / 904.90 ±103.99 / 1022.98 ms │           758.55 / 776.82 ±11.81 / 793.76 ms │ +1.16x faster │
│ QQuery 1  │         189.93 / 190.53 ±0.50 / 191.23 ms │            194.67 / 194.82 ±0.11 / 195.01 ms │     no change │
│ QQuery 2  │         456.71 / 458.63 ±1.59 / 460.55 ms │            468.43 / 470.95 ±2.07 / 473.05 ms │     no change │
│ QQuery 3  │         315.18 / 317.11 ±1.22 / 318.85 ms │            320.59 / 323.20 ±2.67 / 327.35 ms │     no change │
│ QQuery 4  │    1953.15 / 2035.53 ±107.98 / 2239.56 ms │        1973.65 / 1990.27 ±13.55 / 2005.97 ms │     no change │
│ QQuery 5  │ 18764.23 / 19114.82 ±219.27 / 19391.28 ms │    18488.84 / 19512.85 ±654.65 / 20197.09 ms │     no change │
│ QQuery 6  │               2.88 / 3.11 ±0.27 / 3.63 ms │                  2.53 / 2.79 ±0.30 / 3.38 ms │ +1.12x faster │
│ QQuery 7  │    6746.53 / 7427.97 ±951.36 / 9255.80 ms │       6551.32 / 6907.69 ±307.52 / 7363.17 ms │ +1.08x faster │
│ QQuery 8  │        433.08 / 457.75 ±17.40 / 477.42 ms │            416.90 / 422.02 ±3.27 / 426.55 ms │ +1.08x faster │
│ QQuery 9  │    2818.79 / 2962.94 ±150.04 / 3150.93 ms │       2706.21 / 2891.71 ±126.90 / 3099.34 ms │     no change │
│ QQuery 10 │        627.87 / 666.04 ±42.13 / 730.95 ms │           634.17 / 666.07 ±18.72 / 683.87 ms │     no change │
│ QQuery 11 │     1887.07 / 2023.97 ±99.14 / 2179.43 ms │       1816.40 / 1978.49 ±114.39 / 2157.98 ms │     no change │
│ QQuery 12 │        191.47 / 206.34 ±17.81 / 232.55 ms │           192.17 / 210.48 ±21.68 / 252.94 ms │     no change │
│ QQuery 13 │        546.74 / 569.74 ±19.46 / 598.96 ms │           546.07 / 568.42 ±20.37 / 598.24 ms │     no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 37339.37ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36916.58ms │
│ Average Time (HEAD)                                         │  2667.10ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2636.90ms │
│ Queries Faster                                              │          4 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         10 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 814.8 MiB 846.5 MiB +3.9%
Query 1 3.4 MiB 2.4 MiB -29.5%
Query 2 98.2 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +0.1%
Query 5 1.5 GiB 1.5 GiB +0.1%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB -0.1%
Query 8 37.0 MiB 36.9 MiB -0.4%
Query 9 2.2 GiB 2.1 GiB -5.9%
Query 10 1.9 MiB 2.1 MiB +10.7%
Query 11 2.2 GiB 2.2 GiB -0.9%
Query 12 1.1 MiB 1.3 MiB +12.5%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.2 GiB 10.3 GiB 8.1 GiB 4.7×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 10.6 GiB 8.4 GiB 4.8×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 190.0s
Peak memory 10.3 GiB
Avg memory 3.8 GiB
CPU user 1858.2s
CPU sys 115.3s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 190.0s
Peak memory 10.6 GiB
Avg memory 4.0 GiB
CPU user 1833.0s
CPU sys 113.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_extended
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5528108639-2118-h5trs 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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"

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/bytes-map-initial-capacity-accounting (b9e6252) to da89c7c (merge-base) diff

Run configuration
run benchmark clickbench_extended
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "4G"
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_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │   809.93 ms │                                    824.75 ms │ no change │
│ QQuery 1  │   191.32 ms │                                    194.25 ms │ no change │
│ QQuery 2  │   459.24 ms │                                    460.83 ms │ no change │
│ QQuery 3  │   316.45 ms │                                    319.04 ms │ no change │
│ QQuery 4  │  1990.76 ms │                                   2021.82 ms │ no change │
│ QQuery 5  │ 18733.40 ms │                                  17992.65 ms │ no change │
│ QQuery 6  │     2.65 ms │                                      2.72 ms │ no change │
│ QQuery 7  │  6752.44 ms │                                   6861.27 ms │ no change │
│ QQuery 8  │   423.46 ms │                                    423.92 ms │ no change │
│ QQuery 9  │  2719.32 ms │                                   2698.10 ms │ no change │
│ QQuery 10 │   642.92 ms │                                    627.93 ms │ no change │
│ QQuery 11 │  1917.21 ms │                                   1893.86 ms │ no change │
│ QQuery 12 │   188.78 ms │                                    192.79 ms │ no change │
│ QQuery 13 │   551.49 ms │                                    538.34 ms │ no change │
└───────────┴─────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 35699.37ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 35052.26ms │
│ Average Time (HEAD)                                         │  2549.96ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2503.73ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ Queries with Failure                                        │          0 │
└─────────────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and claude_bytes-map-initial-capacity-accounting
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃ claude_bytes-map-initial-capacity-accounting ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 0  │        809.93 / 855.25 ±24.92 / 884.49 ms │           824.75 / 858.48 ±17.39 / 870.71 ms │ no change │
│ QQuery 1  │         191.32 / 192.29 ±1.09 / 194.36 ms │            194.25 / 197.53 ±4.76 / 206.73 ms │ no change │
│ QQuery 2  │         459.24 / 461.58 ±2.20 / 465.05 ms │            460.83 / 465.89 ±4.37 / 472.34 ms │ no change │
│ QQuery 3  │         316.45 / 317.91 ±1.26 / 320.20 ms │            319.04 / 319.96 ±1.10 / 322.03 ms │ no change │
│ QQuery 4  │      1990.76 / 2002.55 ±7.95 / 2011.06 ms │        2021.82 / 2050.65 ±30.29 / 2108.44 ms │ no change │
│ QQuery 5  │ 18733.40 / 19174.00 ±323.22 / 19732.75 ms │    17992.65 / 19137.01 ±576.45 / 19500.14 ms │ no change │
│ QQuery 6  │               2.65 / 2.88 ±0.30 / 3.46 ms │                  2.72 / 2.96 ±0.28 / 3.49 ms │ no change │
│ QQuery 7  │    6752.44 / 7050.73 ±227.07 / 7402.69 ms │       6861.27 / 6993.09 ±121.19 / 7210.50 ms │ no change │
│ QQuery 8  │         423.46 / 429.99 ±5.96 / 440.83 ms │            423.92 / 428.03 ±2.75 / 430.67 ms │ no change │
│ QQuery 9  │    2719.32 / 2923.74 ±181.42 / 3252.00 ms │       2698.10 / 2876.39 ±134.22 / 3064.94 ms │ no change │
│ QQuery 10 │        642.92 / 667.99 ±23.81 / 696.19 ms │           627.93 / 649.45 ±14.32 / 667.05 ms │ no change │
│ QQuery 11 │     1917.21 / 2015.00 ±60.84 / 2089.23 ms │        1893.86 / 2009.47 ±73.96 / 2090.43 ms │ no change │
│ QQuery 12 │        188.78 / 200.24 ±10.77 / 217.56 ms │            192.79 / 198.41 ±7.24 / 212.44 ms │ no change │
│ QQuery 13 │        551.49 / 568.49 ±12.88 / 586.97 ms │           538.34 / 569.70 ±18.38 / 590.61 ms │ no change │
└───────────┴───────────────────────────────────────────┴──────────────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                           ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                           │ 36862.67ms │
│ Total Time (claude_bytes-map-initial-capacity-accounting)   │ 36757.03ms │
│ Average Time (HEAD)                                         │  2633.05ms │
│ Average Time (claude_bytes-map-initial-capacity-accounting) │  2625.50ms │
│ Queries Faster                                              │          0 │
│ Queries Slower                                              │          0 │
│ Queries with No Change                                      │         14 │
│ 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: da89c7c (merge-base) | Changed: claude/bytes-map-initial-capacity-accounting

clickbench_extended

Query Base Changed Change
Query 0 796.8 MiB 856.5 MiB +7.5%
Query 1 3.4 MiB 2.4 MiB -29.4%
Query 2 98.4 MiB 11.7 MiB -88.1%
Query 3 11.7 MiB 11.7 MiB +0.0%
Query 4 1.4 GiB 1.4 GiB +2.6%
Query 5 1.5 GiB 1.5 GiB +0.3%
Query 6 104 B 104 B +0.0%
Query 7 1.2 GiB 1.2 GiB -0.3%
Query 8 36.9 MiB 37.0 MiB +0.4%
Query 9 2.1 GiB 2.1 GiB +1.6%
Query 10 2.1 MiB 2.1 MiB +0.0%
Query 11 2.2 GiB 2.2 GiB +1.2%
Query 12 1.1 MiB 1.1 MiB -0.7%
Query 13 520 B 520 B +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
clickbench_extended base (da89c7c (merge-base)) 2.2 GiB 9.9 GiB 7.8 GiB 4.6×
clickbench_extended changed (claude/bytes-map-initial-capacity-accounting) 2.2 GiB 10.2 GiB 8.0 GiB 4.7×
Resource Usage

clickbench_extended — base (merge-base)

Metric Value
Wall time 185.0s
Peak memory 9.9 GiB
Avg memory 4.0 GiB
CPU user 1834.1s
CPU sys 112.7s
Peak spill 0 B

clickbench_extended — branch

Metric Value
Wall time 185.0s
Peak memory 10.2 GiB
Avg memory 4.4 GiB
CPU user 1841.7s
CPU sys 114.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Query 0: six runs, and a correction to the mechanism I gave earlier

An earlier comment on this PR put Query 0's pool-peak increase at +4.2% from four readings, and
explained it as a transient where an old and a new hash table are both live during a doubling.
That mechanism is wrong. Both the figure and the explanation are corrected below.

Six runs on the current head

All six ran clickbench_extended at DATAFUSION_RUNTIME_MEMORY_LIMIT: 4G against head
b9e6252ece.

run base changed change
1 814.8 MiB 877.0 MiB +7.6%
2 834.8 MiB 885.5 MiB +6.1%
3 812.8 MiB 871.0 MiB +7.2%
4 826.8 MiB 873.0 MiB +5.6%
5 814.8 MiB 846.5 MiB +3.9%
6 796.8 MiB 856.5 MiB +7.5%

Mean +6.3%. The base readings span 796.8 to 834.8 MiB and the changed readings span 846.5 to
885.5 MiB, so the two ranges do not overlap. This is a real effect, not run-to-run noise.

It is the accounting correction, not new allocation

Measured locally on a deterministic 3-file subset with -n 1, three builds of the same data and
command. The middle build differs from the base only in the accounting fix, because restoring
with_capacity(128) plus the 8 KiB buffer makes the constructors byte-identical to base:

build Q0 pool peak
base 48,421,820
branch with the warm-up restored 51,048,396
branch head 51,018,828

That decomposes the increase exactly:

  • +2,626,576 is the accounting correction. map_size charged
    capacity * size_of::<Entry>() and only on growth. allocation_size() charges the real
    hashbrown allocation, which is 4 * buckets + 5,384 more: the control bytes plus the 7/8
    load-factor slack. At full scale SearchPhrase holds about 6.02M distinct values, so 2^23
    buckets, which predicts about 32.0 MiB and matches the measured band.
  • −29,568 is the lazy constructor. It makes Q0 slightly better, not worse.

The transient explanation fails on two counts. The pool samples size() only between batches, so
a transient inside insert_unique is invisible to it. And the base performed the same doublings
above 224 entries anyway.

Query 0 is COUNT(DISTINCT) over three high-cardinality strings with no GROUP BY: a handful
of maps that each grow to millions of entries. That is the opposite population from the one this
PR targets, so the pre-allocation was never the dominant cost there and removing it buys nothing.

Why this is not a regression to fix

The extra 6.3% is memory the query always held and the pool could not see. Reverting the change
restores an under-report of about 19% on this path. That under-report is the bug this PR exists to
fix, and it is what the memory-limit improvement depends on: the minimum viable budget for a
grouped COUNT(DISTINCT Utf8) goes from 36 MB to 2.0 MB, and for Utf8View from 124 MB to 2.6 MB.

Restoring the warm-up was tested and makes Query 0 worse, so the "capacity hint from
GroupsAccumulatorAdapter" follow-up listed earlier is withdrawn. It is measurably
counterproductive.

Query 2 across the same six runs

The changed side reported 11.7 MiB in every run, against a base of 98.1 to 98.6 MiB. Six
consecutive readings of -88.1% with no variance on the changed side, and nine measurements in
total including the earlier runs.

…wBytesViewMap

Both maps tracked their hash table footprint in a `map_size` field that was
only ever incremented by `HashTableAllocExt::insert_accounted`, which charges
`capacity * size_of::<Entry>()` on growth and nothing else. That undercounts
in two ways.

`ArrowBytesViewMap::new` seeded `map_size` with
`capacity() * size_of::<Entry<V>>()`, which ignores the control bytes and the
trailing group that hashbrown allocates alongside the entry array, so the
reported size was roughly half the real allocation.

`ArrowBytesMap::new` seeded `map_size` with 0 despite pre-allocating a table
for 128 entries. Since `insert_accounted` only charges when the table grows,
any map holding fewer entries than the pre-allocated capacity reported its
hash table as free forever.

Drop the field and ask hashbrown for the exact figure with
`HashTable::allocation_size`, which covers entries, control bytes and the
trailing group. It is a constant time layout calculation, so `size()` stays
cheap, and it cannot drift out of sync with the table the way an
incrementally maintained counter can.
`ArrowBytesMap` and `ArrowBytesViewMap` always pre-allocated their hash
table, and `ArrowBytesMap` also pre-allocated an 8 KiB value buffer. That is
the right trade for the single map that backs a `GROUP BY` on one string
column, which goes on to hold every group value in the query. It is the wrong
trade for `BytesDistinctCountAccumulator` and
`BytesViewDistinctCountAccumulator`, because `GroupsAccumulatorAdapter`
creates one accumulator per group: a grouped `COUNT(DISTINCT)` over a high
cardinality key holds hundreds of thousands of them at once, and most see only
a handful of values, so the pre-allocation dwarfs the data.

Split the constructors. `new` no longer allocates anything, and
`with_capacity` keeps the previous behavior for the callers that want it. The
capacity is stored so `take` re-creates the map the way it was built. The
`GroupValuesBytes` and `GroupValuesBytesView` call sites move to
`with_capacity`; the two distinct-count accumulators stay on `new`.

The `arrow_bytes_map` benchmark also moves to `with_capacity`: its
`long_low_cardinality` case is defined by the distinct values fitting inside
the pre-allocated buffer.
Keep the comment about what `HashTable::allocation_size` covers next to the
value it describes, and say what the test helper's lower bound is derived
from.
`GroupValuesBytes::clear_shrink` and `GroupValuesBytesView::clear_shrink`
reset their map with `take()`, which restores the capacity the map was
configured with so the emptied map stays warm. That is what the emit path
wants, but `clear_shrink` exists to hand memory back before spilling and
before the spilled batch is sorted, so it left roughly 16 KiB (string and
binary) and 34 KiB (view) reserved instead of releasing it.

Add `clear_and_release` to `ArrowBytesMap` and `ArrowBytesViewMap`, which
empties the map and drops its allocations while remembering the configured
capacities so a later `take()` still warms the map up, and call it from the
two `clear_shrink` implementations. The pre-allocation stays at
construction, where the hot single column string `GROUP BY` path earns it.
A grouped `COUNT(DISTINCT <string>)` gets one accumulator per group, and
each of those owns a hash set of the distinct values it has seen. Those
sets were created pre-allocated, so the query's memory use tracked the
number of groups rather than the amount of data.

Add two `memory_limit` tests that turn that into a binary observable, one
for `Utf8` and one for `Utf8View`, over a new scenario of 4,000 groups
holding 2 distinct values each. Measured against this branch's base
commit with spilling disabled and `target_partitions` pinned to 1:

| value column | budget needed before | budget needed after |
| ------------ | -------------------- | ------------------- |
| `Utf8`       | ~35.5 MB             | ~1.9 MB             |
| `Utf8View`   | ~123 MB              | ~2.7 MB             |

The tests run at 8 MB and 16 MB respectively, so each sits at least 4x
above what the branch needs and at least 4x below what the base needs.
Both fail on the base commit with `Resources exhausted` and pass here.
The two grouped `COUNT(DISTINCT <string>)` memory limit tests only reach
the per group accumulators while
`single_distinct_aggregation_to_group_by` declines to rewrite the query.
They leant on `count(*)` for that, which the rule rejects only because
`count` is missing from the `sum`/`min`/`max` allow list.
#24859 proposes adding `count` to that list, which would
rewrite the query, remove the accumulators, and leave both tests passing
at any memory limit while still looking like they test something.

Aggregate `avg(payload)` over a new `Int64` column instead. `avg` cannot
be added to that list: the rule re-aggregates its own partial results
over the deduplicated inner group by, and averaging per group averages of
different sizes gives the wrong answer. That is why ClickBench Q9 keeps
its distinct aggregate under #24859.

Verified from the physical plan with #24859 cherry-picked on top of this
branch: the `avg` query still plans as
`aggr=[count(DISTINCT t.value), avg(t.payload)]`, while the `count(*)`
query becomes `aggr=[count(alias1), sum(alias2)]` over an inner
`GROUP BY group_key, value`, and drops from needing ~1.9 MB to ~0.9 MB.

Re-swept both thresholds against the base commit. `Utf8` needs ~35.5 MB
before and ~1.9 MB after; `Utf8View` needs ~123 MB before and ~2.5 MB
after, so the 8 MB and 16 MB limits keep at least 4x margin on each side
and are unchanged.
`ArrowBytesMap::new` starts its value buffer empty and
`ArrowBytesMap::with_capacity` starts it at `INITIAL_BUFFER_CAPACITY`.
`Vec` then doubles from wherever its first allocation landed, so the two
sit on different ladders and can hold the same values at capacities
differing by up to 2x, in either direction depending on the value
lengths. Measured on 500,000 distinct 28 byte values, the lazily grown
map reported 52,494,344 bytes against 45,154,312 for a pre-allocated
one, 16% more for identical contents.

That matters because the ungrouped `COUNT(DISTINCT <string>)`
accumulator is the caller that had a use for the warm up: it builds one
map and grows it to hold every distinct value in the input. Rounding
every buffer growth up to a power of two puts both constructors on one
ladder, so a lazily allocated map is never larger than a pre-allocated
one holding the same values. Growth stays geometric, so appending is
still amortized constant time. `ArrowBytesViewMap` has no such buffer
and is unaffected.

Two new tests cover the ungrouped path, which had none:
`ungrouped_utf8_accumulator_is_never_worse_than_a_pre_allocated_set` and
its `Utf8View` counterpart drive an accumulator to 0 through 500,000
distinct values and assert it is strictly cheaper than a pre-allocated
set at per group cardinalities and exactly equal at ungrouped ones. The
`Utf8` one fails without this change, at 1,000 distinct values, with the
lazy set reporting 110,408 bytes against 96,072. Two map level tests pin
the ladder itself.
@adriangb
adriangb force-pushed the claude/bytes-map-initial-capacity-accounting branch from b9e6252 to f31fc51 Compare September 3, 2026 17:45
@adriangb
adriangb marked this pull request as ready for review September 3, 2026 17:46
@adriangb

adriangb commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

@2010YOUY01 @kosiew would either of you be interested in reviewing this change?

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

Labels

core Core DataFusion crate functions Changes to functions implementation physical-expr Changes to the physical-expr crates physical-plan Changes to the physical-plan crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants