Firefox/Projects/Startup Time Improvements

From MozillaWiki
Jump to navigation Jump to search

Overview

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

Project lead: Dietrich Ayala
Project members: Ryan Flint, Drew Willcoxon, David Dahl, Vlad Vukićević, Taras Glek, Joel Reymont, Ben Hsieh, Rob Strong, Zack Weinberg

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
~8% bug 525013 Static build configuration Joel Reymont at risk Core work done, needs new patch. More details here
~10% bug 531406 Optimize code locality in binaries Taras Glek in progress See Taras' blog post for more details.

Valgrind plugin complete, but speedup is not significant enough. Need to investigate more.

~10% bug 520309 Startup cache Ben Hsieh at risk Got first review from bsmedberg. bsmedberg is going to API-level review, then dwitte will do implementation review. Needs new patch addressing first review.
TBD bug 513149 Speed up CSS parsing Zack Weinberg in progress deCOM landed (bug 523496, bug 544112); other changes in progress, see chart.
n/a bug 545191 Investigate Tp/Ts instability Zack Weinberg in progress Waiting for releng to prep a Talos slave box for experiments.
~10% bug 512584 Fast paths for Cc/Ci Taras Glek in progress Got more testcases to pass, waiting to confirm performance wins on Places branch before figuring out how to make the patch landable.
TBD DOM flattening and XBL removal Asaf Romano in progress TODO list the bugs involved here. See also Mobile's work in this area.
up to 25%, Mac only bug 514083 HFS+ compression on Mac OSX 10.6 Joel Reymont inactive
Investigate Extension bug 533038 Investigate how to reduce the number of files used for extensions Dietrich inactive File IO caused by extensions can easily cancel out hard-earned performance wins elsewhere
Needless per-extension filesystem overhead bug 550011 xpt files are being read instead of relying on cache Dietrich inactive File IO caused by extensions can easily cancel out hard-earned performance wins elsewhere


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

  • comparing dynamic linking time between firefox and safari on mac
    • DYLD_PRINT_STATISTICS=YES /Applications/Firefox.app/Contents/MacOS/firefox-bin
    • DYLD_PRINT_STATISTICS=YES open -a Safari

Fastload

Measuring Ts

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

  1. save this html file somewhere locally
  2. create a new profile, run Firefox with it at least once, so all files are created, etc
  3. 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
test warm start cold start notes
empty profile yes yes
everything dirty bug 515540
min places yes yes informed by places-stats, bug 515540
med places yes yes ditto
max places yes 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