Skip to content

regression: bench_gc_pressure ~10 -> ~17 ms on main (node 13) — was a win, now a 1.3x loss #9391

Description

@proggeramlug

bench_gc_pressure regressed on main and is now above node. It was a win before.

Measurements (quiet host, repeated runs, min taken)

tree gc_pressure node
my branch based on 6bc775d9b9 (+ my 7 commits) 10 13
plain origin/main @ 9031e490dd (clean worktree, no local changes) 16–17 13
my branch rebased onto current main 17 13

Stable across five runs each (first run is cold: 46/24 then settling to 16–18). Same host, same harness, same fixture.

It is not my change, and that was tested rather than argued

My branch adds a GC-poll skip for the packed-f64 loop clone (#9379), which is exactly the kind of change that could starve a collector on a GC benchmark. Ablation: with the poll-skip disabled, gc_pressure still measures 17. And plain origin/main with none of my commits measures 16–17. So the cause is in main.

Bisect window

6bc775d9b9 refactor(codegen): split the ws dispatch rows out of net_events.rs (#9343)
  ..
757beace0f fix: symbol-filter isolation (#9383) + CONCAT_MEMO thread-local (#9390)

That is 27 commits. I have not bisected it — GC internals are not my lane, and whoever owns the recent GC/scanner work will recognise the culprit faster than a blind bisect finds it.

Why this matters beyond one row

A regression here is not just a slow row: gc_pressure is the workload that would catch a bad GC change, so a silent 1.3x here also degrades its value as a guard. And it poisons unrelated measurement — anyone benchmarking on main right now will attribute part of this to their own work, which is the same failure that cost a session most of a day earlier today (#9341/#9345).

Caveat on my own numbers, stated because it is exactly the trap I fell into an hour ago: the "10" row was measured on a branch whose base is now 27 commits old. Same harness and host, but not the same tree — so treat the 10 as "was clearly winning before this window" rather than as a precise before-value. The 16–17 on a clean origin/main worktree with no local changes is the number I would defend.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions