Firefox Startup Performance – Dec 18
December 18, 2009
Not much change from my late post on Monday, but a few updates below. I’ll be out of the office as of this Monday, and back on 1/11/2010. If you’re starving for startup info during that time, hit up Taras, Joel and Planet Firefox for the goods. The current numbers for startup and all other tests are available on the Performance Snapshot Page.
Top Startup Bugs
| Estimated win | Bug # | Summary | Owner | Status | Notes |
| >10% | 512584 | Super fast paths for Components.classes and Components.interfaces | Taras Glek | in progress | Taras says mostly there. |
| >10% | 525013 | Investigate a more static build configuration of Firefox | Joel Reymont | Mac and Linux in progress | Joel’s working on getting load of XPCOM components working now. Next step is completing runs of the performance tests on the tryserver. |
| up to 25% | 514083 | Per-file HFS+ compression on Mac OSX 10.6 | Joel Reymont | in progress | Snow Leopard only. More testing needed to see if it’s feasible to compress at install-time, or if we’ll have to ship SL builds. |
| TBD | 520309 | Startup cache: replacement for fastload cache | Ben Hsieh | in progress | Brendan suggested some significant changes, in-progress. |
| TBD | 503483 | Turn on –enable-faststart for Firefox by default | Dietrich | needs testing | No update this week. Loads Firefox core libraries at boot time. Need to test on all OSes, publish the numbers, and get discussion going. |
| TBD | 513149 | Speed up CSS parsing by using a machine generated lexer | Zack Weinberg | Zack’s blocked on other work | Taras says about 6% of startup spent parsing CSS. |
Other activity this week:
- More investigation into Hunspell changes in bug 468799, possibly incorporating some changes Chrome made.
Projects in a holding pattern:
- Ryan Flint has a WIP patch to minify JS on bug 524858 that significantly reduces the size of shipped JavaScript files.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. We have a list of test scenarios, still need to file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Firefox Startup Performance – Dec 14
December 15, 2009
I’m going to be changing the format of these posts a bit, to put focus on the most important issues currently blocking a super-fast startup of Firefox. Hopefully it’ll bring attention on the longest-running, hardest-to-fix, but highest-impact bugs. Right now I’m defining high-impact as changes that bring a 10% or greater improvement. Some of these bugs we don’t yet have solid data on how much of an impact, but expect it to be filled in soon as we narrow the focus onto these. As always, the current numbers for startup and all other tests are available on the Performance Snapshot Page.
Top Startup Bugs
| Estimated win | Bug # | Summary | Owner | Status | Notes |
| >10% | 512584 | Super fast paths for Components.classes and Components.interfaces | Taras Glek | in progress | Got consultation from mrbkap, needs new patch. |
| >10% | 525013 | Investigate a more static build configuration of Firefox | Joel Reymont | Mac and Linux in progress | Only measured on Mac so far, need Linux numbers and someone to figure out the Windows story. |
| up to 25% | 514083 | Per-file HFS+ compression on Mac OSX 10.6 | Joel Reymont | in progress | Snow Leopard only. |
| TBD | 520309 | Startup cache: replacement for fastload cache | Ben Hsieh | review | More efficient than current fastload, and key to enabling fastloading of XBL, CSS, manifests and various other data. Need to push to Places branch to figure out base perf difference from current fastload. |
| TBD | 503483 | Turn on –enable-faststart for Firefox by default | Dietrich | needs testing | Loads Firefox core libraries at boot time. Need to test on all OSes, publish the numbers, and get discussion going. |
| TBD | 513149 | Speed up CSS parsing by using a machine generated lexer | Zack Weinberg | Zack’s blocked on other work | Taras says it’s high, but no figures, so need better data here. |
Other activity this week:
- Jonathan Kew landed bug 519445 on trunk, which improves font loading on Mac. The patch didn’t dent the Ts graph, as the test loads a basically empty page. This patch has the largest effect when pages load various fonts, and have a large font collection. For instance, here John Dagget comments that on a system with 2000+ fonts, the loading time of the font system went from 6 seconds down to 0.33 seconds.
- Rob Strong blogged about time spent executing JS in the front-end, and put up a table of the worst offenders.
- The measurements Rob made above are from an instrumentation effort that’s happening in bug 507012, that will give us great visibility into where time is spent in JS. You can do similar profiling using DTrace, but that’s Mac only, and requires separate tools and scripts to be installed. This instrumentation will eventually be available across platforms in release builds of Firefox. It’ll default to off, but be togglable via an environmental variable or some other method. Providing tools like this makes it *easy* for anyone working on Firefox to diagnose performance problems.
Projects in a holding pattern:
- Ryan Flint has a WIP patch to minify JS on bug 524858 that significantly reduces the size of shipped JavaScript files.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. We have a list of test scenarios, still need to file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Firefox Startup Performance Weekly Summary
December 5, 2009
Current numbers are available on the Performance Snapshot page for all tests.
Summary current startup performance, relative to Firefox 3.5:
- Warm startup: For Mac, 34% better on 3.6 and 32% better on 3.7. Flat on Windows for 3.6, and since Windows 3.6 was ~5% improved over 3.5 last post, so there appears to be a regression here. However, the graph data is not showing a 5% regression, so something might be incorrect in the snapshot code.
- Cold startup: For Mac, I’m discarding past numbers since we were not measuring it correctly (bug 532965). For Windows, still not measuring yet. For Linux, the ~9% regression discrepancy from the last post is now gone, putting 3.6 at 3% improved over 3.5 and trunk at a 3% regression. However, there are regular multi-run spikes in the graph, so I’m not sure we’re getting the best data out of this measurement scheme either.
This week’s activity:
- Rob Strong landed bug 532552, which removes the blocklist service from the startup path. This log of WinCE startup, generated from Taras’ patch here, made it apparent that the service was in the startup path and taking a significant amount of time. Poke around that log, there’s more goods to be had.
- Taras landed a bunch of JAR related bugs on branch: bug 510844, bug 511754, bug 525755, bug 523065, bug 521227.
- Rob Strong put up a detailed post about his startup improvements to the update service, the effect on mobile, and pointed out some other front-end services that could benefit from the same treatment.
- Joel’s static Firefox is working (bug 525013), and is showing ~10% improvement in startup time on Mac. He’s moved on to improving code locality (bug 531406). However, time-ordering of symbols doesn’t seem to improve the sequentiality of the page-ins by much, so maybe more improvements there. More data on the bug.
- Ben is making progress on the fastload replacement in bug 520309.
- No updates on Windows cold-startup testing for Talos on bug 522807. I need to test on Vista, and turn off Pre/Superfetch.
- Taras has a new patch up for service caching (bug 516085).
- Rebasing on Windows in bug 484799 messed up mobile builds, was backed out.
- Jonathan Kew’s patch on bug 519445 for further reductions in Mac startup time spent in font system initialization, is ready to land when the tree re-opens.
Projects in a holding pattern:
- Super-fast-path-ing of Components.* (bug 512584) is on hold, blocking on getting help from JS team or someone else who knows that code.
- Ryan Flint has a WIP patch to minify JS on bug 524858 that significantly reduces the size of shipped JavaScript files.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Firefox Startup Performance Weekly Summary
November 21, 2009
Current numbers are available on the Performance Snapshot page.
Summary, relative to Firefox 3.5:
- Warm startup: For Mac, 36% better on 3.6 and 35% better on 3.7. For Windows, 5% and 5%. Flat on Linux. Also, Warm startup for Mac on 3.6 is a whopping 13% better than last week, due to the landing of bug 517804.
- Cold startup: For Mac, 20% better on both 3.6 and 3.7. For Windows, not measuring yet. For Linux, we’re seeing a regression of ~9% across branch and trunk in the snapshot but not on the graphs, so I need to figure out where the discrepancy is.
This week’s activity:
- Dirty-cold-Ts went live this week, thanks to Alice and Lukas. Example: cold startup with a large places.sqlite on Mac.
- Joel is making progress on making a super-static Firefox in bug 525013.
- Ben is making progress on the fastload replacement in bug 520309.
- No updates on Windows cold-startup testing for Talos on bug 522807. I need to test on Vista, and turn off Pre/Superfetch.
- Taras has patches up for service caching (bug 516085) and super-fast-path-ing of Components.* (bug 512584), however the latter he’s hit a wall, passing on to Blake or someone else who knows that code.
- Ted landed rebasing on Windows in bug 484799.
- Jonathan Kew has a new patch in bug 519445 for further reductions in Mac startup time spent in font system initialization, just about there…
- Ryan Flint put a patch to minify JS on bug 524858, not working yet, but significantly reduced the size of shipped JavaScript files.
Projects in a holding pattern:
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Easing Orange: Jetpack for Correlating Tinderbox Test Failures with Bugs
November 18, 2009
This is a Jetpack feature for finding out if a bug is already filed for a test failure on Tinderbox. When viewing log files for failed test runs, the Jetpack will add a link next to the test failure summary at the top of the log, that looks like “(maybe bug XXXXXX?)”. This allows sheriff’s and other awesome community members to easily mark known-oranges, and update the bug with log’s URL.
Notes:
- So far it only pulls file names out of error text, so won’t match leaks, crashes or oranges without a filename in the summary.
- Only searches the bug summary, and only searches known orange bugs (ie: has “[orange]” in the bug whiteboard).
- Scrapes bugzilla.mozilla.org, since the new REST api is very very slow, so might break with bugzilla upgrades.
- It doesn’t run until the log has completed loading, which sometimes can be a while. Load that shit in a background tab and be patient yo.
Let me know if this helps you out, or any bugs or improvements you’d like to see!
Firefox Startup Performance Weekly Summary
November 14, 2009
Current numbers are available on the Performance Snapshot page. Thanks to Chris Atlee for deploying it to the graph server. The snapshot is updated every 5 minutes with fresh data from Talos.
Summary, relative to Firefox 3.5:
- Warm startup: For Mac, 26% better on 3.6 and 31% better on 3.7. For Windows, 4% and 7%. Flat on Linux.
- Cold startup: For Mac, 22% better on 3.6, 23% better on 3.7. For Windows, not measuring yet. For Linux, 3% and 9%.
This week’s activity:
- Using the data from bug 524202, Joel is tracking down exactly how and when dynamic library code is loaded. They’re past diagnostics, and are now into implementation, coaxing the linker into ordering functions in the optimal sequence. See this comment for a good summary of the issue. Joel put up a very detailed blog post about the work they’ve been doing.
- Ryan Flint updated the spellcheck bug with some new findings.
- I got a working (so far) patch for Windows cold-startup testing for Talos on bug 522807.
- Taras is in the patch review cycle for service caching in bug 516085.
- Re-enabling rebasing on Windows in bug 484799 has review now, just needs landing.
- John Dagget and Jonathan Kew have a bunch of new findings in bug 519445 for further reductions in Mac startup time spent in font system initialization. Sometimes the patch helps, sometimes it doesn’t.
- Bug 512645, removing the setTimeout 10ms wait in chrome JS has landed.
- Drew’s work on bug 506814, getting rid of Change GetPersistentDescriptor/SetPersistentDescriptor on Mac, has landed.
Projects in a holding pattern:
- Ben Hsieh has been prototyping a whole Fastload cache replacement in bug 520309.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Firefox Startup Performance Weekly Summary
November 7, 2009
This week brings a boost in visibility of results, not just for startup, but for all the performance testing we’re doing on all branches and platforms. As I mentioned last week, I was working on an automated method of generating the cross-branch startup results. Luckily Johnath and Chris Atlee had done the hard work when making the performance dashboard. It has a JSON file that contains a roll-up of the previous 7 days performance data, which is updated every 5 minutes with new Talos results. Using that as the datasource, I wrote a script summarizes the results for each test+branch+OS combination across all the boxes that returned results, as well as stable branch and previous week differences. The final product gives a snapshot view of how each branch compares to the stable branch.
This is useful for a few different reasons. First, we (and the press and our users and our managers and everyone really) are able to know at-a-glance how any branch compares to the stable release branch. An example of another use is that before the JS team does a Tracemonkey merge, they can quickly see if any major performance effects can be expected.
The table shows red or green for any differences that are outside of a 2% threshold, to take test noise into account. This is quite liberal, as I’ve already calculated the numbers to take into account whether the difference is within the standard deviation. Reducing the noise in the tests would be a big help – perhaps some researcher will take up Roc’s challenge. A second point of trust is my math
I’m not a statistician, so please view source and let me know where I’ve miscalculated.
An example of the full report is here. I’m going to file a bug and work with release-engineering to get it pushed out to the graph server, where the dashboard lives. The data from this week’s startup table is copied below (though sans the color-coding of the real thing. Actually, now WordPress keeps stripping out my styles, so you get an ugly table this week).
Ts
| Firefox3.5 | Firefox3.6 | Firefox | TraceMonkey | |
| Leopard | median: 1469deviation: 110mean: 1481
from last week: 2% |
median: 1115 deviation: 59 mean: 1096 from last week: 3% from 3.5: 26% |
median: 1036 deviation: 48 mean: 1006 from last week: 1% from 3.5: 32% |
median: 1014 deviation: 38 mean: 1000 from last week: 0% from 3.5: 32% |
| Linux | median: 625 deviation: 7 mean: 626 from last week: 0% |
median: 632 deviation: 7 mean: 633 from last week: 0% from 3.5: -1% |
median: 619 deviation: 10 mean: 623 from last week: 1% |
median: 628 deviation: 7 mean: 628 from last week: 0% |
| Vista | median: 538 deviation: 8 mean: 540 from last week: 0% |
median: 533 deviation: 13 mean: 537 from last week: 1% from 3.5: 1% |
median: 503 deviation: 23 mean: 509 from last week: 0% from 3.5: 6% |
median: 511 deviation: 41 mean: 531 from last week: 11% from 3.5: 2% |
| XP | median: 461 deviation: 6 mean: 461 from last week: 0% |
median: 464 deviation: 6 mean: 464 from last week: 1% from 3.5: -1% |
median: 448 deviation: 7 mean: 448 from last week: 0% from 3.5: 3% |
median: 530 deviation: 38 mean: 501 from last week: 10% from 3.5: -9% |
This week’s activity:
- Taras and Joel are still working on bug 524202, tracking down exactly how and when dynamic library code is loaded. They’re past diagnostics, and are now into implementation, coaxing the linker into ordering functions in the optimal sequence. See this comment for a good summary of the issue. Joel put up a very detailed blog post about the work they’ve been doing.
- Ryan Flint posted an update on his startup bug activity this week.
- Have a patch enabling Windows cold-startup testing for Talos for bug 522807, but it’s causing the whole OS to freeze, only recoverable via reboot. Fun! I also added some details and links about how Prefetch/SuperFetch work on Windows to the wiki.
- Rob Strong pushed bug 311965 to mozilla-central, comm-central and 1.9.2 while also ensuring not to break all the toolkit apps that depend on this code. Truly a gentleman of the Mozilla ecosystem.
- Taras put a new patch up for service caching in bug 516085.
- Everything is about ready for re-enabling rebasing on Windows in bug 484799, just needs landing.
- John Dagget posted some test times in bug 519445 for yet further reductions in Mac startup time spent in font system initialization, just needs review.
- Bug 512645, removing the setTimeout 10ms wait in chrome JS, is ready to land. I’ll try to land this weekend if the bug owner doesn’t get around to it first (hint hint).
Projects in a holding pattern:
- Drew has a patch up for bug 506814, getting rid of Change GetPersistentDescriptor/SetPersistentDescriptor on Mac, just needs review from Josh.
- Ben Hsieh has been prototyping a whole Fastload cache replacement in bug 520309.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
UPDATE: Fixed link to full report.
Firefox Startup Performance Weekly Summary
October 31, 2009
No numbers summary this week, as 1) there weren’t any major landings and 2) I’m working on a script to automate the generation of these summarized numbers. Updates on the week’s activity is below. As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
- Taras and Joel are working on bug 524202, tracking down exactly how and when dynamic library code is loaded. See this comment for a good summary of the issue.
- I think I’ve found a scenario for stable cold startup numbers on Windows, which is basically: 1) Run consume.exe for N seconds where N is how long it takes to consume all physical RAM (and which also pegs the CPU), 2) sleep for 30 seconds (or however long it takes for the system to quiet down) and 3) measure startup time as usual. Next step is to get a Talos patch up, and work with Rel/Eng to get it deployed into testing so we can see numbers on real Talos boxes.
- Rob Strong split up the update service in bug 311965, has most reviews (affects all toolkit apps) and is about ready to land. This showed a significant win on WinCE startup.
Projects in a holding pattern:
- Drew has a patch up for bug 506814, getting rid of Change GetPersistentDescriptor/SetPersistentDescriptor on Mac, just needs review from Josh.
- Bug 512645, removing the setTimeout 10ms wait in chrome JS, is just waiting on review just needs to be landed (thanks jesse).
- Ben Hsieh has been prototyping a whole Fastload cache replacement in bug 520309.
- Ted has been looking at re-enabling rebasing on Windows in bug 484799 for a potential performance boost there.
- Service caching work in bug 516085 still needs to be pushed to the Places branch for testing.
- Moving font-loading out of the startup path on Mac: Jonathan Kew filed bug 519445 with a WIP patch for yet further reductions in Mac startup time spent in font system initialization.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
Firefox Startup Performance Weekly Summary
October 17, 2009
The numbers aren’t updated yet, as they were oddly counter-intuitive. Firefox 3.5 showed a massive week-over-week improvement in cold startup on Windows, which from what I can tell is not expected. On Leopard, cold startup shows a couple of percentage point improvement over last week, which is expected. Warm startup for Mac shows a 20% improvement over 3.5, but a 10% *regression* from last week, contradicting the numbers from Ts. Again, counter-intuitive numbers given that we landed a bunch of changes focused squarely on startup performance during that period.
Fortuitously, Alice and the release engineering team deployed automated cold startup testing for Mac and Linux. This gives us per-checkin visibility of cold startup times, and removes the need for error-prone local measurements for those platforms. On Windows we haven’t yet figured out how to emulate cold startup reliably, so that’s the next step.
As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Recent activity:
- Bug 511761 landed, Ben Hsieh’s work to optimize fastload cache invalidation, with a 3% win on warm startup of WinXP.
- Alfred Kayser put a patch up on bug 511754, which improves JAR file reading efficiency.
- Rob Strong closed bug 521956 and started some cleanup of nsUpdateService, further reducing the size of it for bug 311965.
- Drew has a patch up for bug 506814, getting rid of Change GetPersistentDescriptor/SetPersistentDescriptor on Mac.
- Bug 504858 pushes back the population of the bookmarks toolbar until after the browser window comes up. Dao put up a new patch. Measuring the wall-clock effect of this on startup, and determining what exactly is “gaming” the Ts test is part of the work here.
- Service caching work in bug 516085 still needs to be pushed to the Places branch for testing.
Projects in a holding pattern:
- Moving font-loading out of the startup path on Mac: Jonathan Kew filed bug 519445 with a WIP patch for yet further reductions in Mac startup time spent in font system initialization.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.
- No updates on Zack’s CSS parser changes in bug 513149.
Firefox Startup Performance Weekly Summary
October 12, 2009
Work on blockers for 3.6 stole some time last week, but some startup work advanced nonetheless, including a bunch of landings. I’ve posted the numbers from early last week below. The percentages are the difference from 3.5. Given the spate of landings later in the week after we measured, I’ll have to update the numbers again to get the full effect of everything listed below. As usual, more details and links are available on the project wiki, and we’re available to answer questions in #startup on irc.mozilla.org.
Cold Startup (median results from Juan and myself)
| Platform | 3.5 | 3.6 | Trunk |
| Mac Leopard (10/6) | 12161 | 10440 (-14%) | 10175 (-16%) |
| Win XP (10/4) | 5610 | 5640 (0%) | 4050 (-27.8%) |
Warm Startup (median of results from Talos, updated 10/6)
| Platform | 3.5 | 3.6 | Trunk |
| Mac Leopard | 1500ms | 1190ms (-20%) | 1040ms (-30%) |
| Win XP | 458ms | 470ms (+2%) | 468ms (+2%) |
| Win Vista | 545ms | 544ms (0%) | 545ms (0%) |
| Linux | 624ms | 634ms (0%) | 634ms (0%) |
Recent landings:
- Ryan landed bug 475289 to lazily initialize the engineMetadataService, bug 520342 to consolidate service initialization in the microsummary service, and pushed bug 499123, coalescing browser about: pages, to the 3.6 branch.
- Taras landed a bunch of optimizations to the fastload system as well as his work on combining the different preference files.
- I turned on PGO for Places, mozStorage and SQLite.
- Alfred Kayser’s patch on bug 510844 landed, which should increase throughput of JAR file reading.
- Ben Hsieh got review on bug 510991, which removes some stats() from the startup path.
Recent activity:
- Ryan put up a patch for bug 520284, which utilizes an important change that happened recently in bug 471219 which allows components to register for periodic timer notifications *without* instantiating the service or component. An example is in Ryan’s patch, and the docs are in the source.
- Bug 504858 pushes back the population of the bookmarks toolbar until after the browser window comes up. Dao put up a new patch. Measuring the wall-clock effect of this on startup, and determining what exactly is “gaming” the Ts test is part of the work here.
- Ben Hsieh is in review cycles for bug 511761 which optimizes the fastload cache invalidation, and consolidates some of the invalidation triggers.
- Service caching work in bug 516085, still made no progress. This week I’ll try pushing this to the Places branch.
- No updates on Zack’s CSS parser changes in bug 513149.
- Cold Startup Testing: Alice put more patches on bug 510587, getting us ever closer to automated testing of cold startup.
Projects in a holding pattern:
- Moving font-loading out of the startup path on Mac: Jonathan Kew filed bug 519445 with a WIP patch for yet further reductions in Mac startup time spent in font system initialization.
- JARification: David abandoned moving JS modules into a JAR file, since those files are fastloaded. However, since we want things like post-extension-install restarts to be fast, and those cause fastload cache invalidation, we might want to do things like this anyways. I filed a bug for the same treatment for components. These are lower priority, since they’re not the normal startup case. Follow along with all JAR-ification via the tracker bug.
- Startup Timeline: No updates, still not landed. Add [ft] in the whiteboard of your bug w/ the function names you want timed and David will generate it and update the bug.
- Static Analysis: No progress on bug 506128. David needs to file a bug with the final log of named-yet-uncalled functions.
- Dirty Profile Testing: No progress. Need to list scenarios, file bugs for each, generate Talos config patches and profile data, and then move it into Rel-Eng territory. Also, need to get a separate Tinderbox tree, since it’s going to cause a bazillion new columns.
- Joel Reymont noted in bug 513076 that there are serious drawbacks to getting our libraries in the dyld shared cache on Mac, so has deprioritized that work.


