Skip to content

test(gc): re-pin ratchet after accepted collector shifts - #7921

Merged
proggeramlug merged 2 commits into
mainfrom
fix/7843-gc-ratchet
Aug 12, 2026
Merged

test(gc): re-pin ratchet after accepted collector shifts#7921
proggeramlug merged 2 commits into
mainfrom
fix/7843-gc-ratchet

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Closes #7843

What changed

  • Re-pin the internal Perry-vs-Perry GC ratchet on the quiet M1 mini at measured source commit 98e9ecdb5 (perry 0.5.1484).
  • Record the full benchmark suite and the exact compiler/runtime/stdlib hashes in the generated artifact.
  • Explain the accepted shifts in the artifact notes instead of weakening tolerances or removing gating rows.

The artifact was measured before rebasing this artifact-only branch over #7907/#7912, so its recorded commit and code-tree provenance remain the exact tree that produced the numbers.

Reproduction and acceptance rationale

The old a1fd5a7e8 pin fails on frozen main in two independent seven-repeat runs with byte-identical shared-CI counters:

  • 03_cross_gen_writes: two additional copied objects, copied_bytes 590,688 -> 656,256 (+65,568), while retained heap and RSS both fall.
  • 14_grow_then_churn: 19 minors / 20 steps, 13,013 copied objects, 403,514 promoted objects, and 151,713,056 promoted bytes in both runs. heapUsed falls 91.4%; pinned-host RSS rises about 4x.

These are consequences of already reviewed and merged collector changes, not measurement noise:

No tolerance or probe definition changes. The new artifact passes both gate profiles against the fresh measurement.

Validation

  • PYTHONPATH="$PWD" python3 tests/test_gc_ratchet.py — 91 passed
  • gc_ratchet.py validate — passed
  • gc_ratchet.py check --profile shared_ci — passed against the new pin
  • gc_ratchet.py check --profile pinned_host — passed against the new pin
  • full quiet-host pin driver — exit 0; all Node oracles passed
  • git diff --check — passed
  • bash scripts/check_file_size.sh — passed

Adjacent observation

The pin driver records the full suite with --warn-only. It reported existing/current timing regressions for Fibonacci (+23%) and bench_numeric_array_numeric (+1000%) while all correctness checks passed. This PR does not open a separate issue or mix those unrelated performance investigations into the GC ratchet re-pin.

Summary by CodeRabbit

  • Documentation
    • Updated the changelog to document revised garbage-collection performance baselines.
    • Clarified accounting for live bytes, nursery allocation, promotion, pinned memory, and grow-then-churn behavior.
    • Existing probes and tolerances remain unchanged.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8bda66d7-5f09-42b3-9b3b-6ce28f2bd9f7

📥 Commits

Reviewing files that changed from the base of the PR and between c109b08 and 7f22b8b.

📒 Files selected for processing (2)
  • benchmarks/gc_ratchet/baseline/gc-ratchet-v1.json
  • changelog.d/7921-gc-ratchet-repin.md

📝 Walkthrough

Walkthrough

The PR adds a changelog entry for the re-pinned GC ratchet baseline. The entry records updated live-byte accounting, nursery allocation, bounded untraced promotion, grow-then-churn behavior, promotion work, and pinned-host footprint.

Changes

GC ratchet documentation

Layer / File(s) Summary
Baseline re-pin changelog
changelog.d/7921-gc-ratchet-repin.md
Documents the re-pinned GC ratchet baseline and its recorded collector behavior and constraints.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Possibly related PRs

  • PerryTS/perry#7783: Introduced the grow-then-churn probe and related GC accounting updates.
  • PerryTS/perry#7432: Added adaptive tenuring and live-byte accounting changes associated with GC ratchet baseline updates.
  • PerryTS/perry#7557: Modified GC ratchet baselines, tolerances, and probe accounting.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The changeset contains only a changelog entry and does not include the generated ratchet artifact required to re-pin the baseline. Add the generated GC ratchet artifact and required baseline metadata so the PR performs the re-pin without changing probes or tolerances.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the GC ratchet re-pin and its cause: accepted collector shifts.
Description check ✅ Passed The description explains the change, linked issue, rationale, validation results, and unrelated observations in sufficient detail.
Out of Scope Changes check ✅ Passed The changelog entry documents the GC ratchet re-pin and accepted collector shifts, which are within the linked issue objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/7843-gc-ratchet

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug
proggeramlug marked this pull request as ready for review August 12, 2026 06:38
@proggeramlug
proggeramlug merged commit 76d7e0e into main Aug 12, 2026
1 of 19 checks passed
@proggeramlug
proggeramlug deleted the fix/7843-gc-ratchet branch August 12, 2026 06:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gc-ratchet: 7 gating rows red on main since 0.5.1451 — and 04_dead_after_deep_stack / 11_collect_at_depth are NOT among them

1 participant