Repository navigation
ci: the daily performance run reports regressions, improvements and a ratchet - #798
Merged
Merged
Conversation
… ratchet The daily run only recorded numbers, so a result that started differing from Loki or a query that started failing waited for someone to read the trend. `history.py alerts` compares each set's newest history line with the previous valid one and reports transitions, not the state many rows are already in: - regression: result same -> differs; status 200 -> an error Loki does not give; warm p50 slower beyond the 25% / 50 ms noise rule that held for two runs (both worse than the run before them, range starting at that run) or that the same run's verdict against the release also calls slower - improvement: the reverse of the first two, or faster beyond the noise rule - every alert names its commit range A new history column, loki_cold_computed, records from Loki's cache counters whether Loki computed its cold run (true), its results cache answered it (false) or nothing is known (null, on every older line, which carry their own cols). bench/ab/history/ratchet.json lists rows with the same result as Loki, status 200 and a cold run no slower than a computed Loki cold run; the run only adds to it, rows leave by hand, and a ratcheted row that differs or fails, or is slower than Loki's computed cold in two runs in a row, is a loss. daily.py writes alerts.md and alerts.json next to the run's files (not committed: they describe one run), only for the sets it just wrote. The workflow puts them at the top of the daily pull request and in the job summary, and a final step fails the job on a regression or a ratchet loss. The pull request validation shows them and does not fail on them.
szibis
force-pushed
the
ci/perf-daily-skip-unchanged
branch
from
October 21, 2026 17:58
3a3ab7d to
a6312cd
Compare
szibis
force-pushed
the
ci/perf-daily-alerts
branch
from
October 21, 2026 17:59
d0c6315 to
e1f5faa
Compare
szibis
added a commit
that referenced
this pull request
Oct 21, 2026
…796) * ci: skip the daily performance run when nothing it measures changed * ci: the daily performance run reports regressions, improvements and a ratchet (#798) The daily run only recorded numbers, so a result that started differing from Loki or a query that started failing waited for someone to read the trend. `history.py alerts` compares each set's newest history line with the previous valid one and reports transitions, not the state many rows are already in: - regression: result same -> differs; status 200 -> an error Loki does not give; warm p50 slower beyond the 25% / 50 ms noise rule that held for two runs (both worse than the run before them, range starting at that run) or that the same run's verdict against the release also calls slower - improvement: the reverse of the first two, or faster beyond the noise rule - every alert names its commit range A new history column, loki_cold_computed, records from Loki's cache counters whether Loki computed its cold run (true), its results cache answered it (false) or nothing is known (null, on every older line, which carry their own cols). bench/ab/history/ratchet.json lists rows with the same result as Loki, status 200 and a cold run no slower than a computed Loki cold run; the run only adds to it, rows leave by hand, and a ratcheted row that differs or fails, or is slower than Loki's computed cold in two runs in a row, is a loss. daily.py writes alerts.md and alerts.json next to the run's files (not committed: they describe one run), only for the sets it just wrote. The workflow puts them at the top of the daily pull request and in the job summary, and a final step fails the job on a regression or a ratchet loss. The pull request validation shows them and does not fail on them. Co-authored-by: szibis <szibis@users.noreply.github.com> --------- Co-authored-by: szibis <szibis@users.noreply.github.com>
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Stacked on #796 (daily-PR skip). Merge #796 first; this PR then retargets to
main.The daily performance run now reports what changed since the previous run, and turns red on a regression:
Each alert names the commit range to bisect. The alerts go at the top of the daily PR body and into the job summary. A final step fails the run when there are regressions or ratchet losses, so GitHub notifies the maintainer. No issues are opened and no labels are added.
Changes
bench/ab/history.py:loki_cold_computedhistory column, derived fromcold_cache_servedand Loki's cache counters, so old lines read as unknown;alertssubcommand (pure functionalerts()), plusratchet.json(add-only, sorted).verdictvs the release isslower;bench/ab/daily.py: computes alerts after history is appended, updatesratchet.json, and writesalerts.mdandalerts.jsonunder--out.perf-daily.yaml:Fail on regressionsstep runs after the PR and arm-auto-merge steps, with values passed through the environment;alerts.mdis uploaded with the run artifacts.bench/ab/README.mdand a CHANGELOG entry under CI.Proofs
bench/ab/tests: 124 pass, including 24 alert tests. They cover each regression, improvement and ratchet rule, the two-run requirements, the cache-served and unknown Loki colds that never ratchet, old lines without the new column, the commit ranges, stable markdown, and the CLI writing its files.scripts/ci/tests: 77 pass, including the pinned-uses test.alertsreports no regressions and no improvements. The ratchet starts empty, because committed lines lack the new column; it fills from the first daily run after merge.trend.md,performance.md,gaps.md: regenerate with no diff.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.