Skip to content

ci(full-suite): run the performance gate at release checkpoints - #231

Merged
jsam merged 3 commits into
mainfrom
fm/il-perf-ci
Oct 4, 2026
Merged

jsam merged 3 commits into
mainfrom
fm/il-perf-ci

Conversation

@jsam

@jsam jsam commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Runs the performance gate at release checkpoints, in the full-suite workflow only. Per-PR CI is unchanged. Tracks #198.

What

  • New job Performance gate in .github/workflows/full-suite.yml, on blacksmith-32vcpu-ubuntu-2404 (the other jobs use 4 vCPU). It compares the approved baseline against the checkpoint commit. Both are built --release --all-features and measured interleaved on one runner. The baseline server is cached per commit and toolchain.
  • scripts/perf-gate-ci.sh pins the servers to CPUs 2-31, leaving 0-1 for the gate's clients. It runs 20 rounds and, on INCONCLUSIVE, retries once with 30. FAIL or INVALID fails the checkpoint. If the retry is still INCONCLUSIVE, the job passes with a warning annotation, and the summary says plainly that this is not a PASS.
  • The governor step sets performance and turns boost off where exposed. On these VMs neither is exposed, so the report records governor unknown.
  • Each attempt's report goes in the job summary. The perf-gate-runs artifact holds run.json (raw samples), report.md and verdict.json for 30 days.
  • New dispatch inputs: perf_gate_only runs only the gate, on any ref. perf_gate_aa measures the baseline against itself.
  • Docs: perf-gate/README.md (new section "At release checkpoints (CI)") and CONTRIBUTING (CI section).

Validation (workflow_dispatch on this branch)

Run Verdict Job time
37193306324: baseline e732cd5 vs this branch attempt 1 (20 rounds) INCONCLUSIVE, attempt 2 (30 rounds) FAIL 46.7 min
37195908133: A/A of the baseline INCONCLUSIVE after both attempts (7 required metrics straddle) 52.1 min

Builds take about 3 minutes in total. 20 rounds take about 17.5 minutes, and 30 rounds about 26.

The FAIL is cheap_query.latency_us.p50: ratio 1.110, interval 1.065..1.196, about 0.115 → 0.126 ms. It is consistent with the sign-off on the dev host (1.048), and the 30-round A/A passed this same metric on this runner. That makes it a plausible real regression of about 10 µs on cheap queries since e732cd5, and it needs investigation before the next checkpoint. Everything else either passes or improved by a large margin: durable inserts got 50x+ faster, and the delta paths and first deltas are faster too.

#198

This cannot close yet. The runner is quieter than the dev host, but the A/A run is still INCONCLUSIVE at 30 rounds. The noisy metrics include insert_single.ack_us.p50 (spread up to 325%), insert_batch.ack_us.p50 and the delta_single delta percentiles. Getting a PASS every time needs a quieter runner, such as bare metal or self-hosted, or a calibrated budget or round decision.

jsam added 3 commits October 4, 2026 09:47
The gate never reaches PASS on the shared dev host (#198). Run it in the
full-suite workflow on a dedicated 32-vCPU runner: approved baseline vs
this commit, release builds, interleaved on one runner, 20 rounds with
one 30-round retry on INCONCLUSIVE. Only PASS passes. A perf_gate_only
dispatch input runs the gate alone on any ref.
A/A on the 32-vCPU runner stays INCONCLUSIVE at 30 rounds on 7 required
metrics, so failing on INCONCLUSIVE would block every release on runner
noise. FAIL and INVALID still fail the checkpoint.
@jsam
jsam marked this pull request as ready for review October 4, 2026 11:30
@jsam
jsam merged commit ea9d5d3 into main Oct 4, 2026
18 checks passed
@jsam
jsam deleted the fm/il-perf-ci branch October 4, 2026 11:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant