Firefox OS/Performance/Boot Sequence Optimization: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 34: Line 34:
</pre>
</pre>


Once init has been replaced on the device [[FirefoxOS/Performance/Modifying boot.img|See Process Here]]. To enable logging one simply creates a file '''|'''/data/bootchart-start'''|''' containing an integer representing the number of seconds for which bootchart should collect data.
 
Once init has been replaced on the device [[FirefoxOS/Performance/Modifying boot.img|(see process here)]], to enable logging one simply creates a file '''|'''/data/bootchart-start'''|''' on the device containing an integer representing the number of seconds for which bootchart should collect data, and then reboot the device.
 


Bootchart data is pulled from the device with the system/core/grab-bootchart.sh script, and presented in the form of a bootchart.tgz file. With the data collected one can then generate graphs by invoking:
Bootchart data is pulled from the device with the system/core/grab-bootchart.sh script, and presented in the form of a bootchart.tgz file. With the data collected one can then generate graphs by invoking:

Revision as of 19:05, 6 June 2014

Initial Ideas

  • Minimize data loaded by boot loader.
    • Compacting vmlinuz/zImage by moving compiled-in drivers to modules.
    • Minimize initial ramdisk if there is one.
    • Minimize kernel cruft by excluding all unneeded drivers.
    • Strip the kernel and all modules.
  • Minimize init launch sequence.
    • Make init only launch the bare minimum for b2g process to launch.
    • Ideally, init will only launch b2g.
  • B2G start-up sequence.
    • Remove all synchronous external dependencies from B2G start-up sequence.
      • Kernel modules must be lazy loaded as needed.
      • Any sync waits on daemons must become async. Start-up b2g pieces as daemons finish launching.
      • Minimize start-up initializations.
        • Global statics need to be minimized as their constructors are run before main().
        • Global singletons must be initialized as needed.
  • Homescreen start-up.
    • Minimize _init() code to bare minimum.
    • Maybe freeze the homescreen app into a memory image that can be loaded and unfrozen instead of launching the app every time.
    • Eliminate dependency on enumerating installed apps on launch.
      • Cache the list in local storage?
      • Cache the list in the frozen memory image?
      • Speed up mgmt.getAll()

The Plan

FirefoxOS/Performance/Boot_Profiling

Bootchart

Some example preliminary data collected via bootchart here.

To enable the collection of bootchart data in FireFox OS one must build init with the following environment variable set.

INIT_BOOTCHART=true


Once init has been replaced on the device (see process here), to enable logging one simply creates a file |/data/bootchart-start| on the device containing an integer representing the number of seconds for which bootchart should collect data, and then reboot the device.


Bootchart data is pulled from the device with the system/core/grab-bootchart.sh script, and presented in the form of a bootchart.tgz file. With the data collected one can then generate graphs by invoking:

java -jar bootchart.jar -f eps bootchart.tgz

Without the |-f eps| parameters, the default is for a PNG to be generated. The SVG format is also supported.

References

Firefox OS Bootup Procedure