benchmarks: guard the interactive runtime's read paths - #38676
Conversation
684fa8b to
5ab0559
Compare
b0d9bcb to
22beaf6
Compare
QA LLM Review1. HIGH -- feature-benchmark scenarios never run on a two-runtime replica
The four new scenarios run on a replica that can never have an interactive runtime, so they measure a single-runtime clusterd on both sides of the nightly comparison and give no signal for the feature they exist to guard. The module docstring and the PR body both assert the opposite, so a green result here will be read as evidence the interactive read paths did not regress. Details
The container is built by Note the parallel-benchmark half of the PR is unaffected: Fix — configure the second runtime on the container, since environmentd is not in a position to: def create_clusterd_service(
clusterd_image: str | None,
default_size: int,
additional_system_parameter_defaults: dict[str, str] | None,
) -> Clusterd:
- return Clusterd(image=clusterd_image)
+ # Benchmark queries run on `cluster_default`, an unmanaged replica backed by
+ # this container. environmentd never provisions it, so
+ # `enable_compute_interactive_runtime` never reaches it and the runtime has
+ # to be configured here. An older image ignores the unknown env var and
+ # stays single-runtime, which is the intended this-vs-other comparison.
+ return Clusterd(image=clusterd_image, interactive_compute=True)
2. MEDIUM --
|
22beaf6 to
7d7df7c
Compare
|
Both confirmed and fixed in 7d7df7c.
Posted by Claude Code. |
7d7df7c to
9d7eb75
Compare
QA LLM Review1. MEDIUM --
|
9d7eb75 to
3bdd8ab
Compare
3bdd8ab to
8394f09
Compare
8394f09 to
9f994e3
Compare
QA LLM Review1. MEDIUM --
|
|
Both remaining review items confirmed and fixed in 18ac9dc.
Posted by Claude Code. |
18ac9dc to
789172c
Compare
789172c to
a444110
Compare
a444110 to
7ae0458
Compare
Feature-benchmark scenarios for the four read shapes the interactive runtime changes: a peek dataflow joining two indexes, a fast-path point lookup, `CREATE INDEX` plus the first read that uses it, and a per-replica introspection read. The benchmark's replica is an unmanaged one backed by the composition's clusterd container, which the system parameter never reaches, so the container is configured with the second runtime directly. An image without the option ignores it, so the scenarios run against a two-runtime replica on this build and against whatever the other build's image provides, which is the comparison the nightly should report. Parallel-benchmark scenarios for what the second runtime is meant to buy: the temporary-dataflow floor on a quiet replica, introspection latency under hydration, and how far expensive peek walks hold back a written index's frontier, measured as the latency of a strict serializable read after a write. The two existing isolation scenarios now report regressions on their measured loops, with looser thresholds for contended tails. A sqllogictest pins the flag on a two-worker replica and covers same-key duplicate indexes across drops, error results on the fast path and through a peek dataflow, strict serializable reads over shared arrangements, and cluster re-provisioning. The clusterd-test-driver two-runtime workflow also runs with two workers, so the registry's worker pairing is exercised. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VDm7opomJLxbNUEP3r9BLk
`PointLookup` and `CreateIndexPublish` rendered the same testdrive as `FastPathFilterIndex` and `CreateIndex` at the same scale, and since the container runs two runtimes for the whole composition, the originals already measure those shapes. Two report rows for one regression read as two signals. `REGRESSION_THRESHOLDS["p99"]` is `None`, so listing `p99` under `CONTENDED_THRESHOLDS` did not loosen a gate, it created one on the noisiest loops in the suite. Removed, so p99 stays reported and ungated like everywhere else. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VDm7opomJLxbNUEP3r9BLk
7ae0458 to
69afac9
Compare
Stacks on #38393. Tracked by CPU-216.
Benchmarks and regression tests for the read paths the interactive runtime changes, so a regression in them shows up in the nightly comparison against the previous build rather than in production.
Feature benchmark.
scenarios/interactive_runtime.pyadds two shapes the main scenario set lacks: a peek dataflow joining two indexes (the temporary-dataflow floor) and a per-replica introspection read served from the maintenance runtime's published logging index. The point lookup andCREATE INDEXplus first read are alreadyFastPathFilterIndexandCreateIndex. The benchmark's replica is an unmanaged one backed by the composition's clusterd container, whichenable_compute_interactive_runtimenever reaches, so the container is configured with the second runtime directly. An image without the option ignores the variable, so every scenario runs against a two-runtime replica on this build and against whatever the other build's image provides, with no flag pinning and no version gate. The nightly's this-vs-other comparison is the regression signal, and the first build carrying the runtime shows the on-vs-off delta there.Parallel benchmark. Three scenarios for what the second runtime is meant to buy.
TemporaryDataflowFlooris a closed loop of a join over two small indexed tables on a quiet replica, so the reported latency is the dataflow's fixed cost.IntrospectionUnderHydrationreadsmz_dataflow_arrangement_sizesat a fixed rate on the replica that hydration churn saturates.FreshnessUnderPeekWalksalternates a write and a strict serializable read on one connection while full index walks run on the same replica, so the read's latency is how far the walks hold the written index's frontier back. The two existing isolation scenarios now report regressions on their measured loops, withCONTENDED_THRESHOLDSlooser than the defaults on the stats the suite gates, including the closed-loopqpsthat is the mean latency inverted. p99 stays reported and ungated, as everywhere else.Regression tests.
interactive_runtime.sltpins the flag on a two-worker replica and covers same-key duplicate indexes across drops, error results on the fast path and through a peek dataflow, strict serializable reads over shared arrangements, and cluster re-provisioning. The clusterd-test-driver two-runtime workflow runs its specs with one and two workers, so the registry's per-worker pairing is exercised rather than assumed.Not covered here, because the frameworks cannot express them: a resource benchmark for the idle cost of the second runtime (RSS and CPU with many indexes and no reads), an assertion that a query ran on the interactive runtime (blocked on CPU-222), and cancellation of a parked shared peek.
🤖 Generated with Claude Code
https://claude.ai/code/session_01VDm7opomJLxbNUEP3r9BLk