benchmarks: count simulated object store GET requests per query#23803
benchmarks: count simulated object store GET requests per query#23803adriangb wants to merge 2 commits into
Conversation
Registers a CountingObjectStore (stacked under the latency wrapper) that models S3 request counting: one GET per get_opts call, one GET per coalesced range for get_ranges. Also re-chunks streamed local-file GET bodies at 2MiB via ChunkedStore to approximate network transfer granularity. Each query iteration now reports its GET request and byte counts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MGnT9oETcFMydc9cp95HLG
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MGnT9oETcFMydc9cp95HLG
|
run benchmark tpch clickbench_partitioned |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing benchmarks-request-count (6709d58) to 5de7f1d (merge-base) diff using: tpch File an issue against this benchmark runner |
|
🤖 Benchmark running (GKE) | trigger CPU Details (lscpu)Comparing benchmarks-request-count (6709d58) to 5de7f1d (merge-base) diff using: clickbench_partitioned File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usagetpch — base (merge-base)
tpch — branch
File an issue against this benchmark runner |
|
🤖 Benchmark completed (GKE) | trigger Instance: CPU Details (lscpu)Details
Resource Usageclickbench_partitioned — base (merge-base)
clickbench_partitioned — branch
File an issue against this benchmark runner |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #23803 +/- ##
==========================================
- Coverage 80.71% 80.70% -0.01%
==========================================
Files 1089 1090 +1
Lines 368760 368976 +216
Branches 368760 368976 +216
==========================================
+ Hits 297647 297796 +149
- Misses 53372 53418 +46
- Partials 17741 17762 +21 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Which issue does this PR close?
None — standalone benchmarking improvement, split out of the bounded-streaming work (apache/arrow-rs#10410).
Rationale for this change
The benchmark harness can simulate object-store latency (
--simulate-latency) but gives no visibility into how many requests a query would issue against a real object store, which is the metric that determines both cost and latency amplification of any change to the parquet fetch path.What changes are included in this PR?
CountingObjectStore: registered under the (optional) latency wrapper for every dfbench run; models S3 request semantics: one GET perget_optscall, and one GET per coalesced range forget_ranges(1 MiB gap merge, followingobject_store::coalesce_ranges), plus requested-byte accounting.object_store::chunked::ChunkedStore(the raw local filesystem streams 8 KiB chunks, which both misrepresents network granularity and is pathologically slow for large streamed ranges).Query 20 iteration 0 took 587.4 ms and returned 110 rows (302 GET requests, 913097581 bytes)Caveat: per-query request counts for TopK queries (e.g. ClickBench Q23) are nondeterministic within a few requests because dynamic row-group pruning races the scan.
Are these changes tested?
Unit test for the coalescing model; exercised across ClickBench/TPC-H/TPC-DS runs.
Are there any user-facing changes?
Benchmark output lines gain request/byte counts. No engine changes.
🤖 Generated with Claude Code
https://claude.ai/code/session_01MGnT9oETcFMydc9cp95HLG