Performance/MemShrink
MemShrink is a project that aims to reduce the memory consumption of Firefox (on desktop and mobile) and Firefox OS. There are three potential benefits.
- Speed. Firefox will be faster due to less cache pressure, less paging, and fewer/smaller GC and CC pauses. Changes that reduce memory consumption but make Firefox slower are not desirable.
- Stability. Firefox will suffer fewer aborts/crashes due to virtual or physical memory exhaustion. The former is mostly a problem on 32-bit Windows builds with a 2GB or 4GB virtual memory limit, the latter is mostly a problem on mobile devices that lack swap space.
- Reputation. Fewer people will complain that Firefox is a memory hog and that Mozilla ignores memory usage.
This blog post describes these benefits in more detail.
There are two main ways to reduce memory consumption.
- "Slim down" memory usage, e.g. make data structures more space-efficient.
- Avoid "leaks". This loose use of the term (which is used throughout this document) includes:
- True leaks, where memory is lost forever.
- Lifetime issues, where memory is not reclaimed until you close the page/tab/window/process.
- Collection heuristic issues (e.g. GC is too infrequent).
- Bad cache algorithms and poorly tuned caches.
- Fragmentation.
Leaks are generally more important, because they are more likely to lead to horrible performance.
Meetings
Meetings happen every second Tuesday at 2pm Pacific time.
- Dial-in: Audio-only conference# 95346
- People with Mozilla phones or softphones please dial x4000 Conf# 95346
- US/Toll-free: +1 800 707 2533, (pin 4000) Conf# 95346
- US/California/Mountain View: +1 650 903 0800, x4000 Conf# 95346
- US/California/San Francisco: +1 415 762 5700, x4000 Conf# 95346
- US/Oregon/Portland: +1 971 544 8000, x4000 Conf# 95346
- CA/British Columbia/Vancouver: +1 778 785 1540, x4000 Conf# 95346
- CA/Ontario/Toronto: +1 416 848 3114, x4000 Conf# 95346
- UK/London: +44 (0)207 855 3000, x4000 Conf# 95346
- FR/Paris: +33 1 84 88 37 37, x4000 Conf# 95346
- Gmail Chat (requires Flash and the Google Talk plugin): paste +1 650 903 0800 into the Gmail Chat box that doesn't look like it accepts phone numbers
- SkypeOut is free if you use the 800 number
- Vidyo: Memshrink
- IRC: #memshrink
- Etherpad: memshrink (copied to wiki after the meeting)
Bug Tracking
Bugs tracked by the MemShrink project are prioritized by adding one of "MemShrink:P1", "MemShrink:P2" or "MemShrink:P3" to the whiteboard.
- Unprioritized MemShrink bugs. These are triaged regularly in meetings.
- MemShrink:P1 bugs. These are discussed regularly in meetings.
- MemShrink:P2 bugs. These are discussed occasionally in meetings. P2 is the default priority.
- MemShrink:P3 bugs. These are discussed rarely in meetings.
Some other interesting bug lists that overlap with the ones above.
- All MemShrink bugs.
- Unconfirmed MemShrink bugs. These are problems reported by users and generally require some kind of additional work to confirm.
- MemShrink bugs with a "mentor" annotation. These are bugs that someone has identified as reasonable easy, and that person is willing to help a newcomer fix the bug.
- Unassigned MemShrink bugs. These need someone to work on them.
Tools and Benchmarks
about:memory and memory reporters
about:memory is the primary tool for understanding Firefox's memory consumption. It displays a large number of measurements that are made by numerous memory reporters implemented within Firefox. A basic guide to using about:memory is here.
Documentation on how to write a memory reporter is here.
DMD
DMD is a tool that helps improve the coverage of memory reporters. Documentation on using it is here.
areweslimyet.com
http://arewefastyet.com is a very successful site used to track the performance of Firefox's JavaScript engine. Why was arewefastyet.com so successful? Some key characteristics.
- The benchmarks were easy to choose: everybody already used SunSpider and V8, and then Mozilla released Kraken. They run quickly, too, which is nice for devs, and allows expensive tools (like Cachegrind) to be used.
- The metrics were easy to choose. SS time, V8 time, Kraken time. They can be measured easily, precisely, and fairly repeatably. You can break the total time down into per-benchmark times, which really helps with understanding improvements and regressions. They're easy for devs to run on their own machine.
- There was a well-defined goal: match or beat the other browsers.
In comparison, for memory consumption there is no good and/or standard benchmark suite; metrics are less clear and harder to measure (especially across different browsers); and most importantly, there's no well-defined goal w.r.t. any benchmarks.
Nonetheless, we've created a memory benchmark and are tracking Firefox's performance on it over time, to provide a sense of MemShrink progress and detect regressions. It is available at http://areweslimyet.com/.
Meeting Minutes, Progress Reports and Presentations
We no longer take meeting minutes nor make progress reports, but the meetings still happen. Here is the historical record from when we did take minutes and make progress reports.
Date | Minutes | Progress report |
---|---|---|
2013-07-09 | - | Week 105--108 |
2013-06-14 | - | MemShrink's 2nd Birthday (includes the third "Big Ticket Items" list) |
2013-06-11 | - | Week 103--104 |
2013-05-28 | - | Week 99--102 (guest post) |
2013-04-30 | - | Week 97--98 (guest post) |
2013-04-16 | - | Week 95--96 |
2013-04-02 | - | Week 93--94 |
2013-03-19 | - | Week 91--92 |
2013-03-05 | - | Week 89--90 |
2013-02-19 | - | Week 87--88 |
2013-02-05 | - | Week 85--86 |
2013-01-22 | - | Week 83--84 |
2013-01-08 | - | Week 79--82 |
2012-12-11 | - | Week 77--78 |
2012-11-27 | - | Week 75--76 |
2012-11-13 | - | Week 73--74 |
2012-10-30 | - | Week 71--72 |
2012-10-16 | - | Week 69--70 |
2012-10-02 | - | Week 67--68 |
2012-09-18 | - | Week 65--66 |
2012-09-04 | - | Week 63--64 |
2012-08-21 | - | Week 61--62 |
2012-08-07 | - | Week 57--60 |
2012-07-10 | - | Week 55--56 (includes the second "Big Ticket Items" list) |
2012-06-26 | - | Week 53--54 |
2012-06-14 | - | MemShrink's 1st Birthday |
2012-06-12 | - | Week 51--52 |
2012-05-29 | - | Week 49--50 |
2012-05-15 | - | Week 47--48 |
2012-05-01 | - | Week 45--46 |
2012-04-17 | - | Week 43--44 |
2012-04-03 | - | Week 42 |
2012-03-27 | - | Week 41 |
2012-03-20 | - | Week 40 |
2012-03-13 | - | Week 39 |
2012-03-06 | - | Week 38 |
2012-02-28 | - | Week 37 |
2012-02-21 | - | Week 36 |
2012-02-14 | - | Week 35 |
2012-02-07 | - | Week 34 |
2012-01-31 | - | Week 33 |
2012-01-24 | - | Week 32 (includes the first "Big Ticket Items" list) |
2012-01-17 | - | Week 31 |
2012-01-10 | - | Week 30 |
2012-01-03 | - | Weeks 28--29 |
2011-12-20 | - | Week 27 |
2011-12-13 | minutes | Week 26 |
2011-12-06 | minutes | Week 25 |
2011-11-29 | minutes | Week 24 |
2011-11-22 | - | Week 23 |
2011-11-15 | - | Week 22 |
2011-11-08 | minutes | Week 21 |
2011-11-01 | minutes | Week 20 |
2011-10-25 | minutes | Week 19 |
2011-10-18 | minutes | Weeks 13--18 |
2011-10-11 | minutes | - |
2011-10-04 | minutes | - |
2011-09-27 | - | - |
2011-09-20 | minutes | - |
2011-09-13 | - | - |
2011-09-06 | minutes | Week 12 |
2011-08-30 | minutes | Week 11 |
2011-08-23 | minutes | Week 10 |
2011-08-16 | minutes | Week 9 |
2011-08-09 | minutes | Week 8 |
2011-08-02 | - | Week 7 |
2011-07-26 | minutes | Week 6 |
2011-07-19 | minutes | Week 5 |
2011-07-12 | minutes | Week 4 |
2011-07-05 | minutes | Week 3 |
2011-06-28 | - | Week 2 |
2011-06-21 | - | Week 1 |
2011-06-14 | - | - |
Presentations.
- 2012-01-16 "Notes on Reducing Firefox's Memory Consumption", presented at linux.conf.au Browser MiniConf