4
edits
No edit summary |
|||
| Line 1: | Line 1: | ||
Objective | == Objective == | ||
Implement Generational Garbage collection in Spider Monkey. <Some goal based off V8 performance delta % on Earley Boyer benchmark> | |||
Accountable: Naveed | * Accountable: Naveed | ||
Responsible: Terrence, Jon, and Steve, evilpie Ms2ger | |||
Consulted: bhackett billm | * Responsible: Terrence, Jon, and Steve, evilpie Ms2ger | ||
Informed: Product Marketing | |||
* Consulted: bhackett billm | |||
* Informed: Product Marketing | |||
Generational GC - [https://bugzilla.mozilla.org/show_bug.cgi?id=619558 Bug 619558] | |||
== Steps == | |||
Exact Rooting done in JS Shell [https://bugzilla.mozilla.org/show_bug.cgi?id=753203 Bug 753203] - 12 weeks started | |||
Rooting Analysis on TinderBox (sfink) - 3 weeks | Rooting Analysis on TinderBox (sfink) - 3 weeks | ||
patch is ready for review, would fix the problem with some pushes not getting builds | patch is ready for review, would fix the problem with some pushes not getting builds | ||
fix up other stuff broken by above change | fix up other stuff broken by above change | ||
patch would fix last remaining problem with getting it on Try server | patch would fix last remaining problem with getting it on Try server | ||
Unhide it for inbound - keep it green | Unhide it for inbound - keep it green | ||
Get the root analysis build green - two weeks? | Get the root analysis build green - two weeks? | ||
Get jit-tests green [Bug 745742] - 2 days | |||
Get jit-tests green [https://bugzilla.mozilla.org/show_bug.cgi?id=745742 Bug 745742] - 2 days | |||
Get js ref tests green | Get js ref tests green | ||
Get jsapi-tests green [Bug 831376] | |||
Fuzzer coverage of code [Bug 773746] | Get jsapi-tests green [https://bugzilla.mozilla.org/show_bug.cgi?id=831376 Bug 831376] | ||
Fuzzer coverage of code [https://bugzilla.mozilla.org/show_bug.cgi?id=773746 Bug 773746] | |||
rely on static analysis to make this not be a whack-a-mole game | rely on static analysis to make this not be a whack-a-mole game | ||
Remove E4X | Remove E4X | ||
Do something about JSD | Do something about JSD | ||
Add exact roots to stack structures - 2 weeks | Add exact roots to stack structures - 2 weeks | ||
AddRoot/RemoveRoot for Heap structures - 4 weeks | AddRoot/RemoveRoot for Heap structures - 4 weeks | ||
Static code analysis [Bug 831409] | |||
Static code analysis [https://bugzilla.mozilla.org/show_bug.cgi?id=831409 Bug 831409] | |||
Fix all discovered rooting hazards (~800) (sfink,jonco) - 4 weeks | Fix all discovered rooting hazards (~800) (sfink,jonco) - 4 weeks | ||
Optimize all discovered over-rooting (~100) | Optimize all discovered over-rooting (~100) | ||
Automate static analysis (sfink) | Automate static analysis (sfink) | ||
Need a server (dm-sixgill01?) | Need a server (dm-sixgill01?) | ||
http://people.mozilla.org/~bhackett/rootingHazards.html | http://people.mozilla.org/~bhackett/rootingHazards.html | ||
http://people.mozilla.org/~bhackett/gcFunctions.html | http://people.mozilla.org/~bhackett/gcFunctions.html | ||
JIT Integration with post barriers - 4 weeks, parallelized | JIT Integration with post barriers - 4 weeks, parallelized | ||
IonMonkey [Bug 831506] - 1 week (bhackett) | |||
JaegerMonkey [Bug 764876] - 2 days (bhackett) | IonMonkey [https://bugzilla.mozilla.org/show_bug.cgi?id=831506 Bug 831506] - 1 week (bhackett) | ||
Baseline JIT [Bug 831507] - <ask jandem/djvj for an estimate> | |||
JaegerMonkey [https://bugzilla.mozilla.org/show_bug.cgi?id=764876 Bug 764876] - 2 days (bhackett) | |||
Baseline JIT [https://bugzilla.mozilla.org/show_bug.cgi?id=831507 Bug 831507] - <ask jandem/djvj for an estimate> | |||
Generation Garbage Collection in the Shell | Generation Garbage Collection in the Shell | ||
Implement prototype algorithm (terrence) - 1 week | 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|. | This is a potential milestone: we would need to build it and test it on TBPL similar to how |r| works now -- |GGCJS|. | ||
Exactly Root the Browser [Bug 831379] - 10 weeks | Exactly Root the Browser [https://bugzilla.mozilla.org/show_bug.cgi?id=831379 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. | 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) | Performance Tuning - 4 weeks (This should probably start asap) | ||
Test against V8 Earley-Boyer benchmark. | Test against V8 Earley-Boyer benchmark. | ||
Also v8 deltablue, raytrace | Also v8 deltablue, raytrace | ||
Implement a Nursery [Bug 706885] - 1 week | |||
Implement a Nursery [https://bugzilla.mozilla.org/show_bug.cgi?id=706885 Bug 706885] - 1 week | |||
We may need to Implement Bill’s Pools/Zones idea to get the nursery to the requisite perf - 6 weeks | We may need to Implement Bill’s Pools/Zones idea to get the nursery to the requisite perf - 6 weeks | ||
Refactor code to avoid rooting on hot paths and keep rooter overhead acceptable - ??? weeks (start early) (bhackett) | Refactor code to avoid rooting on hot paths and keep rooter overhead acceptable - ??? weeks (start early) (bhackett) | ||
Re-implement HashTable rekeying | Re-implement HashTable rekeying | ||
We undid this code because it was a perf regression and was still a bit buggy. (terrence) - 3 weeks | We undid this code because it was a perf regression and was still a bit buggy. (terrence) - 3 weeks | ||
Make the Post Barrier Verifier Green in the browser [Bug 764882] | Make the Post Barrier Verifier Green in the browser [https://bugzilla.mozilla.org/show_bug.cgi?id=764882 Bug 764882] | ||
Investigate how long it will take to do generational barriers - 1 week | 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. | 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 | Make JS_IsAboutToBeFinalized indirect [https://bugzilla.mozilla.org/show_bug.cgi?id=765432 Bug 765432] - 10 weeks | ||
== Other == | |||
Should we establish a new benchmark specifically for GGC. (sfink votes yes) | 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 | What would it measure? there are multiple goals, e.g. throughput/MMU/pause time | ||
Should we make it a public benchmark? | Should we make it a public benchmark? | ||
What workloads should we consider? | What workloads should we consider? | ||
compartmental GC very important to us, not necessarily applicable to other implementations | 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. | 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 | 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 | 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 | 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. | Delayed until exact rooting is fully done. We can add this in if we have time in the schedule that we cannot parallelize. | ||
Risks | == Risks == | ||
Team is responsible for many top crashers | |||
External rooting API has not been designed | * Team is responsible for many top crashers | ||
GGC algorithm has not been decided on - it may not be faster | |||
JSD1 exact rooting is lurking | * External rooting API has not been designed | ||
* GGC algorithm has not been decided on - it may not be faster | |||
* JSD1 exact rooting is lurking | |||
edits