Javascript:SpiderMonkey:ProjectGenerationGarbageCollection: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
(Convert GGC schedule from HTML table to wikitable)
Line 10: Line 10:
<br/>
<br/>
<b>Tracking Bug:</b> [meta] Implement generational garbage collection - <span class="fck_mw_template"><span class="fck_mw_template"><span class="fck_mw_template">{{bug|619558}}</span></span></span>
<b>Tracking Bug:</b> [meta] Implement generational garbage collection - <span class="fck_mw_template"><span class="fck_mw_template"><span class="fck_mw_template">{{bug|619558}}</span></span></span>
<h1> Milestones </h1>
<h1> Milestones </h1>
<table border=1>
 
<tr>
Original schedule:
  <th>Status</th>
 
  <th>Milestone</th>
{| class="wikitable"
  <th>Task</th>
! Task
  <th>Deliverable</th>
! Estimated Weeks
  <th>Assigned</th>
! Expected Date
  <th>Estimate</th>
! Actual Date
  <th>Expected</th>
|-
  <th>Actual</th>
| Rooting analysis in the shell (x64)
</tr>
| 2
<tr>
| 3/7/2013
  <td>done</td>
| 3/2/2013
  <td>1</td>
|-
  <td>Rooting analysis in the shell (x64)</td>
| Rooting analysis in the shell (arm)
  <td>green on mozilla-inbound</td>
| 2
  <td>sfink, jonco, evilpie, Ms2ger</td>
|
  <td>2 weeks</td>
| pending
  <td>2013-03-07</td>
|-
  <td>2013-03-02 ish?</td>
| Exactly rooted shell (x64)
</tr>
| 2
<tr>
| 3/14/2013
  <td>pending</td>
| done?
  <td>2</td>
|-
  <td>Rooting analysis in the shell (arm)</td>
| Exactly rooted shell (arm)
  <td>green on mozilla-inbound</td>
| 2
  <td>sfink</td>
|
  <td>2 weeks</td>
| pending
  <td></td>
|-
  <td></td>
| Exactly rooted js/src
</tr>
| 3
<tr>
| 5/9/2013
  <td>done</td>
| in progress
  <td>3</td>
|-
  <td>Exactly rooted shell (x64)</td>
| GGC no-jit shell only build on TBPL (x64)
  <td>green on mozilla-inbound</td>
| 6
  <td>sfink, jonco, evilpie, Ms2ger</td>
| 2/21/2013
  <td>2 weeks</td>
| 4/7/2013
  <td>2013-03-14</td>
|-
  <td></td>
| GGC no-jit shell only build on TBPL (arm)
</tr>
| 2
<tr>
|
  <td>pending</td>
| pending
  <td>4</td>
|-
  <td>Exactly rooted shell (arm)</td>
| JIT support (x64)
  <td>green on mozilla-inbound</td>
| 8
  <td>sfink</td>
| 3/15/2013
  <td>2 weeks</td>
| 4/7/2013
  <td></td>
|-
  <td></td>
| JIT support (arm)
</tr>
| 2
<tr>
|
  <td>in progress (needs bug)</td>
| pending
  <td>4.1</td>
|-
  <td>Exactly rooted js/src</td>
| Optimized GGC in shell (x64 + arm)
  <td>green on mozilla-inbound</td>
| 12
  <td>jonco</td>
| 6/1/2013  
  <td>3 weeks</td>
| not started
  <td>2013-05-09</td>
|-
  <td></td>
| Static rooting analysis - browser
</tr>
| 12
<tr>
| 6/1/2013
  <td>in progress (Bug 706885)</td>
| done
  <td>5</td>
|-
  <td>GGC no-jit shell only build on TBPL (x64)</td>
| Static analysis on TBPL - browser
  <td>green on mozilla-inbound</td>
|
  <td>terrence</td>
|
  <td>1.5 month</td>
| not started           
  <td>2013-02-21</td>
|-
  <td>2013-04-07</td>
| Static rooting analysis - b2g
</tr>
|
<tr>
|
  <td>pending</td>
| pending
  <td>6</td>
|-
  <td>GGC no-jit shell only build on TBPL (arm)</td>
| Static analysis on TBPL - b2g
  <td>green on mozilla-inbound</td>
|
  <td>sfink, terrence</td>
|
  <td>2 weeks</td>
| not started           
  <td></td>
|-
  <td></td>
| Exactly rooted browser (x64 + arm)
</tr>
| 16
<tr>
| 7/1/2013  
  <td>in progress (Bug 851057)</td>
| in progress
  <td>7</td>
|-
  <td>JIT support (x64)</td>
| GGC in the browser (x64 + arm)
  <td>TBPL build using JITs and Ion+Baseline+GGC displayed on AWFY</td>
| 16
  <td>bhackett</td>
| 10/1/2013
  <td>1 - 2 months</td>
| not started
  <td>2013-03-15</td>
|}
  <td></td>
 
</tr>
<tr>
  <td>pending</td>
  <td>8</td>
  <td>JIT support (arm)</td>
  <td>TBPL build using JITs and Ion+Baseline+GGC displayed on AWFY</td>
  <td>bhackett sfink</td>
  <td>2 weeks</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>not started</td>
  <td>9</td>
  <td>Optimized GGC in shell (x64 + arm)</td>
  <td>Ion+GGC faster than Ion-GGC on AWFY</td>
  <td>bhackett</td>
  <td>2 - 3 months</td>
  <td>2013-06-01</td>
  <td></td>
</tr>
<tr>
  <td>done</td>
  <td>10</td>
  <td>Static rooting analysis - browser</td>
  <td>available via mrgiggles and URL</td>
  <td>sfink, bhackett</td>
  <td>2 - 3 months</td>
  <td>2013-06-01</td>
  <td></td>
</tr>
<tr>
  <td>not started</td>
  <td>10.1</td>
  <td>Static analysis on TBPL - browser</td>
  <td>visible on tbpl</td>
  <td>sfink</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>pending</td>
  <td>10.2</td>
  <td>Static rooting analysis - b2g</td>
  <td>available via mrgiggles and URL</td>
  <td>sfink</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>not started</td>
  <td>10.3</td>
  <td>Static analysis on TBPL - b2g</td>
  <td>visible on tbpl</td>
  <td>sfink</td>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>in progress</td>
  <td>11</td>
  <td>Exactly rooted browser (x64 + arm)</td>
  <td>green on mozilla-inbound</td>
  <td>sfink, jonco, evilpie, Ms2ger, terrence</td>
  <td>2 - 4 month</td>
  <td>2013-07-01</td>
  <td></td>
</tr>
<tr>
  <td>not started</td>
  <td>12</td>
  <td>GGC in the browser (x64 + arm)</td>
  <td>green on AWFY</td>
  <td>terrence</td>
  <td>3 - 4 months</td>
  <td>2013-10-01</td>
  <td></td>
</tr>
</table>
<h1> Steps </h1>
<h1> Steps </h1>
<h2> Exact Rooting done in JS Shell <span class="fck_mw_template"><span class="fck_mw_template">{{bug|753203}}</span></span> </h2>
<h2> Exact Rooting done in JS Shell <span class="fck_mw_template"><span class="fck_mw_template">{{bug|753203}}</span></span> </h2>

Revision as of 00:44, 14 August 2013

Wiki conversion of original Google Document: https://docs.google.com/a/jamsni.com/document/d/1-GZ8F0ZabvdpCnRQaecId0yuu4QFYr5pAvnRC_KFchc/edit


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

Original schedule:

Task Estimated Weeks Expected Date Actual Date
Rooting analysis in the shell (x64) 2 3/7/2013 3/2/2013
Rooting analysis in the shell (arm) 2 pending
Exactly rooted shell (x64) 2 3/14/2013 done?
Exactly rooted shell (arm) 2 pending
Exactly rooted js/src 3 5/9/2013 in progress
GGC no-jit shell only build on TBPL (x64) 6 2/21/2013 4/7/2013
GGC no-jit shell only build on TBPL (arm) 2 pending
JIT support (x64) 8 3/15/2013 4/7/2013
JIT support (arm) 2 pending
Optimized GGC in shell (x64 + arm) 12 6/1/2013 not started
Static rooting analysis - browser 12 6/1/2013 done
Static analysis on TBPL - browser not started
Static rooting analysis - b2g pending
Static analysis on TBPL - b2g not started
Exactly rooted browser (x64 + arm) 16 7/1/2013 in progress
GGC in the browser (x64 + arm) 16 10/1/2013 not started

Steps

Exact Rooting done in JS Shell bug 753203

12 weeks started

JIT Integration with post barriers - 4 weeks, parallelized

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