Skip to content

perf-timeline: test262.total is single-shot and poorly runner-normalized (~6% scatter swamps engine signal) #28

Description

@mparrett

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.

Evidence (the 22 backfilled points)

  • Mean-per-test CoV 6.4%, min-to-max spread 1.43×.
  • Passing set is essentially constant across the window: 40141–40194 (0.1%). So the perf-timeline: test262.total sum conflates per-test speed with pass-count (conformance inflates the trend) #26 composition confound is dormant here — the scatter is not pass-count.
  • 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

  1. 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.
  2. 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.

Proposed

  1. Quick, high-ROI: run the macro -count N (default 3) and reduce the total by 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.
  2. Deeper: stop normalizing this series against the ALU anchor. Either normalize against a representative mixed micro-benchmark, or make it self-relative to a fixed reference commit (the "fixed reference set", perf-timeline: test262.total sum conflates per-test speed with pass-count (conformance inflates the trend) #26 option 1) — the only path to a real per-test-speed signal.

Two smaller notes surfaced while backfilling

Refs: #26 #24 #23 #16

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions