Repository navigation
perf: unwrap range metrics answer below Loki and rate_counter answers Loki's value - #915
Conversation
🟢 Performance A/B: faster, no regression260 shape×range — 9 🟢 faster · 251 ⚪ same · results vs Loki: 239 same, 0 new difference(s), 21 pre-existing Loki profiles compared (like for like):
¹ re-measured with 7 runs, on windows the first pass did not use, after it moved beyond noise. 28504 characters omitted to fit the comment limit; every row is in the `summary-.json` files of the `perf-ab-smoke` artifactCold (first-run) timings — what a user opening a panel sees
† Loki's results cache answered this cold run (its own counters, or identical answers for windows a minute apart): not a computed time, so it is in no ratio. ¹ (Loki cold) the confirm pass's cold run was cache-served, so every cold column of the row is the first pass's. ↺ Loki cold taken from the first set that ran the same query; Loki's cache answered this one. 45 shape×range above 2× Loki already (listed, or as slow on the base build)
Why these shapes
base 🧭 New baseline candidateThis pull request got the baseline run. Every shape of every set was measured at the smoke's ranges (1h, 4 runs). Nothing was committed. The
The committed column is the newest daily run (7 runs, ranges up to 24h): the direction is comparable, the rows are not the same ones. Above-2× list: 210 rows after this run, 45 added, 0 not above 2× in this run's profile (the daily run's two-run rule decides for the committed list). A profile that did not run leaves its committed rows as they are. Added:
13 min. |
e72c31b to
b37c3ef
Compare
PR Quality ReportCompared against base branch Coverage and tests
Compatibility
Performance smokeLower CPU cost (
State
|
ce9749b to
6c1e855
Compare
✅ Visual smoke: passed with warningsBase
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 that query to answer like Loki at a shorter range; otherwise label the pull request Montages (base | PR | Loki): artifact. They are not on the repository for this run. 🧭 New baseline candidateThis pull request got the baseline run: every page of |
…rts after the rebase
0a33660 to
0920d0d
Compare
Verification on
|
| Proof | Result |
|---|---|
| Unit tests | Passed |
| Conformance gate | Passed; regenerated performance evidence and gap reports are current |
| VictoriaLogs v1.49.0–v1.53.0 matrix | All five versions passed, including the previously failing v1.52.0 recorder case |
| Visual smoke | Passed; 44-minute full baseline capture, montage and comparison artifact |
| Race-stress gate | Passed; all four shards passed. Shard 3 completed in 11m 2s with its 12m timeout |
| Performance quality report | Passed |
Local checks also passed: python3 -m unittest discover -s bench/visual/tests (148 tests), python3 -m unittest discover -s bench/ab/tests (362 tests), python3 scripts/ci/check_conformance.py, actionlint .github/workflows/ci.yaml, and the exact 674-test race shard 3 under -race (313s). The earlier hosted throughput failure was not reproducible: two unchanged-code reruns passed at +13.8% and -3.8% versus base.
Summary
Unwrap range metrics answer below Loki on most shapes, and
rate_counterundersumanswers Loki's value at every range. Builds on #885 and #886 (merged).-query-range-extent-cache.sum withoutovercount_over_timeandbytes_over_timebucket by bucket. Supersedes the unmergedperf/sliding-without.sum(rate_counter(... | logfmt | unwrap ...))answers Loki's zeros. Loki rates each one-sample parsed series as 0, and VictoriaLogs proves from stats that every series holds one sample, with no rows read. It used to answer a different value at 1h and 502 at 6h and above.Results (loki-defaults profile, 1h/6h, refresh on; PR÷Loki, base÷Loki)
Tiers (cold / warm / refresh):
0 regressions against base, 0 new differences from Loki, 0 restarts.
At 24h, cold: E2 1.0 s vs Loki 3.0 s, U9 354 ms vs 2.3 s.
Open before ready
Rebased onto main after fix: label_replace adds its label to instant answers and to post-aggregated series, like Loki #744. The ranked-topk route from fix: label_replace adds its label to instant answers and to post-aggregated series, like Loki #744 and settled steps meet in
proxyManualRangeMetricRange. Two items are still open after the rebase:gocycloonproxyManualRangeMetricRange(31 > 30);TestRankedTopKRangeFallsBackToTheWindowRecurrencefails.Still above 2× Loki:
An investigation is checking whether the ~14 ms extra per stream-filtered VictoriaLogs search is real or a host↔VM measurement artifact.
Refreshes that move both bounds off the step grid need
-align-queries-with-step, default on (separate PR).Settled steps and the folded-step cache (N14) would keep the same answer twice. One has to own those queries before N14 lands.
e2e not yet run on a stack:
TestCompat_UnwrapRateCounterOneSampleSeriesandTestCompat_UnwrapConversionErrorFirstWindowHeavyRead. The fleet proof for settled steps passed (35 tests) on the earlier head.fixed_by: TBD-PRin the new registry rows.