Skip to content

perf(arrow): fuse Boolean filter copying - #11918

Open
Rich-T-kid wants to merge 4 commits into
apache:mainfrom
Rich-T-kid:rich-T-kid/coalescer-boolean-filter-words
Open

Rich-T-kid wants to merge 4 commits into
apache:mainfrom
Rich-T-kid:rich-T-kid/coalescer-boolean-filter-words

Conversation

@Rich-T-kid

@Rich-T-kid Rich-T-kid commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Closes

Why

Follow-up to #11732 and #11867.

copy_rows_by_filter_from previously ran the Boolean filter kernel, producing temporary value and validity buffers. The coalescer immediately copied those buffers into its builders and discarded them. Now that the builders can append packed words, the filter kernel can write straight into the coalescer output.

What changed

The Boolean coalescer now uses the existing word-at-a-time compression kernel. Non-null and all-valid sources append values and advance validity lazily. Nullable sources compress values and validity together in one pass over the filter mask.

Empty filter words are skipped before reading the corresponding source words, which avoids touching most of the source for sparse filters. Sliced bitmaps, a filter shorter than the source, and an empty remainder are handled by the same chunked path.

Note on filter.rs

filter_bits_compress now emits packed words through a callback instead of owning its output buffer. The regular Boolean filter still collects those words into a Buffer through collect_filter_bits_compress, so its strategy selection and result are unchanged. The paired form lets the coalescer compress values and validity with one mask traversal. These helpers remain crate-private.

Example

Take this eight-row input:

row:        0      1      2      3      4      5      6      7
value:      true   false  true   true   false  false  true   false
valid:      yes    yes    no     yes    yes    no     yes    yes
predicate:  false  true   true   null   true   false  true   false

The null predicate at row 3 is normalized to false, so rows 1, 2, 4, and 6 are selected. With row 0 in the least-significant bit:

values:   0b01001101
validity: 0b11011011
filter:   0b01010110

The compression kernel produces:

compress(values, filter)   = 0b1010
compress(validity, filter) = 0b1101

Those four bits are appended directly to the output builders. The result is:

[false, null, false, true]

Larger inputs use the same operation on each 64-row chunk, carrying partial words between chunks.

Results

Test coverage

The tests compare the coalescer output with the Boolean filter kernel for nullable, non-null, and all-valid sources. They cover sliced inputs, null predicate entries, word boundaries, carry between words, a filter shorter than the source, an exact multiple of 64, and optimized and unoptimized predicates. A filter longer than the source is checked separately.

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (2637e5b) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@github-actions github-actions Bot added the arrow-kernels Crates that transform arrow data (e.g. compute, cast) label Oct 26, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (2637e5b) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.52     21.7±0.21ms        ? ?/sec    1.00     14.3±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.28      4.1±0.03ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.17      2.1±0.01ms        ? ?/sec    1.00   1764.3±4.14µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    496.6±1.73µs        ? ?/sec    1.01    499.9±2.17µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.01    105.7±0.21µs        ? ?/sec    1.00    105.0±0.25µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.01     31.8±0.17ms        ? ?/sec    1.00     15.8±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.65      6.3±0.02ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.41      3.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    889.4±1.77µs        ? ?/sec    1.00    888.3±1.68µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.02    197.2±0.30µs        ? ?/sec    1.00    193.0±0.35µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.4±0.14ms        ? ?/sec    1.00     15.5±0.09ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.1±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    850.5±1.04µs        ? ?/sec    1.00    850.8±1.73µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.01      2.3±0.01ms        ? ?/sec    1.00      2.3±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.00     22.2±0.04ms        ? ?/sec    1.01     22.4±0.13ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.02ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.00   1683.1±6.96µs        ? ?/sec    1.00   1688.6±7.97µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.0±0.09ms        ? ?/sec    1.02     12.2±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1387.7±5.05µs        ? ?/sec    1.01   1404.1±8.36µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    355.6±1.19µs        ? ?/sec    1.00    356.6±1.28µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.2±0.23µs        ? ?/sec    1.00    248.4±0.27µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.9±0.20ms        ? ?/sec    1.00     18.6±0.15ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.01    627.2±2.31µs        ? ?/sec    1.00    618.8±2.54µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    450.8±0.42µs        ? ?/sec    1.00    452.3±0.50µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-2bx3iakq-2158138a-9hhg

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

uname:

Linux bench-c6418656452-3869-hpbv7 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 280.1s
Peak memory 22.1 MiB
Avg memory 13.9 MiB
CPU user 277.8s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 18.6 MiB
Avg memory 13.6 MiB
CPU user 279.1s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch 3 times, most recently from 154cace to 56c6e8c Compare October 26, 2026 14:58
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (967d3d0) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (967d3d0) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.00     21.8±0.08ms        ? ?/sec    1.40     30.5±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.00      4.1±0.01ms        ? ?/sec    1.42      5.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.00      2.1±0.01ms        ? ?/sec    1.38      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.01    501.3±2.25µs        ? ?/sec    1.00    497.4±2.55µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.01    105.6±0.21µs        ? ?/sec    1.00    104.9±0.21µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        1.00     32.2±0.13ms        ? ?/sec    1.23     39.6±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.00      6.4±0.03ms        ? ?/sec    1.19      7.6±0.02ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.00      3.3±0.01ms        ? ?/sec    1.18      3.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    896.0±1.63µs        ? ?/sec    1.00    893.3±1.15µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.9±0.32µs        ? ?/sec    1.00    198.5±0.29µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.4±0.06ms        ? ?/sec    1.00     15.4±0.03ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.2±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.01    855.3±4.36µs        ? ?/sec    1.00    850.6±1.27µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.00     22.2±0.05ms        ? ?/sec    1.00     22.2±0.05ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.00   1690.5±4.93µs        ? ?/sec    1.00   1688.9±6.17µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.4±0.13ms        ? ?/sec    1.01     12.5±0.18ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.02  1420.3±10.57µs        ? ?/sec    1.00   1393.5±5.21µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.02    362.4±1.76µs        ? ?/sec    1.00    357.0±1.08µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.01    249.0±0.20µs        ? ?/sec    1.00    247.0±0.55µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.03     19.1±0.13ms        ? ?/sec    1.00     18.6±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.01      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.01    627.6±1.32µs        ? ?/sec    1.00    619.5±3.31µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.01    451.9±0.27µs        ? ?/sec    1.00    449.3±0.62µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1tw271hz-870aa374-gtwm

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

uname:

