Repository navigation
Conversation
|
run benchmark arrow_writer |
|
🤖 Benchmark starting (GKE) | trigger Target: arrow_writer Sharding factor: 1 (1 workers). Comparing perf-byte-budget-precheck (3928536) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 1
Results will be posted when all workers finish. File an issue against this benchmark runner |
3928536 to
f17e631
Compare
|
run benchmark arrow_writer |
|
🤖 Benchmark starting (GKE) | trigger Target: arrow_writer Sharding factor: 1 (1 workers). Comparing perf-byte-budget-precheck (f17e631) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 1
Results will be posted when all workers finish. File an issue against this benchmark runner |
|
run benchmark arrow_writer |
|
🤖 Benchmark failed or incomplete (GKE) | trigger Target: arrow_writer Comparing perf-byte-budget-precheck (3928536) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 1
Errors / missing shardsPer-runner informationarrow_writer — shard 1/1Node: gk3-benchmark-cluster-nap-1fzug0kq-50073869-jzxw Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource UsageNo completed measurement resource samples. File an issue against this benchmark runner |
|
🤖 Benchmark starting (GKE) | trigger Target: arrow_writer Sharding factor: 4 (4 workers). Comparing perf-byte-budget-precheck (318bf4c) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 4
Results will be posted when all workers finish. File an issue against this benchmark runner |
|
🤖 Benchmark failed or incomplete (GKE) | trigger Target: arrow_writer Comparing perf-byte-budget-precheck (f17e631) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 1
Errors / missing shardsPer-runner informationarrow_writer — shard 1/1Node: gk3-benchmark-cluster-nap-6uf8krqf-51bf6dd9-z9n6 Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource UsageNo completed measurement resource samples. File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Target: arrow_writer Comparing perf-byte-budget-precheck (318bf4c) to 9ffd63d (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 4
Comparison results: View the complete native critcmp output. The comparison is published in an unlisted Gist because the original inline report exceeded GitHub's comment limit. Per-runner informationarrow_writer — shard 1/4Node: gk3-benchmark-cluster-nap-jeel64w1-66f44736-l628 Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 2/4Node: gk3-benchmark-cluster-nap-1fzug0kq-50073869-h5nx Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 3/4Node: gk3-benchmark-cluster-nap-6uf8krqf-51bf6dd9-z9n6 Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 4/4Node: gk3-benchmark-cluster-nap-1fzug0kq-c69560ca-b6ps Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
File an issue against this benchmark runner |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Raw ColumnWriter callers may pad a contiguous values slice with placeholder ByteArrays past the values their levels reference; sizing them panics. Restrict the lookahead window to gather indices, which always name real values, and keep counting the chunk's values first on the contiguous path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
193e106 to
bf51fa4
Compare
|
run benchmark arrow_writer shards: 4 |
|
🤖 Benchmark starting (GKE) | trigger Target: arrow_writer Sharding factor: 4 (4 workers). Comparing perf-byte-budget-precheck (bf51fa4) to b231cf1 (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 4
Results will be posted when all workers finish. File an issue against this benchmark runner |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
🤖 Benchmark completed (GKE) | trigger Target: arrow_writer Comparing perf-byte-budget-precheck (bf51fa4) to b231cf1 (merge-base) diff Run configurationrun benchmark arrow_writer
shards: 4
Comparison results: View the complete native critcmp output. The comparison is published in an unlisted Gist because the original inline report exceeded GitHub's comment limit. Per-runner informationarrow_writer — shard 1/4Node: gk3-benchmark-cluster-nap-17yz8u0s-c78dad10-hp78 Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 2/4Node: gk3-benchmark-cluster-nap-r5b1bsxo-0e1bca2a-sz8x Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 3/4Node: gk3-benchmark-cluster-nap-17yz8u0s-dc2beb66-4t8b Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
arrow_writer — shard 4/4Node: gk3-benchmark-cluster-nap-r5b1bsxo-7fe87dcb-5l4n Instance: c4a-highmem-16 (12 vCPU / 65 GiB) uname: BENCH_COMMAND: cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writerCPU Details (lscpu)Resource Usagebase (merge-base)
branch
File an issue against this benchmark runner |
Which issue does this PR close?
Rationale for this change
ByteBudgetChunker::byte_budget_sub_batchcallschunk_def.value_count(...)before it asks the encoder whether the chunk's values fit the page budget. For nullable columns (Materializeddef levels) that call is an O(chunk_size) scan, and it runs on every chunk of every nullable byte-array column, even chunks far below the page limit.What changes are included in this PR?
The chunker now asks the encoder first, about the next
chunk_sizevalues. That window always contains the chunk's values as a prefix, because a chunk holds at mostchunk_sizevalues.count_values_within_byte_budget[_gather]counts how many leading values fit, so its answer for the window also answers for the chunk:Nonewithout scanning def levels. This is the common case, and it costs O(1) for offset and view arrays, using the existing stage-1 bounds.k, the first value that overflows: only now runvalue_count. Ifk >= vals_in_chunkthe overflow is past this chunk, so the chunk fits. Otherwisekis the same answer the current code computes.The lookahead is used only on the gather path (
value_indices), which the arrow writer always uses, because every gather index names a real value. A contiguousvaluesslice from a rawColumnWritercaller may be padded with placeholderByteArrays past the values its levels reference, and those can't be sized. That path keeps counting the chunk's values first, as onmain.There are no new trait methods. An earlier revision of this PR added a byte-array-only
values_fit_within_byte_budget_gatherhook toColumnValueEncoder. This version reuses the existing count instead, and benchmarked the same.Are these changes tested?
New unit tests in
byte_budget_chunkercallpick_sub_batchdirectly, through both the contiguous and the gather entry points:Levelswindow as onmain;test_write_statistics_not_arrowintests/geospatial.rscaught this in CI).They pass on
mainas well, so they pin the behaviour tomain's. The second test fails if thek >= vals_in_chunkcheck is removed. The existing writer and page-size tests also pass.Benchmarks:
arrow_writer,/defaultprops, on a quiet GCE c3-standard-8. Each variant ran twice, interleaved, and the numbers below are the two runs:Every case except the sparse one is within noise.
perfonbyte_array_sparse_99pct_null:byte_budget_sub_batch(with the inlined def-level scan) drops from 10.2% to 0.6% of samples, andcount_values_within_byte_budget_gatherrises from 0.9% to 1.6%.Are there any user-facing changes?
No.
🤖 Generated with Claude Code