Firefox/Projects/Startup Time Improvements

From MozillaWiki
Jump to: navigation, search

NOTOC

Overview

Description: Improve startup time of Firefox and Fennec on all operating systems and platforms, including mobile devices.

Project lead:
Project members: Taras Glek, Ben Hsieh, Steve Fink, Michael Wu, Shawn Wilsher

Bugs: Open | Fixed | Fixed in 3.6

Results: Performance Snapshot (snapshot numbers for last 7 days, and version comparisons)

Graphs: Windows XP | Windows Vista | Mac Leopard | Linux

Status: Weekly status updates

Active Projects

Estimated win Bug # Summary Owner Status Notes
~10% "Dirty Profile" Startup Reduction Constant startup relative to profile size Shawn Wilsher
significant bug 558200 Extension profiler platform api Steve Fink There is an easy way to provide feedback to extension developers to help them figure out why their extension is misbehaving. We need to implement that ASAP, so typical firefox installs(with lots of extensions) can be fast


Help Wanted/Onhold

Estimated win Bug # Summary Owner Status Notes
~8% bug 561842 Fold libraries into libxul Ted Mielczarek proof of concept done
up to 40% bug 531406 Optimize code locality in binaries. Working on enabling pgo atm. Taras Glek Linux almost done, need to figure out integration. Windows proof of concept needs work.

See blog post for more details. Taras and Ehsan working on Windows locality improvements (bug 553721).

~10% bug 512584 Fast paths for Cc/Ci <thead> </thead> <tbody> </tbody>
Confirmed win. Unfortunately this approach touches a lot of sensitive code, might be easier to port js to not use Cc/Ci
TBD
bug 513149 bug 553456
Speed up CSS parsing
Zack Weinberg
-
significant
bug 559663
Measuring IOPs
Our current infrastructure does not measure cold startup effectively, it should.
-
TBD
bug 569629
Get rid of static initializers
These slowdown library loading, cause a lot of pagefaults on gcc platforms.
}

Other efforts:

Measurement & Testing Projects

  • cold startup testing

Future Projects

Inactive Projects

  • bug 507101 - combining js components
  • minification
  • Mine the Ts DTrace viz/logs (Drew)
      • Status: complete, moved on to filesystem operations below
      • Results
        • cold startup is heavily I/O-bound. 90% of cold startup time is spent in page faults and other I/O syscalls, especially read, getattrlist, and stat.
        • majority of time spent after Firefox actually gets up and running is in XBL and CSS.
  • Log and mine filesystem operations during startup (Ryan, Drew)
  • Find dead code with JSHydra (David Dahl)
      • Status: incomplete, needs tuning and file bugs on dead code found
      • bug 506128 - run jshydra to find js functions that have no callers
  • JSHydra continuous testing
      • possible test scenarios
        • ending semicolon bug (XXX)
        • dead code finder

Completed Projects

Fixed startup bugs

References

Meta bugs

Tips, Tools

Fastload

Measuring Ts

We've been using a method Vlad blogged about here. The steps are below.

save this html file somewhere locally

create a new profile, run Firefox with it at least once, so all files are created, etc

execute this command, with your profile name substituted, and invoking firefox in a way appropriate for your platform:

./firefox -P YourProfileName -no-remote file:///..../startup.html#python -c 'import time; print int(time.time() * 1000);'

The following is specific to Mac OSX and is required to evict Firefox code pages from memory and clear the Unified Buffer Cache (UBC). purge does NOT do this.

#!/bin/sh

FF=/Volumes/Fujitsu80Gb

diskutil unmount force $FF
diskutil mount /dev/disk1s2

$FF/Minefield$*.app/Contents/MacOS/firefox-bin -no-remote -foreground -P clean file://$FF/startup.html#`python -c 'import time; print int(time.time() * 1000);'`

This assumes that your removable media is at /dev/disk1s2.

Test Coverage

This is an index of Firefox startup scenarios which need automated test coverage.

TODO:

  • groups: chrome, content, extensions, labs, other?
  • mark which need no-chrome testing
<thead> </thead> <tbody> </tbody>
test warm start cold start notes
empty profile style="background-color: lawngreen" yes style="background-color: lawngreen" yes |
-
everything dirty bug 515540
-
min places style="background-color: lawngreen" yes style="background-color: lawngreen" yes || informed by places-stats, bug 515540
-
med places style="background-color: lawngreen" yes style="background-color: lawngreen" yes || ditto
-
max places style="background-color: lawngreen" yes style="background-color: lawngreen" yes || ditto
-
med session informed by test pilot data
-
max session ditto
-
downloads
-
url-classifier data data is fully downloaded, should test page-load for a match and no match
-
form history
-
passwords
-
plugins
-
content preferences
-
extensions top 5?
-
extension update
-
application update
-
persona applied
-
weave
-
jetpack
-
ubiquity
-
page links are visited
-
page has microformats
-
page is ssl
-
page has plugin
}