Linux bench-c6420019617-3871-jfr29 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 21.9 MiB
Avg memory 13.8 MiB
CPU user 278.8s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 290.1s
Peak memory 27.4 MiB
Avg memory 13.7 MiB
CPU user 284.1s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 967d3d0 to f66a20c Compare October 26, 2026 15:49
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (f66a20c) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch 2 times, most recently from e9faa76 to 0efb530 Compare October 26, 2026 16:11
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (f66a20c) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.00     21.5±0.09ms        ? ?/sec    1.42     30.6±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.00      4.0±0.01ms        ? ?/sec    1.43      5.8±0.02ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.00      2.1±0.00ms        ? ?/sec    1.39      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    497.3±1.47µs        ? ?/sec    1.00    496.9±1.87µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.01    106.0±0.22µs        ? ?/sec    1.00    105.1±0.14µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        1.00     32.0±0.18ms        ? ?/sec    1.24     39.5±0.07ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.00      6.4±0.03ms        ? ?/sec    1.19      7.6±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.00      3.3±0.02ms        ? ?/sec    1.18      3.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    890.3±1.23µs        ? ?/sec    1.01    895.6±1.68µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.3±0.21µs        ? ?/sec    1.01    199.1±0.32µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.04     16.1±0.35ms        ? ?/sec    1.00     15.5±0.05ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.02      2.2±0.04ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    855.5±4.56µs        ? ?/sec    1.00    852.5±2.48µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.3±0.01ms        ? ?/sec    1.01      2.3±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.02     22.7±0.50ms        ? ?/sec    1.00     22.2±0.09ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.05ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.00   1689.0±5.44µs        ? ?/sec    1.00   1689.7±5.89µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.01      3.1±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.1±0.08ms        ? ?/sec    1.02     12.3±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00  1416.0±12.78µs        ? ?/sec    1.00  1417.9±12.83µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    359.4±0.69µs        ? ?/sec    1.00    358.6±1.72µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.01    249.8±0.49µs        ? ?/sec    1.00    247.2±0.39µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.00     18.9±0.15ms        ? ?/sec    1.00     18.8±0.18ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    623.3±1.29µs        ? ?/sec    1.00    621.0±2.99µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.01    452.4±0.54µs        ? ?/sec    1.00    449.7±0.47µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1ken38iy-4504e04d-ct9z

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

uname:

Linux bench-c6420647876-3872-5k99t 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 27.0 MiB
Avg memory 13.8 MiB
CPU user 279.7s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 290.1s
Peak memory 18.2 MiB
Avg memory 13.7 MiB
CPU user 287.1s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 0efb530 to 2502bea Compare October 26, 2026 16:33
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (2502bea) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (2502bea) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.64     22.1±0.27ms        ? ?/sec    1.00     13.5±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.44      4.1±0.03ms        ? ?/sec    1.00      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.36      2.1±0.02ms        ? ?/sec    1.00   1549.7±2.72µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    497.6±1.39µs        ? ?/sec    1.00    498.4±2.10µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.4±0.16µs        ? ?/sec    1.00    104.9±0.52µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.15     32.6±0.27ms        ? ?/sec    1.00     15.2±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.71      6.5±0.04ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.47      3.4±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    890.3±1.34µs        ? ?/sec    1.00    888.4±2.24µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.02    197.4±0.24µs        ? ?/sec    1.00    192.8±0.56µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.01     15.4±0.05ms        ? ?/sec    1.00     15.3±0.04ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.00ms        ? ?/sec    1.00      2.1±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    852.8±2.12µs        ? ?/sec    1.00    851.7±1.44µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.01      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.3±0.13ms        ? ?/sec    1.00     22.2±0.05ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.01      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.00   1684.6±6.40µs        ? ?/sec    1.00   1686.6±7.30µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.1±0.15ms        ? ?/sec    1.00     12.1±0.13ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.03  1441.0±19.62µs        ? ?/sec    1.00   1402.9±8.70µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    356.6±1.01µs        ? ?/sec    1.00    356.2±1.69µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.4±0.26µs        ? ?/sec    1.00    247.6±0.47µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.00     18.6±0.13ms        ? ?/sec    1.01     18.8±0.16ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    621.6±0.97µs        ? ?/sec    1.00    620.8±2.36µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.5±0.34µs        ? ?/sec    1.00    452.2±0.39µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1exwvsr2-39029fda-8h8s

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

uname:

Linux bench-c6421908997-3873-bdhbz 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 20.6 MiB
Avg memory 13.7 MiB
CPU user 278.9s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 27.3 MiB
Avg memory 13.9 MiB
CPU user 282.1s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

filter: single_boolean, 8192, nulls: 0, selectivity: 0.1 1.00 497.6±1.39µs ? ?/sec 1.00 498.4±2.10µs ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8 1.00 105.4±0.16µs ? ?/sec 1.00 104.9±0.52µs ? ?/sec

created #11921 for this

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from a88e90c to 05de52d Compare October 26, 2026 17:44
Pack selected Boolean values and validity bits directly into the in-progress builders, avoiding temporary filtered arrays.

Check filter masks before reading source words so sparse inputs skip empty chunks. Use separate loops for sources with and without actual nulls, and carry compressed fragments across chunk boundaries while preserving lazy validity allocation.
@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 05de52d to 16e65c3 Compare October 26, 2026 18:09
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (16e65c3) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid marked this pull request as ready for review October 26, 2026 18:12
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

@mbutrovich if your interested this is ready for review. Should be the final PR related to booleans in the coalescer kernel & it implements the ideas you mentioned here #11732 (comment) 🚀

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark filter_kernels

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: filter_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (4d091cd) to 69be95c (merge-base) diff

Run configuration
run benchmark filter_kernels
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (e22fa80) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.56     21.5±0.08ms        ? ?/sec    1.00     13.8±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.32      4.1±0.02ms        ? ?/sec    1.00      3.1±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.21      2.1±0.01ms        ? ?/sec    1.00   1709.2±3.30µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    498.2±1.59µs        ? ?/sec    1.06    526.1±1.94µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.6±0.38µs        ? ?/sec    1.02    107.7±0.30µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.09     32.0±0.16ms        ? ?/sec    1.00     15.3±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.65      6.4±0.03ms        ? ?/sec    1.00      3.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.43      3.3±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    890.2±1.37µs        ? ?/sec    1.06    945.7±1.39µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.1±0.30µs        ? ?/sec    1.00    196.9±0.49µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.03     16.1±0.35ms        ? ?/sec    1.00     15.6±0.42ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.02      2.2±0.04ms        ? ?/sec    1.00      2.2±0.04ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    852.9±3.69µs        ? ?/sec    1.07    910.9±4.74µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.3±0.01ms        ? ?/sec    1.03      2.4±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.02     22.9±0.40ms        ? ?/sec    1.00     22.5±0.45ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.6±0.04ms        ? ?/sec    1.00      3.6±0.05ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.00   1690.4±5.07µs        ? ?/sec    1.04  1753.8±10.90µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.03      3.1±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.2±0.07ms        ? ?/sec    1.01     12.3±0.15ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.01   1406.7±9.20µs        ? ?/sec    1.00   1398.3±5.03µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.01    360.5±1.18µs        ? ?/sec    1.00    356.6±1.19µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    249.0±0.51µs        ? ?/sec    1.00    248.2±0.27µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.9±0.11ms        ? ?/sec    1.00     18.6±0.12ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.01    624.4±1.76µs        ? ?/sec    1.00    620.2±2.86µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    450.7±0.36µs        ? ?/sec    1.00    452.0±0.37µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-a7pbla7y-9f7e0324-m8jd

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

