Repository navigation
Remove usages of null_as_false - #10124
Conversation
Merging this PR will improve performance by 14.72%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ⚡ | WallTime | bitpack_blocked_compress_avx2 |
7.7 µs | 6.7 µs | +14.72% |
Tip
Curious why performance improved? Comment @codspeedbot explain why performance improved on this PR, or directly use the CodSpeed MCP with your agent.
Comparing myrrc/to-mask-kernel (ad62289) with develop (46d518b)
Footnotes
-
476 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
-
1 benchmark was run, but is now archived. If it was deleted in another branch, consider rebasing to remove it from the report. Instead if it was added back, click here to restore it. ↩
|
I have a pr that gives us 15-20% on the execute loop. Can’t link it now on plane WiFi but if you search open prs it should be easy to spot
…On Tue, 29 Sep 2026, at 07:04, Mikhail Kot wrote:
***@***.**** commented on this pull request.
In vortex-layout/src/layouts/zoned/zone_map.rs <#10124 (comment)>:
> +/// This is equivalent to fill_null(false)?.execute::<Mask>(ctx).
+/// However, prune work is very fast, and fill_null + optimize calls
+/// dominate the runtime.
I agree, it's very inefficient, hence it's a draft
—
Reply to this email directly, view it on GitHub <#10124?email_source=notifications&email_token=AAD5AVEMQ3DYM2BFTO74GED5ROJKPA5CNFSNUABKM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UKJSXM2LFO4XTKMZVGE2TGMJUGI3KM4TFMFZW63VHMNXW23LFNZ2KKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#discussion_r4132663839>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAD5AVAJYMMQMJSVZRFJQ5T5ROJKPAVCNFSNUABFKJSXA33TNF2G64TZHM3TMNBQGIYDSNRZHNEXG43VMU5TKNRSHAZTINJZGAZ2C5QC>.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS <https://github.com/notifications/mobile/ios/AAD5AVAHI4INGCROJCEFFRT5ROJKPA5CNFSNUABKM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UKJSXM2LFO4XTKMZVGE2TGMJUGI3KM4TFMFZW63VHMNXW23LFNZ2KKZLWMVXHJKTGN5XXIZLSL5UW64Y> and Android <https://github.com/notifications/mobile/android/AAD5AVA7EYMR6HT3VBNE5UD5ROJKPA5CNFSNUABKM5UWIORPF5TWS5BNNB2WEL2QOVWGYUTFOF2WK43UKJSXM2LFO4XTKMZVGE2TGMJUGI3KM4TFMFZW63VHMNXW23LFNZ2KKZLWMVXHJLTGN5XXIZLSL5QW4ZDSN5UWI>. Download it today!
You are receiving this because you commented.Message ID: ***@***.***>
|
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
Signed-off-by: Mikhail Kot <mikhail@spiraldb.com>
8368aab to
2b81987
Compare
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals Profiling 📖Commits: PR datafusion / vortex-file-compressed / ns (0.999x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: String Encoding 📖Commits: PR vortex / vortex-file-compressed / ms (1.001x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / % (1.000x ➖, 0↑ 0↓)
|
Benchmarks: FineWeb NVMe 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.001x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.077x ➖, 0↑ 2↓)
datafusion / parquet / ns (1.005x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.041x ➖, 1↑ 2↓)
duckdb / vortex-compact / ns (0.986x ➖, 1↑ 1↓)
duckdb / parquet / ns (1.003x ➖, 0↑ 1↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.997x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.000x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.997x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.001x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.997x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.997x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench Sorted on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.999x ➖, 1↑ 1↓)
datafusion / vortex-compact / ns (1.013x ➖, 1↑ 0↓)
datafusion / parquet / ns (1.011x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.062x ➖, 0↑ 3↓)
duckdb / vortex-compact / ns (0.979x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.048x ➖, 0↑ 3↓)
File Size Changes (200 files changed, +0.0% overall, 103↑ 97↓)
Totals:
|
Benchmarks: FineWeb S3 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.011x ➖, 0↑ 2↓)
datafusion / vortex-compact / ns (1.055x ➖, 0↑ 1↓)
datafusion / parquet / ns (1.014x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed / ns (0.920x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.926x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.847x ➖, 0↑ 0↓)
|
Benchmarks: Appian on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-compact / ns (0.998x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.000x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.003x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.998x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.006x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.003x ➖, 0↑ 1↓)
datafusion / parquet / ns (1.001x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.995x ➖, 1↑ 1↓)
duckdb / vortex-compact / ns (1.015x ➖, 0↑ 3↓)
duckdb / parquet / ns (0.997x ➖, 0↑ 1↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.006x ➖, 0↑ 1↓)
datafusion / vortex-compact / ns (1.002x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.001x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.001x ➖, 0↑ 1↓)
duckdb / vortex-compact / ns (1.005x ➖, 1↑ 1↓)
duckdb / parquet / ns (0.993x ➖, 5↑ 1↓)
No file size changes detected. |
Benchmarks: TPC-H SF=10 on NVME 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.999x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.005x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.003x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.006x ➖, 0↑ 1↓)
duckdb / vortex-compact / ns (0.999x ➖, 0↑ 1↓)
duckdb / parquet / ns (0.994x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Statistical and Population Genetics 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.009x ➖, 0↑ 0↓)
datafusion / vortex-compact / ns (1.002x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.015x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.005x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.990x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on S3 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.911x ➖, 1↑ 0↓)
datafusion / vortex-compact / ns (0.997x ➖, 0↑ 2↓)
datafusion / parquet / ns (0.821x ➖, 6↑ 0↓)
duckdb / vortex-file-compressed / ns (0.987x ➖, 0↑ 1↓)
duckdb / vortex-compact / ns (1.061x ➖, 1↑ 2↓)
duckdb / parquet / ns (0.932x ➖, 0↑ 0↓)
|
Benchmarks: TPC-H SF=10 on S3 📖Commits: PR How to read Verdict and Engines
datafusion / vortex-compact / ns (0.961x ➖, 2↑ 0↓)
datafusion / parquet / ns (0.869x ➖, 4↑ 1↓)
duckdb / vortex-compact / ns (1.003x ➖, 1↑ 0↓)
duckdb / parquet / ns (0.826x ➖, 2↑ 0↓)
|
Benchmarks: Random Access 📖Commits: PR How to read Verdict and Engines
vortex / arrow-ipc / ns (0.991x ➖, 1↑ 1↓)
random-access / vortex-file-compressed / ns (1.018x ➖, 0↑ 0↓)
random-access / parquet / ns (0.975x ➖, 1↑ 0↓)
random-access / lance / ns (1.001x ➖, 0↑ 0↓)
|
Benchmarks: Random Access (S3) 📖Commits: PR How to read Verdict and Engines
random-access / vortex-file-compressed / ns (1.100x ➖, 0↑ 4↓)
random-access / parquet / ns (0.988x ➖, 0↑ 0↓)
random-access / lance / ns (0.869x ➖, 2↑ 0↓)
|
Benchmarks: Compression 📖Commits: PR vortex / vortex-file-compressed / ns (0.981x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / bytes (1.000x ➖, 0↑ 0↓)
vortex / vortex-file-compressed / ratio (0.984x ➖, 0↑ 0↓)
vortex / parquet / ns (1.006x ➖, 0↑ 0↓)
vortex / parquet / bytes (1.000x ➖, 0↑ 0↓)
vortex / arrow-ipc / ns (0.992x ➖, 0↑ 0↓)
vortex / arrow-ipc / bytes (1.000x ➖, 0↑ 0↓)
|
Depends on #9932.
We have lazy ScalarFn::validity() now, so fill_null is also lazy. Thus there's
no need in special null_as_false. Deprecate it and replace all usages with
fill_null(false) except for zone map pruning. Pruning work is very fast, so
just constructing FillNull node and then canonicalizing is slower than
canonicalizing and intersecting the bitbuffer.
So pruning keeps the current implementation which is now private.