GC pacing: a minor at tsc.ts's transpile peak promotes ~31 MB via remembered_set/array (±0.6% instr, +27 MB phase lottery)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- rust, typescript
- Domain
- backend, performance
Research direction
Start by reading bench/tsc.ts and the GC diagnostic logs e-base.err and e-head.err referenced in the report, then compare the supplied pad sweeps. The issue asks why a minor collection at the transpile peak promotes heavily through remembered_set/array and whether pacing should account for transient peaks. Done means identifying the cause and establishing whether a pacing change is warranted; no fix or test location is specified.
Written by the indexing model from the issue text.
Description
Found while measuring the replace PR. bench/tsc.ts runs 50 transpileModule calls over a 2000-line source, and its cost depends on where minor collections land in the transpile cycle, which holds about 14 MB live.
A tiny change in allocation (about 4 KB less by trigger 2) moves one minor onto the transpile peak. That minor promotes 30.9 MB, 13.9 MB of it through remembered_set/array. The comparable minor in the other phase promotes 5.0 MB. The result is +1.2G instructions of gc::copying plus old-gen work, the arena at 132 MB instead of 113 MB, peak anon RSS +27 MB, and one extra minor.
A garbage pad before the loop flips the sign. With identical code, either arm swings by ±0.6% instructions.
Questions for the GC owners (extslot/zproot):
- Why does a minor at the peak promote that much through the remembered set?
- Should pacing, for example survivor-ratio feedback, avoid triggering at a transient peak?
Data, pad sweeps and GC diagnostic logs are on qb6 in /root/claude-lanes/rxtsc (sweep.sh, sweep2.sh, e-{base,head}.err).
- Dominant language
- Rust
- Stars
- 4.9k
- Forks
- 166
- Avg merge
- 2h 20m
- Merged PRs (30d)
- 916
Getting set up
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PerryTS/perry
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Maintainers usually reply within 1 day
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 48/100
Maintainers usually reply within 1 day
Similar issues
-
area:cli bug good first issue priority:medium
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
aaif-goose/goose#13031 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
meta.json, text.txt and try JSON are written non-atomicallyPossibly taken @qwertymuzaffar claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
qwertymuzaffar/parrot#47 ·
Maintainers usually reply within 1 day
-
priority: medium
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
storytold/photocraft#8041 · 1 comment ·
Maintainers usually reply within 1 day