uname:

Linux bench-c6428080211-3906-ffxzn 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 26.0 MiB
Avg memory 13.8 MiB
CPU user 279.7s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 24.5 MiB
Avg memory 13.8 MiB
CPU user 282.0s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (4d091cd) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.60     22.1±0.59ms        ? ?/sec    1.00     13.8±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.37      4.2±0.04ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.23      2.1±0.02ms        ? ?/sec    1.00  1701.1±24.29µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    497.0±1.49µs        ? ?/sec    1.07   534.2±12.74µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.4±0.16µs        ? ?/sec    1.01    106.6±0.30µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.10     32.4±0.32ms        ? ?/sec    1.00     15.4±0.36ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.69      6.4±0.06ms        ? ?/sec    1.00      3.8±0.10ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.45      3.4±0.03ms        ? ?/sec    1.00      2.3±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    889.9±1.42µs        ? ?/sec    1.08   963.0±27.72µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.6±0.27µs        ? ?/sec    1.00    196.9±6.87µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.4±0.05ms        ? ?/sec    1.00     15.4±0.25ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.02ms        ? ?/sec    1.00      2.2±0.02ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.02    872.6±3.77µs        ? ?/sec    1.00   852.9±28.20µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.02      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.00     22.2±0.05ms        ? ?/sec    1.00     22.3±0.33ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.01      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.02   1719.5±5.75µs        ? ?/sec    1.00   1683.4±7.34µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.02      3.0±0.01ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.0±0.08ms        ? ?/sec    1.01     12.1±0.05ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1392.0±4.18µs        ? ?/sec    1.01  1403.2±45.13µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.01    357.5±0.47µs        ? ?/sec    1.00    355.3±1.57µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.3±0.32µs        ? ?/sec    1.00    248.6±3.30µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.8±0.12ms        ? ?/sec    1.00     18.6±0.12ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.01      2.3±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    622.8±0.96µs        ? ?/sec    1.00    621.7±7.86µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.1±1.37µs        ? ?/sec    1.00    453.1±3.93µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1rom390t-571e000f-ggq5

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

uname:

Linux bench-c6428094880-3907-878fd 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 22.6 MiB
Avg memory 13.8 MiB
CPU user 279.8s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 26.3 MiB
Avg memory 13.8 MiB
CPU user 280.0s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: filter_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (4d091cd) to 69be95c (merge-base) diff

