Javascript:SpiderMonkey:ProjectGenerationGarbageCollection
From MozillaWiki
Wiki conversion of original Google Document: https://docs.google.com/a/jamsni.com/document/d/1-GZ8F0ZabvdpCnRQaecId0yuu4QFYr5pAvnRC_KFchc/edit
Contents
- 1 Objective
- 2 Milestones
- 3 Steps
- 3.1 Exact Rooting done in JS Shell bug 753203
- 3.2 JIT Integration with post barriers - 4 weeks, parallelized
- 3.3 Generational Garbage Collection in the Shell
- 3.4 Exactly Root the Browser bug 831379 - 10 weeks
- 3.5 Performance Tuning - 4 weeks (This should probably start asap)
- 3.6 Make the Post Barrier Verifier Green in the browser bug 764882
- 4 Other
- 5 Risks
Objective
Implement Generational Garbage collection in Spider Monkey. <Some goal based off V8 performance delta % on Earley Boyer benchmark>
Accountable: Naveed
Responsible: Terrence, Steve, Jon, Nicholas, evilpie and Ms2ger
Consulted: bhackett billm
Informed: Product Marketing
Tracking Bug: [meta] Implement generational garbage collection - bug 619558
Milestones
Endgame schedule
- Burndown of rooting hazards and unsafe references: https://people.mozilla.com/~sfink/analysis
- Burndown of bugs blocking Exact Rooting: https://metrics.mozilla.com/...
Milestone | Bug | Old Estimated Date | Current Estimated Date | Actual Date | Nightly Version |
---|---|---|---|---|---|
... | |||||
Nightly 26 (B2G 1.2) is uplifted to Aurora | 2013-09-16 | ||||
All unsafe references found by static analysis have been fixed | 898608 | 2013-09-23 | 2013-10-02 | 27 | |
Static analysis of unsafe references is unhidden on TBPL | 834909 | 2013-09-25 | 2013-10-03 | 27 | |
All rooting hazards found by static analysis have been fixed | 898606 | 2013-10-18 | 2013-10-07 | 27 | |
Static analysis of rooting hazards is unhidden on TBPL | 834909 | 2013-10-22 | 2013-10-08 | 27 | |
Nightly 27 is uplifted to Aurora | 2013-10-28 | ||||
... | 28 | ||||
All GGC crashes found by fuzzers have been fixed | 877471 | 2013-11-__ | 2013-10-__ | 28 | |
AWFY with GGC >= AWFY without GGC | 875863 | 2013-11-__ | 28 | ||
GGC is enabled for desktop and Android | 619558 | 2013-11-__ | 28 | ||
GGC is enabled for B2G 1.3 | 619558 | 2013-11-__ | 28 | ||
... | 28 | ||||
Nightly 28 (B2G 1.3) is uplifted to Aurora | 2013-12-09 | ||||
... | 29 | ||||
Nightly 29 is uplifted to Aurora | 2014-01-20 | ||||
... | 30 |
Original schedule
Milestone | Task | Deliverable | Assigned | Estimated Weeks | Expected Date | Actual Date |
---|---|---|---|---|---|---|
1 | Rooting analysis in the shell (x64) | green on mozilla-inbound | sfink, jonco, evilpie, Ms2ger | 2 | 3/7/2013 | 3/2/2013 |
2 | Rooting analysis in the shell (arm) | green on mozilla-inbound | sfink | 2 | pending | |
3 | Exactly rooted shell (x64) | green on mozilla-inbound | sfink, jonco, evilpie, Ms2ger | 2 | 3/14/2013 | done? |
4 | Exactly rooted shell (arm) | green on mozilla-inbound | sfink | 2 | pending | |
4.1 | Exactly rooted js/src | green on mozilla-inbound | jonco | 3 | 5/9/2013 | in progress |
5 | GGC no-jit shell only build on TBPL (x64) | green on mozilla-inbound | terrence | 6 | 2/21/2013 | 4/7/2013 |
6 | GGC no-jit shell only build on TBPL (arm) | green on mozilla-inbound | sfink, terrence | 2 | pending | |
7 | JIT support (x64) (Bug 706885) | TBPL build using JITs and Ion+Baseline+GGC displayed on AWFY | bhacket | 8 | 3/15/2013 | 4/7/2013 |
8 | JIT support (arm) | TBPL build using JITs and Ion+Baseline+GGC displayed on AWFY | bhacket | 2 | pending | |
9 | Optimized GGC in shell (x64 + arm) | Ion+GGC faster than Ion-GGC on AWFY | bhacket | 12 | 6/1/2013 | not started |
10 | Static rooting analysis - browser | available via mrgiggles and URL | sfink, bhacket | 12 | 6/1/2013 | done |
10.1 | Static analysis on TBPL - browser | visible on tbpl | sfink | not started | ||
10.2 | Static rooting analysis - b2g | available via mrgiggles and URL | sfink | pending | ||
10.3 | Static analysis on TBPL - b2g | visible on tbpl | sfink | not started | ||
11 | Exactly rooted browser (x64 + arm) | green on mozilla-inbound | sfink, jonco, evilpie, Ms2ger, terrence | 16 | 7/1/2013 | in progress |
12 | GGC in the browser (x64 + arm) | green on AWFY | terrence | 16 | 10/1/2013 | not started |
Steps
Exact Rooting done in JS Shell bug 753203
12 weeks started
- Dynamic rooting analysis on tbpl (sfink) - done
- Unhidden on inbound
- Get the root analysis build green - done
- Get jit-tests green bug 745742
- Get js ref tests green
- Get jsapi-tests green bug 831376
- Rooting analysis fuzz bugs bug 773746
- Rely on static analysis to make this not be a whack-a-mole game
- Remove E4X - done
- Do something about JSD
- Add exact roots to stack structures - 2 weeks
- AddRoot/RemoveRoot for Heap structures - 4 weeks
- Static code analysis bug 831409
- Fix all discovered rooting hazards (~800) (sfink,jonco) - 4 weeks
- Optimize all discovered over-rooting (~100)
- Automate static analysis bug 834912 - done (sfink)
- http://people.mozilla.org/~sfink/analysis/browser/rootingHazards.txt
- http://people.mozilla.org/~sfink/analysis/browser/gcFunctions.txt
- http://people.mozilla.org/~sfink/analysis/browser/allFunctions.txt
JIT Integration with post barriers - 4 weeks, parallelized
- IonMonkey bug 831506 - 1 week (bhackett)
- JaegerMonkey bug 764876 - 2 days (bhackett)
- Baseline JIT bug 831507 - <ask jandem/djvj for an estimate>
Generational Garbage Collection in the Shell
- Implement prototype algorithm (terrence) - 1 week
- This is a potential milestone: we would need to build it and test it on TBPL similar to how |r| works now -- |GGCJS| - done.
- Re-implement HashTable rekeying
- We undid this code because it was a perf regression and was still a bit buggy. (terrence) - 3 weeks
- at least part of this is bug 726687
Exactly Root the Browser bug 831379 - 10 weeks
- This is a potential milestone: we would turn on exact rooting for release FF at this point. We would not get a performance boost from this (necessarily), but it would lock in our work to this point.
Performance Tuning - 4 weeks (This should probably start asap)
- Implement a Nursery bug 706885 - 1 week
- Test against V8 Earley-Boyer benchmark.
- Also v8 deltablue, raytrace
- We may need to Implement Bill’s Pools/Zones idea to get the nursery to the requisite perf bug 759585 - 6 weeks - done
- Refactor code to avoid rooting on hot paths and keep rooter overhead acceptable bug 831886 (bhackett) - done
Make the Post Barrier Verifier Green in the browser bug 764882
- Investigate how long it will take to do generational barriers - 1 week
- We may need to rewrite the maps in xpconnect and the browser in terms of HashTable: this could be a bunch of work.
- Make JS_IsAboutToBeFinalized indirect bug 765432 - 10 weeks
Other
- Should we establish a new benchmark specifically for GGC. (sfink votes yes)
- What would it measure? there are multiple goals, e.g. throughput/MMU/pause time
- Should we make it a public benchmark?
- What workloads should we consider?
- compartmental GC very important to us, not necessarily applicable to other implementations
- allocation rate (broken down into live vs garbage), steady behavior vs swapping between allocation + computation modes, etc.
- How can we keep our advantage on Splay benchmark
- possible to do with TI --- look at types of objects promoted from nursery to major heap, eventually start allocating them directly in the major heap
- Compacting GC - Revisit in Febuary/March - 1 Month
- Delayed until exact rooting is fully done. We can add this in if we have time in the schedule that we cannot parallelize.
Risks
- Team is responsible for many top crashers
- External rooting API has not been designed
- GGC algorithm has not been decided on - it may not be faster
- JSD1 exact rooting is lurking