You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Extends #26.#26 fixed the metric (sum → mean per test), which killed the pass-count inflation. Now that the test262.total series is dense (22 points), the remaining run-to-run scatter is visible — and it's dominated by measurement noise, not engine change. Two distinct causes, one quick fix and one deeper.
Anchor-normalized ratio CoV 6.3% — normalization removes almost none of the variance.
corr(ratio, anchor) = −0.56. If the anchor cancelled runner effects, ratio would be independent of it. The anti-correlation means the anchor is injecting noise, not removing it.
The anchor itself swings 1.41× across runs (0.997–1.41 ns), ~13% even on the same CPU model (EPYC 7763).
Root causes
Single-shot. The macro runs the suite once (count=1); the total is one summed-ns measurement with no min/median reduction — unlike the micro benches, which get b.N + -count. One-directional runner noise (GC, CPU migration, co-tenancy) lands directly on the point.
Anchor mismatch.BenchmarkRatchetAnchor is a pure-ALU loop; test262 is parse + VM + GC + allocation. They don't co-vary under runner conditions, so the ratio doesn't cancel — the "anchor drifts vs the mixed/memory workload" caveat already noted in docs/perf/index.html, but biting within measurement noise here, not just across CPU tiers.
The page's modal-CPU filter keys off snapshot.machine.cpu_model — the micro run's CPU. Backfilled test262.total points were measured on a different (later) runner, so the filter doesn't correctly apply to this series.
Extends #26. #26 fixed the metric (sum → mean per test), which killed the pass-count inflation. Now that the
test262.totalseries is dense (22 points), the remaining run-to-run scatter is visible — and it's dominated by measurement noise, not engine change. Two distinct causes, one quick fix and one deeper.Evidence (the 22 backfilled points)
Root causes
count=1); thetotalis one summed-ns measurement with no min/median reduction — unlike the micro benches, which getb.N+-count. One-directional runner noise (GC, CPU migration, co-tenancy) lands directly on the point.BenchmarkRatchetAnchoris a pure-ALU loop; test262 is parse + VM + GC + allocation. They don't co-vary under runner conditions, so the ratio doesn't cancel — the "anchor drifts vs the mixed/memory workload" caveat already noted indocs/perf/index.html, but biting within measurement noise here, not just across CPU tiers.Proposed
-count N(default 3) and reduce thetotalby min (least-contaminated run), matching the reducer rationale from perf(bench-ratchet): scope the -count reducer — min for the informational A/B, mean for the ratchet #22. Draft below. ~N× the macro wall-time per point.Two smaller notes surfaced while backfilling
snapshot.machine.cpu_model— the micro run's CPU. Backfilledtest262.totalpoints were measured on a different (later) runner, so the filter doesn't correctly apply to this series.set_hashis soft-absent until bench-test262: fingerprint the contributing test set so test262.total is comparable #24's tooling reachesorigin/main; attach it + segment the line across set changes (Epic: perf benchmarking infrastructure (tracker) #23) when it lands.Refs: #26 #24 #23 #16