Run configuration
run benchmark filter_kernels
shards: 1
Details
group                                                                                base                                   changed
-----                                                                                ----                                   -------
filter context decimal128 (kept 1/2)                                                 1.05     21.0±0.08µs        ? ?/sec    1.00     20.0±0.05µs        ? ?/sec
filter context decimal128 high selectivity (kept 1023/1024)                          1.04     20.0±0.12µs        ? ?/sec    1.00     19.2±0.11µs        ? ?/sec
filter context decimal128 low selectivity (kept 1/1024)                              1.00    147.1±0.62ns        ? ?/sec    1.00    147.3±1.40ns        ? ?/sec
filter context f32 w NULLs (kept 1/2)                                                1.00     20.0±0.02µs        ? ?/sec    1.01     20.3±0.01µs        ? ?/sec
filter context f32 w NULLs high selectivity (kept 1023/1024)                         1.00      5.5±0.01µs        ? ?/sec    1.01      5.5±0.01µs        ? ?/sec
filter context f32 w NULLs low selectivity (kept 1/1024)                             1.00    322.5±1.40ns        ? ?/sec    1.02    329.9±0.88ns        ? ?/sec
filter context fsb with value length 20 (kept 1/2)                                   1.02     46.7±0.75µs        ? ?/sec    1.00     45.7±0.14µs        ? ?/sec
filter context fsb with value length 20 high selectivity (kept 1023/1024)            1.01     24.3±0.48µs        ? ?/sec    1.00     24.0±0.17µs        ? ?/sec
filter context fsb with value length 20 low selectivity (kept 1/1024)                1.00    262.9±1.67ns        ? ?/sec    1.00    263.2±1.36ns        ? ?/sec
filter context fsb with value length 20 w NULLs (kept 1/2)                           1.03     56.0±0.22µs        ? ?/sec    1.00     54.6±0.16µs        ? ?/sec
filter context fsb with value length 20 w NULLs high selectivity (kept 1023/1024)    1.00     26.0±0.38µs        ? ?/sec    1.04     27.1±0.49µs        ? ?/sec
filter context fsb with value length 20 w NULLs low selectivity (kept 1/1024)        1.00    460.9±3.83ns        ? ?/sec    1.01    463.9±2.95ns        ? ?/sec
filter context fsb with value length 5 (kept 1/2)                                    1.03     46.1±0.19µs        ? ?/sec    1.00     44.6±0.02µs        ? ?/sec
filter context fsb with value length 5 high selectivity (kept 1023/1024)             1.04      4.8±0.02µs        ? ?/sec    1.00      4.7±0.01µs        ? ?/sec
filter context fsb with value length 5 low selectivity (kept 1/1024)                 1.04    244.5±1.75ns        ? ?/sec    1.00    234.5±1.23ns        ? ?/sec
filter context fsb with value length 5 w NULLs (kept 1/2)                            1.00     52.8±0.02µs        ? ?/sec    1.02     53.8±0.03µs        ? ?/sec
filter context fsb with value length 5 w NULLs high selectivity (kept 1023/1024)     1.01      6.6±0.01µs        ? ?/sec    1.00      6.5±0.01µs        ? ?/sec
filter context fsb with value length 5 w NULLs low selectivity (kept 1/1024)         1.02    426.8±4.08ns        ? ?/sec    1.00    419.9±3.25ns        ? ?/sec
filter context fsb with value length 50 (kept 1/2)                                   1.00     86.4±0.64µs        ? ?/sec    1.02     87.9±0.27µs        ? ?/sec
filter context fsb with value length 50 high selectivity (kept 1023/1024)            1.01     71.0±1.87µs        ? ?/sec    1.00     70.2±1.16µs        ? ?/sec
filter context fsb with value length 50 low selectivity (kept 1/1024)                1.00    279.7±1.58ns        ? ?/sec    1.11    309.4±1.39ns        ? ?/sec
filter context fsb with value length 50 w NULLs (kept 1/2)                           1.00     96.6±0.58µs        ? ?/sec    1.00     96.6±0.26µs        ? ?/sec
filter context fsb with value length 50 w NULLs high selectivity (kept 1023/1024)    1.01     66.4±0.78µs        ? ?/sec    1.00     65.9±1.77µs        ? ?/sec
filter context fsb with value length 50 w NULLs low selectivity (kept 1/1024)        1.00    503.9±4.10ns        ? ?/sec    1.01    506.4±4.11ns        ? ?/sec
filter context i32 (kept 1/2)                                                        1.00     12.4±0.03µs        ? ?/sec    1.00     12.3±0.02µs        ? ?/sec
filter context i32 high selectivity (kept 1023/1024)                                 1.01      3.7±0.01µs        ? ?/sec    1.00      3.7±0.00µs        ? ?/sec
filter context i32 low selectivity (kept 1/1024)                                     1.00    134.8±1.11ns        ? ?/sec    1.01    135.6±0.77ns        ? ?/sec
filter context i32 w NULLs (kept 1/2)                                                1.00     20.9±0.03µs        ? ?/sec    1.01     21.2±0.01µs        ? ?/sec
filter context i32 w NULLs at end (kept 1/2)                                         1.00     21.2±0.02µs        ? ?/sec    1.04     21.9±0.21µs        ? ?/sec
filter context i32 w NULLs at end high selectivity (kept 1023/1024)                  1.03      5.6±0.01µs        ? ?/sec    1.00      5.4±0.01µs        ? ?/sec
filter context i32 w NULLs high selectivity (kept 1023/1024)                         1.00      5.5±0.01µs        ? ?/sec    1.00      5.5±0.01µs        ? ?/sec
filter context i32 w NULLs low selectivity (kept 1/1024)                             1.00    328.1±1.39ns        ? ?/sec    1.02    336.0±1.11ns        ? ?/sec
filter context i32 w NULLs, only valid (kept 1/4)                                    1.00     16.3±0.12µs        ? ?/sec    1.02     16.7±0.10µs        ? ?/sec
filter context i32 w NULLs, only valid high selectivity (kept 1023/2048)             1.00     20.8±0.02µs        ? ?/sec    1.04     21.7±0.05µs        ? ?/sec
filter context i32 w NULLs, only valid low selectivity (kept 1/2048)                 1.00    227.4±0.67ns        ? ?/sec    1.01    229.1±1.11ns        ? ?/sec
filter context mixed string view w NULLs (kept 1/2)                                  1.00     28.5±0.06µs        ? ?/sec    1.03     29.5±0.10µs        ? ?/sec
filter context mixed string view w NULLs high selectivity (kept 1023/1024)           1.00     21.3±0.12µs        ? ?/sec    1.00     21.4±0.16µs        ? ?/sec
filter context mixed string view w NULLs low selectivity (kept 1/1024)               1.00    322.0±2.08ns        ? ?/sec    1.01    324.6±2.06ns        ? ?/sec
filter context short string view w NULLs (kept 1/2)                                  1.00     28.8±0.07µs        ? ?/sec    1.02     29.5±0.08µs        ? ?/sec
filter context short string view w NULLs high selectivity (kept 1023/1024)           1.00     20.9±0.11µs        ? ?/sec    1.00     20.8±0.28µs        ? ?/sec
filter context short string view w NULLs low selectivity (kept 1/1024)               1.00    323.0±2.18ns        ? ?/sec    1.01    325.8±1.78ns        ? ?/sec
filter context string dictionary (kept 1/2)                                          1.14     14.0±0.18µs        ? ?/sec    1.00     12.3±0.01µs        ? ?/sec
filter context string dictionary high selectivity (kept 1023/1024)                   1.00      3.7±0.01µs        ? ?/sec    1.00      3.7±0.00µs        ? ?/sec
filter context string dictionary low selectivity (kept 1/1024)                       1.00    193.3±1.52ns        ? ?/sec    1.02    196.6±1.71ns        ? ?/sec
filter context string dictionary w NULLs (kept 1/2)                                  1.00     21.0±0.02µs        ? ?/sec    1.07     22.4±0.41µs        ? ?/sec
filter context string dictionary w NULLs high selectivity (kept 1023/1024)           1.00      5.6±0.01µs        ? ?/sec    1.00      5.6±0.01µs        ? ?/sec
filter context string dictionary w NULLs low selectivity (kept 1/1024)               1.00    393.7±2.05ns        ? ?/sec    1.01    397.3±2.41ns        ? ?/sec
filter context string w NULLs (kept 1/2)                                             1.03    363.0±1.55µs        ? ?/sec    1.00    353.5±0.87µs        ? ?/sec
filter context string w NULLs high selectivity (kept 1023/1024)                      1.02    317.7±3.17µs        ? ?/sec    1.00    312.1±1.50µs        ? ?/sec
filter context string w NULLs low selectivity (kept 1/1024)                          1.00    689.5±5.50ns        ? ?/sec    1.01    697.1±4.16ns        ? ?/sec
filter context u8 (kept 1/2)                                                         1.00     12.5±0.73µs        ? ?/sec    1.12     14.0±0.19µs        ? ?/sec
filter context u8 high selectivity (kept 1023/1024)                                  1.00   1046.8±4.10ns        ? ?/sec    1.06   1112.2±2.21ns        ? ?/sec
filter context u8 low selectivity (kept 1/1024)                                      1.00    124.4±0.75ns        ? ?/sec    1.02    127.1±0.58ns        ? ?/sec
filter context u8 w NULLs (kept 1/2)                                                 1.00     20.7±0.02µs        ? ?/sec    1.01     21.0±0.01µs        ? ?/sec
filter context u8 w NULLs high selectivity (kept 1023/1024)                          1.00      2.8±0.01µs        ? ?/sec    1.03      2.9±0.01µs        ? ?/sec
filter context u8 w NULLs low selectivity (kept 1/1024)                              1.00    312.8±1.56ns        ? ?/sec    1.00    311.4±1.40ns        ? ?/sec
filter decimal128 (kept 1/2)                                                         1.03     31.6±0.07µs        ? ?/sec    1.00     30.7±0.09µs        ? ?/sec
filter decimal128 high selectivity (kept 1023/1024)                                  1.05     21.0±0.13µs        ? ?/sec    1.00     20.0±0.12µs        ? ?/sec
filter decimal128 low selectivity (kept 1/1024)                                      1.00   1226.9±3.50ns        ? ?/sec    1.00   1229.7±3.25ns        ? ?/sec
filter f32 w NULLs (kept 1/2)                                                        1.00     37.3±0.02µs        ? ?/sec    1.01     37.6±0.05µs        ? ?/sec
filter fsb with value length 20 (kept 1/2)                                           1.01     58.3±0.13µs        ? ?/sec    1.00     57.5±0.23µs        ? ?/sec
filter fsb with value length 20 high selectivity (kept 1023/1024)                    1.02     24.5±0.20µs        ? ?/sec    1.00     24.1±0.15µs        ? ?/sec
filter fsb with value length 20 low selectivity (kept 1/1024)                        1.00   1242.0±1.58ns        ? ?/sec    1.01   1250.7±4.29ns        ? ?/sec
filter fsb with value length 20 w NULLs (kept 1/2)                                   1.00     66.5±0.11µs        ? ?/sec    1.01     66.9±0.09µs        ? ?/sec
filter fsb with value length 20 w NULLs high selectivity (kept 1023/1024)            1.00     26.4±0.21µs        ? ?/sec    1.00     26.4±0.19µs        ? ?/sec
filter fsb with value length 20 w NULLs low selectivity (kept 1/1024)                1.00   1742.8±5.74ns        ? ?/sec    1.03   1799.0±4.78ns        ? ?/sec
filter fsb with value length 5 (kept 1/2)                                            1.01     56.0±0.05µs        ? ?/sec    1.00     55.7±0.05µs        ? ?/sec
filter fsb with value length 5 high selectivity (kept 1023/1024)                     1.01      5.5±0.01µs        ? ?/sec    1.00      5.4±0.01µs        ? ?/sec
filter fsb with value length 5 low selectivity (kept 1/1024)                         1.01   1202.1±1.94ns        ? ?/sec    1.00   1194.8±4.46ns        ? ?/sec
filter fsb with value length 5 w NULLs (kept 1/2)                                    1.00     64.4±0.05µs        ? ?/sec    1.01     65.2±0.10µs        ? ?/sec
filter fsb with value length 5 w NULLs high selectivity (kept 1023/1024)             1.00      8.0±0.01µs        ? ?/sec    1.00      8.0±0.01µs        ? ?/sec
filter fsb with value length 5 w NULLs low selectivity (kept 1/1024)                 1.00   1720.6±4.68ns        ? ?/sec    1.01   1746.4±4.78ns        ? ?/sec
filter fsb with value length 50 (kept 1/2)                                           1.00    95.0±22.32µs        ? ?/sec    1.00     95.1±0.53µs        ? ?/sec
filter fsb with value length 50 high selectivity (kept 1023/1024)                    1.01     72.0±0.88µs        ? ?/sec    1.00     71.3±0.67µs        ? ?/sec
filter fsb with value length 50 low selectivity (kept 1/1024)                        1.00   1264.9±2.18ns        ? ?/sec    1.01   1273.0±4.24ns        ? ?/sec
filter fsb with value length 50 w NULLs (kept 1/2)                                   1.00    102.4±0.44µs        ? ?/sec    1.04    106.2±0.54µs        ? ?/sec
filter fsb with value length 50 w NULLs high selectivity (kept 1023/1024)            1.00     69.2±0.86µs        ? ?/sec    1.01     69.7±0.90µs        ? ?/sec
filter fsb with value length 50 w NULLs low selectivity (kept 1/1024)                1.00   1740.4±4.87ns        ? ?/sec    1.04   1801.5±7.76ns        ? ?/sec
filter i32 (kept 1/2)                                                                1.01     27.6±0.09µs        ? ?/sec    1.00     27.3±0.03µs        ? ?/sec
filter i32 high selectivity (kept 1023/1024)                                         1.00      4.3±0.01µs        ? ?/sec    1.00      4.3±0.01µs        ? ?/sec
filter i32 low selectivity (kept 1/1024)                                             1.00   1158.0±3.42ns        ? ?/sec    1.05   1214.4±0.74ns        ? ?/sec
filter optimize (kept 1/2)                                                           1.00     27.4±0.11µs        ? ?/sec    1.02     28.0±0.02µs        ? ?/sec
filter optimize high selectivity (kept 1023/1024)                                    1.00   1607.4±2.91ns        ? ?/sec    1.01   1624.1±0.82ns        ? ?/sec
filter optimize low selectivity (kept 1/1024)                                        1.00    801.8±2.95ns        ? ?/sec    1.00    802.2±1.20ns        ? ?/sec
filter run array (kept 1/2)                                                          1.00    283.6±1.91µs        ? ?/sec    1.00    283.8±1.59µs        ? ?/sec
filter run array high selectivity (kept 1023/1024)                                   1.00    286.5±3.48µs        ? ?/sec    1.00    286.7±3.03µs        ? ?/sec
filter run array low selectivity (kept 1/1024)                                       1.00    235.0±0.93µs        ? ?/sec    1.00    235.4±0.84µs        ? ?/sec
filter single record batch                                                           1.00     28.5±0.02µs        ? ?/sec    1.01     28.7±0.03µs        ? ?/sec
filter u8 (kept 1/2)                                                                 1.00     27.2±0.13µs        ? ?/sec    1.00     27.1±0.04µs        ? ?/sec
filter u8 high selectivity (kept 1023/1024)                                          1.00   1808.9±9.91ns        ? ?/sec    1.00   1811.3±4.00ns        ? ?/sec
filter u8 low selectivity (kept 1/1024)                                              1.00  1172.4±18.26ns        ? ?/sec    1.00  1169.0±13.07ns        ? ?/sec

Per-runner information
filter_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1rom390t-571e000f-jrjb

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

uname:

Linux bench-c6428110976-3909-ll2kh 6.12.105+ #1 SMP Sat Sep  5 07:54:11 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench filter_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 900.2s
Peak memory 38.4 MiB
Avg memory 22.9 MiB
CPU user 893.8s
CPU sys 0.1s
Peak spill 0 B

branch

Metric Value
Wall time 895.2s
Peak memory 44.1 MiB
Avg memory 24.0 MiB
CPU user 893.0s
CPU sys 0.1s
Peak spill 0 B

File an issue against this benchmark runner

@mbutrovich mbutrovich left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @Rich-T-kid. Left an inline comment about a proposed code change, not sure if it's a net win. We'd have to benchmark with the bot.

Comment thread arrow-select/src/filter.rs Resolved
Comment on lines +848 to +861
fn push(&mut self, bits: u64, count: u32) -> Option<u64> {
self.current |= bits << self.filled;
let total = self.filled + mask.count_ones();
let total = self.filled + count;
if total < 64 {
self.filled = total;
} else {
// SAFETY: `count` is the number of set bits in the filter, so
// at most `count / 64` words are ever completed and the
// buffer holds `count / 64 + 1`
unsafe { self.ptr.add(self.idx).write(self.current) };
self.idx += 1;
// `bits >> (64 - filled)`, written so that `filled == 0`
// shifts everything out
self.current = (bits >> 1) >> (63 - self.filled);
self.filled = total - 64;
return None;
}

let complete = self.current;
// `bits >> (64 - filled)`, written so that `filled == 0`
// shifts everything out
self.current = (bits >> 1) >> (63 - self.filled);
self.filled = total - 64;
Some(complete)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Does sharing this loop slow down the regular Boolean filter? The 10% and 80% single_boolean rows are above the 1/16 sparse cutoff (coalesce.rs), so they measure collect_filter_bits_compress, not the fused path (#11921 says the same). On the bot, the 10% rows have been 6% to 8% slower since the Packer refactor (run).

As I read the codegen, returning Option<u64> lets LLVM turn the total < 64 branch into selects, so the carry is computed on every non-zero mask word. With thin LTO on aarch64, the path where no word completes goes from 5 instructions at the merge-base to 12. These are the added ones:

lsr   x10, x23, #1          // carry, now on every word
eor   w11, w11, #0x3f
lsr   x10, x10, x11
cmp   w20, #0x3f
csel  w11, w11, w20, hi     // filled
csel  x10, x10, x21, hi     // current
cmp   w20, #0x40

With -C target-cpu=x86-64-v3, current also moves to the stack, with a load and a store on every non-zero mask word.

What do you think about one packer for both bitmaps? They keep the same number of bits per word, so they can share filled, and completed words can be emitted inside the branch as at the merge-base. This also drops PAIR, the Option and the unwraps:

#[inline(always)]
fn filter_bits_compress_impl<const N: usize>(
    buffers: [&BooleanBuffer; N],
    predicate: &FilterPredicate,
    mut append: impl FnMut([u64; N], usize),
) {
    /// Packs the bits extracted from successive words into the low `filled`
    /// bits of each of `current`. Every bitmap keeps the same number of bits
    /// per word, so they share `filled`.
    struct Packer<const N: usize> {
        current: [u64; N],
        filled: u32,
    }

    impl<const N: usize> Packer<N> {
        #[inline(always)]
        fn push(
            &mut self,
            values: [u64; N],
            mask: u64,
            append: &mut impl FnMut([u64; N], usize),
        ) {
            let mut bits = [0; N];
            for (bits, values) in bits.iter_mut().zip(values) {
                *bits = bit_util::compress(values, mask);
            }
            for (current, bits) in self.current.iter_mut().zip(bits) {
                *current |= bits << self.filled;
            }
            let total = self.filled + mask.count_ones();
            if total < 64 {
                self.filled = total;
            } else {
                append(self.current, 64);
                for (current, bits) in self.current.iter_mut().zip(bits) {
                    // `bits >> (64 - filled)`, written so that `filled == 0`
                    // shifts everything out
                    *current = (bits >> 1) >> (63 - self.filled);
                }
                self.filled = total - 64;
            }
        }
    }

    let len = predicate.filter.len();
    for buffer in buffers {
        assert!(buffer.len() >= len);
    }
    let mask_chunks = predicate.filter.values().bit_chunks();
    let chunks = buffers.map(|buffer| BitChunks::new(buffer.values(), buffer.offset(), len));
    debug_assert_eq!(predicate.count, predicate.filter.true_count());

    let mut packer = Packer { current: [0; N], filled: 0 };
    for (index, mask) in mask_chunks.iter().enumerate() {
        // Words with no kept bits are skipped before the corresponding values
        // are read, so only the mask is touched for them
        if mask == 0 {
            continue;
        }
        packer.push(chunks.each_ref().map(|c| c.chunk(index)), mask, &mut append);
    }
    let mask = mask_chunks.remainder_bits();
    if mask != 0 {
        packer.push(chunks.each_ref().map(|c| c.remainder_bits()), mask, &mut append);
    }
    if packer.filled != 0 {
        append(packer.current, packer.filled as usize);
    }
}

filter_bits_compress and filter_bits_compress_pair then pass [buffer] and [first, second]. Two details matter for the generated code. The compress step needs to be a loop, because values.map(...) leaves compress out of line on aarch64. And filter_bits_compress should be #[inline(always)], so the loop lands in collect_filter_bits_compress and idx stays in a register instead of being stored through the closure on every completed word.

Here is the change against the merge-base on an Apple silicon Mac with thin LTO, as the median of three interleaved runs. Each cell gives the default build first, then the build with -C llvm-args=-align-all-functions=7 -C llvm-args=-align-all-nofallthru-blocks=7:

case this PR shared packer
no nulls, 1% selected 11% / 14% faster 25% / 25% faster
10% nulls, 1% selected 30% / 34% faster 34% / 34% faster
no nulls, 10% selected 3% faster / 4% slower 4% / 2% faster
10% nulls, 10% selected 3% faster / 2% slower 7% / 2% faster
no nulls, 80% selected 1% / 7% slower 5% / 5% slower
10% nulls, 80% selected 3% / 11% slower 7% / 9% slower

The 80% rows are still slower with both versions. A profile puts about 80% of that case in the compress loop, and I couldn't find the cause in the listings. Could you look into that case and rerun the bot, which runs on Neoverse-V2?

Could you also add a Boolean data case to filter_kernels, in its own commit first? Today it uses Boolean arrays only as filter masks.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Thanks for digging into this. I tried the shared packer as suggested, including the loop around compress and #[inline(always)] on filter_bits_compress, and added the Boolean filter_kernels cases in a separate commit.

On Neoverse-V2, the shared packer made the regular Boolean path worse: the 80% cases regressed by about 19% without nulls and 22% with nulls, while the 10% cases regressed by about 5-6% (run). I also tried keeping the shared packer but restoring #[inline(never)]; that was slightly worse again, with 21-24% regressions at 80% and 8-11% at 10% (run).

I reverted the shared-packer change. The final-head run is back to roughly flat at 80% (+2% without nulls, flat with nulls), while preserving the sparse gains (run). The 10% cases are still about 7-8% slower, so that part remains unresolved, but the shared packer does not appear to be the fix on Neoverse-V2.

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean

@adriangbot

Copy link
Copy Markdown

Hi @Rich-T-kid, your benchmark configuration could not be parsed (#11918 (comment)).

Error: invalid configuration: found unexpected end of stream at line 2 column 32, while scanning a quoted scalar at line 2 column 17

Usage:

run benchmark <name>           # run specific benchmark(s)
run benchmarks                 # run default suite
run benchmarks <name1> <name2> # run specific benchmarks

Any benchmark name is accepted: bench.sh suite names (e.g. tpch, clickbench_partitioned, wide_schema) and Criterion bench targets (e.g. sql_planner) are resolved automatically. A name that matches neither fails on the runner.

Per-side configuration (run benchmark tpch followed by):

env:
# shared env is inherited by BOTH the build and the run, so build
# flags go here. Builds default to no debuginfo for speed; opt back
# in for hung-job gdb dumps and cap jobs to stay within memory:
CARGO_PROFILE_RELEASE_DEBUG: "1"
CARGO_BUILD_JOBS: "1"
baseline:
ref: v45.0.0
env:
# per-side env only reaches the benchmark run, not the build
DATAFUSION_RUNTIME_MEMORY_LIMIT: 1G
changed:
ref: v46.0.0
env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 2G

Pod size and CPU architecture (each key is optional and keeps the default when absent; requests and limits are set equal):

resources:
cpu: "16"
memory: "128Gi"
arch: arm64          # arm64 or amd64

Independent benchmark shards (optional; 1–8, default 1):

run benchmark arrow_writer
shards: 4

Each shard builds both revisions, measures its assigned cases, and posts its own report. Resources and the job deadline apply per shard. DataFusion requests specifying a shard count greater than 1 fail with an error. Omit shards or use shards: 1 for DataFusion.


File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

1 similar comment
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (5bcede6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (5bcede6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (5bcede6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.63     22.3±0.32ms        ? ?/sec    1.00     13.7±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.40      4.2±0.05ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.30      2.1±0.02ms        ? ?/sec    1.00   1625.3±3.40µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    500.5±1.97µs        ? ?/sec    1.08    539.5±2.63µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.4±0.20µs        ? ?/sec    1.02    107.0±0.17µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.11     32.7±0.38ms        ? ?/sec    1.00     15.5±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.71      6.5±0.07ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.47      3.4±0.03ms        ? ?/sec    1.00      2.3±0.00ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    891.3±1.33µs        ? ?/sec    1.08    962.3±1.44µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.1±0.27µs        ? ?/sec    1.00    196.9±0.41µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.01     15.4±0.04ms        ? ?/sec    1.00     15.3±0.05ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.03      2.2±0.02ms        ? ?/sec    1.00      2.1±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    962.4±5.55µs        ? ?/sec    1.02    985.5±5.41µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.5±0.01ms        ? ?/sec    1.01      2.5±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.5±0.06ms        ? ?/sec    1.00     22.3±0.11ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.03   1819.7±5.51µs        ? ?/sec    1.00   1775.1±7.64µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.0±0.09ms        ? ?/sec    1.01     12.1±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1391.1±4.71µs        ? ?/sec    1.00   1394.4±7.28µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    355.7±0.55µs        ? ?/sec    1.00    354.1±0.86µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.3±0.22µs        ? ?/sec    1.00    247.9±0.30µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.02     18.8±0.11ms        ? ?/sec    1.00     18.5±0.10ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    622.0±1.05µs        ? ?/sec    1.00    619.4±3.05µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    450.9±0.33µs        ? ?/sec    1.00    452.3±0.53µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-dz1ftj4m-11a3fe47-twbr

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

uname:

Linux bench-c6488442499-4103-6t4ln 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 24.4 MiB
Avg memory 13.8 MiB
CPU user 282.6s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 280.1s
Peak memory 24.6 MiB
Avg memory 13.9 MiB
CPU user 277.0s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (5bcede6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.65     22.6±0.53ms        ? ?/sec    1.00     13.7±0.03ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.40      4.2±0.03ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.30      2.1±0.02ms        ? ?/sec    1.00   1625.9±2.19µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    499.9±1.53µs        ? ?/sec    1.08    537.8±3.34µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.2±0.12µs        ? ?/sec    1.03    107.9±0.39µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.13     33.1±0.27ms        ? ?/sec    1.00     15.5±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.73      6.6±0.05ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.48      3.4±0.02ms        ? ?/sec    1.00      2.3±0.00ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    892.0±1.20µs        ? ?/sec    1.09    969.3±2.86µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    196.6±0.18µs        ? ?/sec    1.01    197.7±0.49µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.01     15.4±0.05ms        ? ?/sec    1.00     15.3±0.03ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.1±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.04    944.2±5.22µs        ? ?/sec    1.00    904.7±4.17µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.5±0.01ms        ? ?/sec    1.01      2.5±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.5±0.05ms        ? ?/sec    1.00     22.2±0.06ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.06   1840.9±8.88µs        ? ?/sec    1.00   1731.8±9.13µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.0±0.10ms        ? ?/sec    1.05     12.6±0.18ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1391.2±4.93µs        ? ?/sec    1.03  1426.8±11.79µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    355.2±0.65µs        ? ?/sec    1.01    357.5±1.89µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.8±0.62µs        ? ?/sec    1.00    247.8±0.33µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.8±0.15ms        ? ?/sec    1.00     18.6±0.21ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.02ms        ? ?/sec    1.01      2.3±0.03ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    620.5±0.84µs        ? ?/sec    1.00    623.2±2.99µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    450.5±0.36µs        ? ?/sec    1.00    452.4±0.31µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-dz1ftj4m-11a3fe47-rzzn

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

uname:

Linux bench-c6488441387-4102-c9qxc 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 290.1s
Peak memory 19.9 MiB
Avg memory 13.5 MiB
CPU user 281.9s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 24.9 MiB
Avg memory 13.8 MiB
CPU user 281.1s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (b12e8f7) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@github-actions github-actions Bot added the arrow-core Core crates related to representing arrow data label Oct 29, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (b12e8f7) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.33     21.9±0.12ms        ? ?/sec    1.00     16.5±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.24      4.1±0.03ms        ? ?/sec    1.00      3.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.22      2.1±0.01ms        ? ?/sec    1.00   1706.5±6.05µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    500.2±2.10µs        ? ?/sec    1.05    526.4±1.44µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.3±0.16µs        ? ?/sec    1.19    125.3±0.35µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        1.73     32.3±0.13ms        ? ?/sec    1.00     18.7±0.03ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.57      6.4±0.02ms        ? ?/sec    1.00      4.1±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.48      3.3±0.01ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    890.6±1.40µs        ? ?/sec    1.06    943.1±1.46µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    196.9±0.23µs        ? ?/sec    1.22    239.2±0.27µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.4±0.04ms        ? ?/sec    1.00     15.5±0.03ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.2±0.02ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.20   1006.7±7.23µs        ? ?/sec    1.00    842.4±1.79µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.01      2.5±0.00ms        ? ?/sec    1.00      2.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.5±0.06ms        ? ?/sec    1.00     22.3±0.09ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.00ms        ? ?/sec    1.01      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.09   1830.4±6.72µs        ? ?/sec    1.00   1679.0±7.97µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.0±0.09ms        ? ?/sec    1.03     12.4±0.18ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1389.8±4.09µs        ? ?/sec    1.00   1393.6±5.56µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    355.4±0.47µs        ? ?/sec    1.00    355.4±1.26µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.01    248.4±0.25µs        ? ?/sec    1.00    246.3±0.41µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.7±0.13ms        ? ?/sec    1.00     18.6±0.21ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.00      2.3±0.02ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    621.2±0.91µs        ? ?/sec    1.00    619.9±3.15µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    450.9±0.41µs        ? ?/sec    1.00    451.6±1.53µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-719asvrk-4ddf4dad-4r5x

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

uname:

Linux bench-c6502412595-4115-thz5x 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 25.4 MiB
Avg memory 13.6 MiB
CPU user 278.1s
CPU sys 0.4s
Peak spill 0 B

branch

Metric Value
Wall time 290.1s
Peak memory 23.8 MiB
Avg memory 13.9 MiB
CPU user 285.0s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from b12e8f7 to 560aec6 Compare October 29, 2026 16:56
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (560aec6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (560aec6) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.32     22.0±0.09ms        ? ?/sec    1.00     16.7±0.03ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.26      4.1±0.01ms        ? ?/sec    1.00      3.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.25      2.1±0.00ms        ? ?/sec    1.00   1660.6±5.31µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    501.3±1.39µs        ? ?/sec    1.08    543.7±1.99µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.2±0.18µs        ? ?/sec    1.21    127.7±0.34µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        1.80     32.4±0.13ms        ? ?/sec    1.00     17.9±0.10ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.64      6.4±0.02ms        ? ?/sec    1.00      3.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.53      3.3±0.01ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    890.8±2.48µs        ? ?/sec    1.11    984.4±2.38µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    196.8±0.27µs        ? ?/sec    1.24    244.5±0.42µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.6±0.06ms        ? ?/sec    1.00     15.7±0.07ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.14    966.7±8.50µs        ? ?/sec    1.00    851.2±3.07µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.5±0.00ms        ? ?/sec    1.00      2.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.8±0.08ms        ? ?/sec    1.00     22.6±0.17ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.09   1838.6±5.81µs        ? ?/sec    1.00   1684.9±8.63µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.5±0.40ms        ? ?/sec    1.00     12.5±0.32ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00  1441.3±45.31µs        ? ?/sec    1.01  1451.4±33.45µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.01    360.7±3.92µs        ? ?/sec    1.00    357.3±4.05µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.01    249.3±0.79µs        ? ?/sec    1.00    246.9±0.80µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.03     19.2±0.37ms        ? ?/sec    1.00     18.7±0.32ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.04ms        ? ?/sec    1.00      2.3±0.04ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    625.4±4.93µs        ? ?/sec    1.01    628.7±4.73µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.2±0.70µs        ? ?/sec    1.01    453.7±0.75µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-19rvsxps-9e352737-8wms

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

uname:

Linux bench-c6503034873-4123-l2rjg 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 280.1s
Peak memory 24.4 MiB
Avg memory 13.8 MiB
CPU user 276.8s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 290.1s
Peak memory 25.0 MiB
Avg memory 13.8 MiB
CPU user 285.0s
CPU sys 0.3s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 560aec6 to f059b1e Compare October 29, 2026 17:11
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

run benchmark coalesce_kernels
env:
BENCH_FILTER: "single_boolean"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark starting (GKE) | trigger

Target: coalesce_kernels

Sharding factor: 1 (1 workers).

Comparing rich-T-kid/coalescer-boolean-filter-words (f059b1e) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1

Results will be posted when all workers finish.


File an issue against this benchmark runner

@Rich-T-kid

Rich-T-kid commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor Author

seems to cause perf regressions. It may be worth it to go with the simplified focused approach that gave the best results

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

Comparing rich-T-kid/coalescer-boolean-filter-words (f059b1e) to 69be95c (merge-base) diff

Run configuration
run benchmark coalesce_kernels
env:
  BENCH_FILTER: single_boolean
shards: 1
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.64     22.5±0.18ms        ? ?/sec    1.00     13.7±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.40      4.2±0.03ms        ? ?/sec    1.00      3.0±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.30      2.1±0.01ms        ? ?/sec    1.00   1629.5±3.79µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    502.3±4.50µs        ? ?/sec    1.07    535.0±2.10µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.5±0.57µs        ? ?/sec    1.02    107.2±0.30µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.14     33.2±0.19ms        ? ?/sec    1.00     15.5±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.74      6.6±0.03ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.48      3.4±0.02ms        ? ?/sec    1.00      2.3±0.00ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    895.9±4.35µs        ? ?/sec    1.08    963.8±2.01µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    197.1±0.74µs        ? ?/sec    1.00    197.5±0.61µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.02     15.5±0.10ms        ? ?/sec    1.00     15.3±0.04ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.01ms        ? ?/sec    1.00      2.1±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    919.3±4.64µs        ? ?/sec    1.00    918.3±6.30µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.8        1.00      2.5±0.00ms        ? ?/sec    1.01      2.5±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.001    1.01     22.6±0.05ms        ? ?/sec    1.00     22.3±0.13ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.03  1777.2±14.08µs        ? ?/sec    1.00   1721.7±6.46µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.2±0.01ms        ? ?/sec    1.00      3.2±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.1±0.09ms        ? ?/sec    1.01     12.2±0.09ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1397.3±5.60µs        ? ?/sec    1.01   1404.8±6.73µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    355.3±0.77µs        ? ?/sec    1.00    356.3±1.05µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.6±0.26µs        ? ?/sec    1.00    247.6±0.27µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.02     18.8±0.18ms        ? ?/sec    1.00     18.5±0.10ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.01      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    620.9±1.24µs        ? ?/sec    1.00    619.4±2.55µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.2±0.42µs        ? ?/sec    1.00    452.5±0.53µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-19rvsxps-9e352737-pg5k

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

uname:

Linux bench-c6503372087-4124-hp9nh 6.12.105+ #1 SMP Sat Sep 19 07:55:25 UTC 2026 aarch64 GNU/Linux

BENCH_COMMAND:

cargo bench --features=arrow,async,test_common,experimental,object_store --bench coalesce_kernels
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
Resource Usage

base (merge-base)

Metric Value
Wall time 285.1s
Peak memory 26.1 MiB
Avg memory 13.7 MiB
CPU user 281.8s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 25.3 MiB
Avg memory 13.8 MiB
CPU user 280.1s
CPU sys 0.2s
Peak spill 0 B

File an issue against this benchmark runner

This branch has not been deployed

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

Labels

arrow-core Core crates related to representing arrow data arrow-kernels Crates that transform arrow data (e.g. compute, cast) performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Avoid temporary Boolean buffers when filtering in BatchCoalescer

3 participants