Firefox/Projects/Startup Time Improvements: Difference between revisions
| Line 81: | Line 81: | ||
|inactive | |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 | |||
|} | |} | ||
</onlyinclude> | </onlyinclude> | ||
Revision as of 19:01, 10 March 2010
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 |
Measurement & Testing Projects
- cold startup testing
- bug 532965 - fix Mac cold startup test
- bug 522807 - make windows cold startup test
- dirty profile testing
- bug 515540 - dirty+cold startup
- bug 527596 - dirty Tp
- bug FILEME - test an all-dirty profile
Future Projects
- bug 523146 - micro-benchmarking test framework
- bug 522375 - built-in startup measurement
- bug 509755 - put modules into a jar
- bug FILEME - string pool for jsxpcom
- taking advantage of tracing
- figure out where we're not tracing in the startup log
- dmandelin's blog post
- traceviz (bug 497999)
- timeline of the startup path (David, Vlad)
- Status: incomplete (held up on hangs, nspr changes)
- docs
- bug 480735 instrumentation
- bug 503605 visualization (Simile timeline, raw log)
Inactive Projects
- bug 507101 - combining js components
- minification
- bug 524858 - minify js
- bug 513132 - minify css
- bug 523479 - minify extension's contents
- 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)
- Status: complete, bugs filed for egregious offenders
- Results
- checking out Xperf and others for Windows work
- investigating dtrace timing/FS cache issues on OS X
- Instruments appears to have the same issues
- Simple JS file exec script has yielded some results
- References
- 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
- possible test scenarios
Completed Projects
References
- Meta bugs
- bug 459117 Fennec performance meta bug
- bug 447581 Startup meta bug
- bug 479078 Startup research meta bug
- bug 7251 very old startup meta bug
- Vlad's blog posts
- Taras' Fennec Startup Work
- bug 459117 "make fennec faster", mostly startup bugs
- startup log
- bug 470116 various timing scripts
Tips, Tools
- Cold startup
- Flushing Windows' disk cache
- Flushing Mac OS X's disk cache
- Firefox/Projects/Startup_Time_Improvements_Notes: Vlad's emails about cold startup, including Linux (maybe move this info to this page)
- Windows Prefetch/Superfetch
- XP Prefetch wiki
- Vista/Win7 SuperFetch wiki
- useful Pre/SuperFetch overview
- Presentation slides on the guts of Pref/SuperFetch by military forensic analyst
- Prefetch
- Profile for each application: List of DLLs used, Run count, Time stamps
- Prefetch files stored in %SystemRoot%\Prefetch: .pf extension, Up to 128 are kept
- Can tell if same app run from multiple locations
- SuperFetch
- turn off: net stop sysmain
- AG*.db files, contain "scenarios" for preloading
- Prefetch
- Technet article on Vista mem mgmnt
- registry keys for toggling SuperFetch
- DTrace
- nuts and bolts how-to for getting dtrace running with mozilla
- project overview of integrating dtrace with mozilla
- dtrace community page, lots of links
- dtrace homepage? not as useful as previous link
- intro from dtrace guidebook, really useful but not mozilla/js-specific
- brief descriptions of the javascript* probes
- David Mandelin's notes on tracing C++ code
- 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
- why does js_Execute take so long for fastloaded components?
- what is fastload?
- fastload pref docs
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
| 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 |