Repository navigation
ci: daily performance alerts ignore Loki failures, compare only full measurements, and stay within limits - #800
Conversation
A review of the first alerts found cases that would have turned the daily run red for the wrong reasons or broken it. - Loki times out on a few shapes at 6h and 24h and report.py then calls the result "differs". A result is now compared (transition or ratchet loss) only when Loki answered 200; those rows are listed apart as "Loki failed", for information only. - Only full measurements (7 runs, every range up to 24h) are compared or used as a baseline, each row against the newest earlier full line that has it, and only for sets in shapes.json. The scheduled full run replaces a cut-down line of the same day instead of being skipped. - A ratchet loss starts its commit range at the newest line the row was still as good as Loki (or the commit it entered at). A release-verdict slowdown is not repeated while the p50 jitters on consecutive slower days. An error Loki also gives is neither a regression nor, when the proxy now answers 200 while Loki still errors, an improvement; a status that disappears is a regression. - The pull request body lists the first 50 alerts and counts the rest (a body is limited to 65,536 characters); the job summary and the artifact hold all of them. The Fail on regressions step runs unless the job was cancelled, and annotates ten alerts. - An unreadable ratchet.json is reported and left untouched, entries without their keys are skipped, rows not measured by the run are counted, and a failure of the alerts is logged without stopping the day. - The daily run carries an open daily pull request's history lines but not its ratchet.json, so a row removed by hand on main stays removed. Tests cover the exemptions for an error Loki gives too (each fails when the exemption is removed), the Loki-failure and cut-down-run cases, the ranges of repeated losses, the cap and the unreadable ratchet file.
⚪ Performance A/B: no change beyond noise8 shape×range — 8 ⚪ same · results vs Loki: 7 same, 0 new difference(s), 1 pre-existing Every shape is within noise of the base build (±30% and 100 ms). 8 unchanged shape×range (within noise)
Cold (first-run) timings — what a user opening a panel sees
Why these shapes
base |
✅ Visual smoke: passedBase
Gate: a base-vs-PR data difference passes when the PR is closer to Loki, and fails when the PR diverges from Loki or Loki cannot decide it (at a range Loki does not hold, a difference passes when the same page proved it closer to Loki at a shorter range; otherwise label the pull request Core set montages (5): base | PR | Lokidd-fields-1h dd-landing-1h dd-service-logs-1h explore-logs-plain-1h explore-metric-plain-1h All montages of this run: |
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokePerformance smoke was skipped for this PR because no perf-sensitive paths changed. State
|





Summary
Follow-up to the daily regression alerts (#796/#798), from a fresh review. Without it, the first daily run could turn red on a Loki timeout: Loki times out at 180 s on two
unwrap-sum-withoutrows today, and that showed up as a proxy regression and a ratchet loss.Changes (
bench/ab/history.py,bench/ab/daily.py,.github/workflows/perf-daily.yaml, README, CHANGELOG)Fail on regressionsruns unless the run is cancelled, so it still reports if the PR step fails.ratchet.json: a malformed file disables the ratchet for the run instead of crashing, and invalid entries are skipped. The alerts step can't stop the day's history and evidence from being delivered.*.jsonl, so rows you remove by hand fromratchet.jsononmainstay removed.Smaller fixes:
shapes.json.Proofs
bench/ab/tests: 142 pass (was 124); 19 new alert tests. Mutations that now fail tests:fails_like_lokialways false;alertsgives 0 regressions, 0 improvements, 0 ratchet losses, and 2 informational Loki-failed rows.trend.md,performance.md,gaps.md: regenerate with no diff.scripts/ci/tests: 77 pass.Not applicable: no proxy code changes, so e2e vs Loki, the Grafana range matrix, visual proof, A/B, benchstat and the load test do not apply.