Skip to content

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

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

Rich-T-kid wants to merge 2 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) 🚀

@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, this is the order we talked about in #11732, and the sparse-filter numbers from the bot look good. Filing #11921 for the dense cases is the right call.

Comment thread arrow-select/src/coalesce/boolean.rs Outdated
Comment thread arrow-select/src/coalesce/boolean.rs
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Target: coalesce_kernels

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
Details
group                                                               base                                   changed
-----                                                               ----                                   -------
filter: single_boolean, 8192, nulls: 0, selectivity: 0.001          1.62     21.9±0.17ms        ? ?/sec    1.00     13.5±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.43      4.1±0.03ms        ? ?/sec    1.00      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.35      2.1±0.01ms        ? ?/sec    1.00   1550.5±3.69µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    501.6±3.18µs        ? ?/sec    1.00    499.2±3.91µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.01    106.0±0.38µs        ? ?/sec    1.00    105.4±0.39µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.13     32.4±0.16ms        ? ?/sec    1.00     15.2±0.06ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.70      6.4±0.04ms        ? ?/sec    1.00      3.8±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.46      3.4±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.01    894.9±5.81µs        ? ?/sec    1.00    889.9±3.57µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.03    198.1±0.86µs        ? ?/sec    1.00    192.9±0.52µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.5±0.07ms        ? ?/sec    1.01     15.6±0.26ms        ? ?/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    871.5±3.47µs        ? ?/sec    1.00    858.3±3.74µ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.00     22.2±0.07ms        ? ?/sec    1.01     22.5±0.29ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.00      3.5±0.01ms        ? ?/sec    1.02      3.6±0.03ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.02   1719.6±7.07µs        ? ?/sec    1.00   1692.3±9.73µ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.11ms        ? ?/sec    1.06     12.8±0.43ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1392.7±5.97µs        ? ?/sec    1.05  1463.5±32.91µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    359.2±1.60µs        ? ?/sec    1.01    361.1±4.30µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.8±0.68µs        ? ?/sec    1.00    249.6±0.70µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.00     18.8±0.19ms        ? ?/sec    1.01     19.0±0.36ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.02      2.3±0.04ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    625.1±2.31µs        ? ?/sec    1.01    628.5±5.99µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.3±0.76µs        ? ?/sec    1.00    453.3±1.57µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-s8dlj0s2-749b0757-kqjj

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

uname:

Linux bench-c6423763218-3882-qsw6j 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.8 MiB
Avg memory 13.7 MiB
CPU user 278.7s
CPU sys 0.4s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 20.4 MiB
Avg memory 13.7 MiB
CPU user 281.0s
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"

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 (176af76) 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 (176af76) 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 (176af76) 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.61     22.1±0.15ms        ? ?/sec    1.00     13.7±0.07ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.42      4.1±0.02ms        ? ?/sec    1.00      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.32      2.1±0.01ms        ? ?/sec    1.00   1595.7±5.26µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.02    505.6±5.40µs        ? ?/sec    1.00    497.2±2.27µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.6±0.31µs        ? ?/sec    1.00    105.2±0.28µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.08     32.2±0.09ms        ? ?/sec    1.00     15.5±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.74      6.4±0.02ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.52      3.3±0.01ms        ? ?/sec    1.00      2.2±0.00ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.01    895.1±3.12µs        ? ?/sec    1.00    889.0±1.67µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.02    198.0±0.47µs        ? ?/sec    1.00    193.7±0.39µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.02     15.7±0.17ms        ? ?/sec    1.00     15.5±0.09ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.02      2.2±0.01ms        ? ?/sec    1.00      2.1±0.00ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.00    851.9±1.14µs        ? ?/sec    1.00    855.1±2.88µ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.00     22.3±0.14ms        ? ?/sec    1.01     22.4±0.13ms        ? ?/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   1686.0±4.82µs        ? ?/sec    1.01   1694.9±6.41µ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.02     12.5±0.17ms        ? ?/sec    1.00     12.2±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.02  1431.5±13.95µs        ? ?/sec    1.00   1399.1±6.67µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.01    360.8±1.84µs        ? ?/sec    1.00    357.5±1.16µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    249.4±0.47µs        ? ?/sec    1.00    248.2±0.33µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.03     19.2±0.20ms        ? ?/sec    1.00     18.7±0.10ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.02      2.4±0.02ms        ? ?/sec    1.00      2.3±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.01    629.8±2.63µs        ? ?/sec    1.00    622.4±2.69µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    453.1±1.04µs        ? ?/sec    1.00    452.4±0.69µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-s8dlj0s2-9d742a00-t68b

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

uname:

Linux bench-c6425778681-3889-sqj8x 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 23.8 MiB
Avg memory 13.8 MiB
CPU user 280.6s
CPU sys 0.4s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 23.3 MiB
Avg memory 13.8 MiB
CPU user 283.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 (176af76) 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.57     21.6±0.09ms        ? ?/sec    1.00     13.7±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.40      4.1±0.01ms        ? ?/sec    1.00      2.9±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.01           1.30      2.1±0.01ms        ? ?/sec    1.00   1589.7±3.68µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.01    501.3±2.05µs        ? ?/sec    1.00    497.8±3.44µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.01    105.8±0.26µs        ? ?/sec    1.00    105.2±0.34µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.04     31.8±0.16ms        ? ?/sec    1.00     15.6±0.04ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.74      6.4±0.04ms        ? ?/sec    1.00      3.7±0.01ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.01         1.50      3.3±0.01ms        ? ?/sec    1.00      2.2±0.00ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.1          1.00    891.4±1.29µs        ? ?/sec    1.00    890.1±2.13µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.02    198.3±0.61µs        ? ?/sec    1.00    193.7±0.57µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.00     15.5±0.07ms        ? ?/sec    1.01     15.6±0.14ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.01       1.01      2.2±0.02ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.1        1.05    885.3±2.99µs        ? ?/sec    1.00    845.8±2.36µ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.02     22.4±0.09ms        ? ?/sec    1.00     22.0±0.06ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.01     1.01      3.5±0.01ms        ? ?/sec    1.00      3.5±0.01ms        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.1      1.03   1731.0±6.76µs        ? ?/sec    1.00   1681.2±7.07µ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.09ms        ? ?/sec    1.01     12.2±0.09ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1398.2±7.91µs        ? ?/sec    1.01  1409.1±13.61µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    356.6±0.92µs        ? ?/sec    1.00    356.6±1.33µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.9±0.28µs        ? ?/sec    1.00    248.5±0.30µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.00     18.8±0.13ms        ? ?/sec    1.01     18.9±0.11ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.01           1.00      2.3±0.01ms        ? ?/sec    1.03      2.4±0.02ms        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.1            1.00    623.8±1.87µs        ? ?/sec    1.00    622.2±2.38µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    452.0±0.87µs        ? ?/sec    1.00    453.1±0.55µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-zknmidoc-9e5bd0bb-8jts

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

uname:

Linux bench-c6425779968-3890-fp96j 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 25.5 MiB
Avg memory 13.9 MiB
CPU user 279.7s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 26.8 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
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 176af76 to 9b48802 Compare October 26, 2026 20:42
@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 (9b48802) 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 (9b48802) 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.6±0.10ms        ? ?/sec    1.00     13.8±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.005          1.31      4.1±0.01ms        ? ?/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   1713.0±4.99µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.1            1.00    496.8±2.02µs        ? ?/sec    1.06    528.9±3.10µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0, selectivity: 0.8            1.00    105.8±0.39µs        ? ?/sec    1.02    107.6±0.39µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.001        2.08     31.8±0.11ms        ? ?/sec    1.00     15.3±0.05ms        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.005        1.65      6.3±0.03ms        ? ?/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    888.5±1.12µs        ? ?/sec    1.07    950.7±3.06µs        ? ?/sec
filter: single_boolean, 8192, nulls: 0.1, selectivity: 0.8          1.00    198.1±0.50µs        ? ?/sec    1.00    197.7±0.53µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0, selectivity: 0.001      1.01     15.6±0.13ms        ? ?/sec    1.00     15.4±0.04ms        ? ?/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.00    849.1±1.13µs        ? ?/sec    1.08    914.8±3.99µ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.00     22.2±0.06ms        ? ?/sec    1.00     22.3±0.04ms        ? ?/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   1683.9±7.74µs        ? ?/sec    1.04   1751.7±8.98µs        ? ?/sec
interleave: single_boolean, 8192, nulls: 0.1, selectivity: 0.8      1.00      3.0±0.01ms        ? ?/sec    1.02      3.1±0.01ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.001            1.00     12.1±0.08ms        ? ?/sec    1.01     12.2±0.13ms        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.01             1.00   1400.8±6.55µs        ? ?/sec    1.00   1396.4±5.07µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.1              1.00    357.1±0.92µs        ? ?/sec    1.00    355.9±1.25µs        ? ?/sec
take: single_boolean, 8192, nulls: 0, selectivity: 0.8              1.00    248.7±0.23µs        ? ?/sec    1.00    248.2±0.20µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.001          1.01     18.9±0.20ms        ? ?/sec    1.00     18.7±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    624.0±1.21µs        ? ?/sec    1.00    619.9±2.03µs        ? ?/sec
take: single_boolean, 8192, nulls: 0.1, selectivity: 0.8            1.00    451.2±0.44µs        ? ?/sec    1.00    452.0±0.40µs        ? ?/sec

Per-runner information
coalesce_kernels — shard 1/1

Node: gk3-benchmark-cluster-nap-1bd6zsy7-b5970f85-bs68

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

uname:

Linux bench-c6427067792-3898-8sbcp 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.9 MiB
Avg memory 13.7 MiB
CPU user 278.7s
CPU sys 0.3s
Peak spill 0 B

branch

Metric Value
Wall time 285.1s
Peak memory 21.9 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

@Rich-T-kid
Rich-T-kid requested a review from mbutrovich October 26, 2026 21:41
@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from 9b48802 to e22fa80 Compare October 26, 2026 21:44
@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 (e22fa80) 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

Let the Boolean coalescer append words produced by the existing compression kernel instead of maintaining a second copy of its packing loop. Support values and validity in one mask traversal, and cover shorter filters and exact word boundaries.
@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/coalescer-boolean-filter-words branch from e22fa80 to 4d091cd Compare October 26, 2026 21:45
@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 (4d091cd) 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

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

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-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