Linux Kernel/Boot Time: Difference between revisions
(→Vision) |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Vision == | == Vision == | ||
Provide an example layer which demonstrates how to minimize the boot-time of the Intel N-450 Development platform. Using a core-image-minimal image, boot to a login prompt in 2.0 seconds. | Provide an example layer which demonstrates how to minimize the boot-time of the Intel N-450 Development platform. Publish a document on how to apply the techniques used in the demonstration layer to an arbitrary BSP. Using a core-image-minimal image (or a customized version of it), boot to a login prompt in 2.0 seconds. Try to stick with configuration options and upstreamable patches as far as is possible. Further reduction in boot-time can be had with BSP specific hacks and hard-coding of certain initialization routines, but they should be a last resort as they are expensive to maintain. | ||
== Design == | == Design == | ||
The current linux-yocto kernel configuration does not focus on minimal boot time. Eliminating | The current linux-yocto kernel configuration does not focus on minimal boot time. Eliminating unnecessary Linux kernel config options will reduce the image size as well as the boot time. All drivers required for boot shall be built-in to the kernel, those needed after boot for applications or likely use cases can be relegated to modules. Various boot parameters can also have a significant impact. Identify specific items through exploration of: | ||
* linux/scripts/bootgraph.pl | * linux/scripts/bootgraph.pl | ||
Line 10: | Line 10: | ||
* survey of talks and papers on the subject | * survey of talks and papers on the subject | ||
* research coreboot and other BIOS replacements for the N450 | * research coreboot and other BIOS replacements for the N450 | ||
The boot process should look like the following: | |||
<pre> | |||
BIOS -> Loader -> Kernel -> Userspace -> basic init -> start apps -> module load | |||
</pre> | |||
The boot-time budget follows: | The boot-time budget follows: | ||
* BIOS: 0.5s | * BIOS: 0.5s | ||
** Assuming a BLDK or other custom fast-boot BIOS | |||
* Kernel + Modules: 1s | * Kernel + Modules: 1s | ||
* Init to prompt: 0.5s | * Init to prompt: 0.5s | ||
Line 23: | Line 30: | ||
* serial8250* (0.4s) | * serial8250* (0.4s) | ||
* Current total: 2.6s (2.2s without async_port) | * Current total: 2.6s (2.2s without async_port) | ||
* Possibly M3 work | |||
** udev audit | |||
** hardcode required /dev/* nodes | |||
** remove unnecessary configurations from udev (SCSI, IB, etc.) | |||
** start udev early, but delay the event handler and settling until after boot | |||
== Resources == | == Resources == | ||
Line 29: | Line 41: | ||
* http://elinux.org/Boot_Time | * http://elinux.org/Boot_Time | ||
== Bootgraph Results == | == Journal == | ||
=== Initial State: 2.6.34 (UP), USB === | === Bootgraph Results === | ||
==== Initial State: 2.6.34 (UP), USB ==== | |||
[[File:n450-2.6.34-usb.png|400px|thumb|right]] | [[File:n450-2.6.34-usb.png|400px|thumb|right]] | ||
* Yocto 1.0 | * Yocto 1.0 | ||
Line 41: | Line 54: | ||
<br style="clear:both" /> | <br style="clear:both" /> | ||
=== 2.6.34 (SMT), SSD === | ==== 2.6.34 (SMT), SSD ==== | ||
[[File:n450-2.6.34-smt-ssd.png|400px|thumb|right]] | [[File:n450-2.6.34-smt-ssd.png|400px|thumb|right]] | ||
* Yocto 1.0 | * Yocto 1.0 | ||
Line 51: | Line 64: | ||
<br style="clear:both" /> | <br style="clear:both" /> | ||
=== 2.6.34 (SMT), SSD, NOKMS === | ==== 2.6.34 (SMT), SSD, NOKMS ==== | ||
[[File:n450-2.6.34-smt-ssd-nokms.png|400px|thumb|right]] | [[File:n450-2.6.34-smt-ssd-nokms.png|400px|thumb|right]] | ||
* Yocto 1.0 | * Yocto 1.0 | ||
Line 62: | Line 75: | ||
<br style="clear:both" /> | <br style="clear:both" /> | ||
=== 2.6.37 (SMT), SSD, NOKMS === | ==== 2.6.37 (SMT), SSD, NOKMS ==== | ||
[[File:n450-2.6.37-ssd-nokms-serial.png|400px|thumb|right]] | [[File:n450-2.6.37-ssd-nokms-serial.png|400px|thumb|right]] | ||
* Yocto 1.0+ | * Yocto 1.0+ | ||
Line 71: | Line 84: | ||
<br style="clear:both" /> | <br style="clear:both" /> | ||
=== 2.6.37 (SMT), SSD, NOKMS, No Serial === | ==== 2.6.37 (SMT), SSD, NOKMS, No Serial ==== | ||
[[File:n450-2.6.37-ssd-nokms.png|400px|thumb|right]] | [[File:n450-2.6.37-ssd-nokms.png|400px|thumb|right]] | ||
* Yocto 1.0+ | * Yocto 1.0+ |
Latest revision as of 21:32, 23 June 2011
Vision
Provide an example layer which demonstrates how to minimize the boot-time of the Intel N-450 Development platform. Publish a document on how to apply the techniques used in the demonstration layer to an arbitrary BSP. Using a core-image-minimal image (or a customized version of it), boot to a login prompt in 2.0 seconds. Try to stick with configuration options and upstreamable patches as far as is possible. Further reduction in boot-time can be had with BSP specific hacks and hard-coding of certain initialization routines, but they should be a last resort as they are expensive to maintain.
Design
The current linux-yocto kernel configuration does not focus on minimal boot time. Eliminating unnecessary Linux kernel config options will reduce the image size as well as the boot time. All drivers required for boot shall be built-in to the kernel, those needed after boot for applications or likely use cases can be relegated to modules. Various boot parameters can also have a significant impact. Identify specific items through exploration of:
- linux/scripts/bootgraph.pl
- comparison with MeeGo .config
- discussions with MeeGo leads
- survey of talks and papers on the subject
- research coreboot and other BIOS replacements for the N450
The boot process should look like the following:
BIOS -> Loader -> Kernel -> Userspace -> basic init -> start apps -> module load
The boot-time budget follows:
- BIOS: 0.5s
- Assuming a BLDK or other custom fast-boot BIOS
- Kernel + Modules: 1s
- Init to prompt: 0.5s
Next Steps
- what runs before start @ 0.38s
- e100_init_module (0.4s)
- [23]_async_port_probe (0.8s-1.3s)
- alsa_card_azx_init (0.4s)
- serial8250* (0.4s)
- Current total: 2.6s (2.2s without async_port)
- Possibly M3 work
- udev audit
- hardcode required /dev/* nodes
- remove unnecessary configurations from udev (SCSI, IB, etc.)
- start udev early, but delay the event handler and settling until after boot
Resources
Journal
Bootgraph Results
Initial State: 2.6.34 (UP), USB
- Yocto 1.0
- Intel N-450
- USB flash boot media
- linux-yocto 2.6.34
- Total boot time: 28.72s
- Some 15 seconds is due to the default BIOS
- Bootgraph logged 12s
2.6.34 (SMT), SSD
- Yocto 1.0
- Intel N-450
- SATA SSD boot media
- linux-yocto 2.6.34 w/ SMT
- Bootgraph logged 6.32s
- SSD saves some 6 seconds
2.6.34 (SMT), SSD, NOKMS
- Yocto 1.0
- Intel N-450
- SATA SSD boot media
- Boot parameters: i915.modeset=0
- linux-yocto 2.6.34 w/ SMT
- Bootgraph logged 3.98s
- NOKMS saves some 2.36s
2.6.37 (SMT), SSD, NOKMS
- Yocto 1.0+
- Intel N-450
- SATA SSD boot media
- Boot parameters: i915.modeset=0
- Bootgraph logged 4.05s
2.6.37 (SMT), SSD, NOKMS, No Serial
- Yocto 1.0+
- Intel N-450
- SATA SSD boot media
- Boot parameters: i915.modeset=0 console=tty0
- All others also have console=ttyS0,115200
- Bootgraph logged 2.39s
- no serial saves 1.66s
Notes
Discussion w/ Arjan
- Establish a budget
- Things to look at first
- boot media
- use SSD or MMC over Standard IO
- avoid USB and spinning media
- SATA
- restrict ports to those being used
- Kernel Mode Switching (KMS)
- Eliminate UDEV
- boot media