Boot Time

Introduction
Boot Time includes topics such as measurement, analysis, human factors, initialization techniques, and reduction techniques. The time that a product takes to boot directly impacts the first perception an end user has of the product. Regardless of how attractive or well designed a consumer electronic device is, the time required to move the device from off to an interactive, usable state is critical to obtaining a positive end user experience. Turning on a device is Use Case #1.

Booting up a device involves numerous steps and sequences of events. In order to use consistent terminology, the Bootup Time Working of the CE Linux Forum came up with a list of terms and their widely accepted definitions for this functionality area. See the following page for these terms:
 * Boot-up Time Definition Of Terms

Technology/Project Pages
The following are individual pages with information about various technologies relevant to improving Boot Time for Linux. Some of these describe local patches available on this site. Others point to projects or patches maintained elsewhere.

Measuring Boot-up Time

 * Printk Times - simple system for showing timing information for each printk.
 * Kernel Function Trace - system for reporting function timings in the kernel.
 * Linux Trace Toolkit - system for reporting timing data for certain kernel and process events.
 * Oprofile - system-wide profiler for Linux.
 * Bootchart - a tool for performance analysis and visualization of the Linux boot process. Resource utilization and process information are collected during the user-space portion of the boot process and are later rendered in a PNG, SVG or EPS encoded chart.
 * Bootprobe - a set of System Tap scripts for analyzing system bootup.
 * and, let us not forget: "cat /proc/uptime"

[ FIXTHIS - should mention (and publish) sstream or grabserial here ]

[ FIXTHIS - should also mention initcall_debug (kernel command line option) here - it shows driver init times for many drivers]


 * See also: Kernel Instrumentation which lists some known kernel instrumentation tools. These are of interest for measuring kernel startup time.

Bootloader speedups

 * Kernel XIP - Allow kernel to be executed in-place in ROM or FLASH.
 * DMA Copy Of Kernel On Startup - Copy kernel from Flash to RAM using DMA

Kernel speedups

 * Disable Console - Avoid overhead of console output during system startup.
 * RTC No Sync - Avoid delay to synchronize system time with RTC clock edge on startup.
 * Short IDE Delays - Reduce duration of IDE startup delays (this is effective but possibly dangerous).
 * Hardcode kernel module info - Reduce the overhead of loading a module, by hardcoding some information used for loading the relocation information
 * IDE No Probe - Force kernel to observe the ide=noprobe option.
 * Preset LPJ - Allow the use of a preset loops_per_jiffy value.
 * Threaded Device Probing - Allow drivers to probe devices in parallel.
 * Reordering of driver initialization - Allow driver bus probing to start as soon as possible.

File System issues
Different file systems have different initialization (mounting) times, for the same data sets. This is a function of whether meta-data must be read from storage into RAM or not, and what algorithms are used during the mount procedure.


 * Filesystem Information - has information about boot-up times of various file systems
 * File Systems - has information on various file systems that are interesting for embedded systems

User-space and application speedups

 * Optimize RC Scripts - Reduce overhead of running RC scripts
 * Parallel RC Scripts - Run RC scripts in parallel instead of sequentially
 * Application XIP - Allow programs and libraries to be executed in-place in ROM or FLASH
 * Pre Linking - Avoid cost of runtime linking on first program load
 * GNU_HASH: ~ 50% speed improvement in dynamic linking
 * See http://sourceware.org/ml/binutils/2006-06/msg00418.html
 * Application Init Optimizations - Improvements in program load and init time via:
 * use of mmap vs. read
 * control over page mapping characteristics.

Articles and Presentations

 * "Tools and Techniques for Reducing Bootup Time" ([[Media:Tools-and-technique-for-reducing-bootup-time.ppt|PPT]] | [[Media:Tools-and-technique-for-reducing-bootup-time.odp|ODP]] | [[Media:Tools-and-technique-for-reducing-bootup-time.pdf|PDF]])
 * Tim Bird has presented at ELC Europe, on November 7, 2008, his latest collection of tips and tricks for reducing bootup time
 * Tims Fastboot Tools has online materials in support of this presentation
 * Optimizing Linker Load Times
 * (introducing various kinds of bootuptime reduction, prelinking, etc.)
 * Benchmarking boot latency on x86
 * By Gilead Ben-Yossef, July 2008
 * A tutorial on using TSC register and the kernel PRINTK_TIMES feature to measure x86 system boot time, including BIOS, bootloader, kernel and time to first user program.
 * Fast Booting of Embedded Linux
 * By HoJoon Park, Electrons and Telecommunications Research Institute (ETRI), Korea, Presented at the CELF 3rd Korean Technical Jamboree, July 2008
 * Explains several different reduction techniques used for different phases of bootup time
 * Tim Bird's (Sony) survey of boot-up time reduction techniques:
 * Methods to Improve Boot-up Time in Linux - Paper prepared for 2004 Ottawa Linux Symposium
 * - December 2003 Presentation describing some existing boot-up time reduction techniques and strategies.

Case Studies

 * Samsung proof-of-acceptability study for digital still camera: see [[Media:LinuxBootupTimeReduction4DSC.ppt|Boot Up Time Reduction PPT]]

Splash Screen projects
user-space code. embedded Linux devices supporting a 16bpp or 32bpp framebuffer.
 * Splashy - Technology to put up a spalsh screen early in the boot sequence. This is
 * This seems to be the most current splash screen technology, for major distributions. A framebuffer driver for the kernel is required.
 * Gentoo Splashscreen - newer technology to put a splash screen early in the boot sequence
 * See the HOWTO at: HOWTO FBSplash
 * PSplash - PSplash is a userspace graphical boot splash screen for mainly
 * bootsplash.org - put up a splash screen early in boot sequence
 * This project requires kernel patches
 * This project is now abandoned, and work is being done on Splashy.

Kexec

 * Kexec is a system which allows a system to be rebooted without going through BIOS. That is, a Linux kernel can directly boot into another Linux kernel, without going through firmware. See the white paper at: kexec.pdf
 * 2004 Kernel Summit presentation: fastboot.pdf
 * here's another Kexec white paper:Reboot Fast

Others

 * FSMLabs Fastboot - press release by FSMLabs about fast booting of their product. Is any of this published?


 * snapshot boot - a technology uses software resume to boot up the system quickly.

Apparently obsolete or abandoned material

 * [[Image:alert.gif]] in progress - Boot-up Time Reduction Howto - this is a project to catalog existing boot-up time reduction techniques.
 * Was originally intended to be the authoritative source for bootup time reduction information.
 * No one maintains it any more (as of Aug, 2008)
 * [[Image:alert.gif]]no content yet - Boot-up Time Delay Taxonomy - list of delays categorized by boot phase, type and magnitude
 * Was to be a survey of common bootup delays found in embedded devices.
 * Was never really written.