SlideShare a Scribd company logo
1 of 37
Delivering Software Innovation
MPC Data Limited is a company registered in England and Wales with company number 05507446.
Copyright © MPC Data Limited 2010. All trademarks are hereby acknowledged
The Right Approach to Minimal
Boot Times
Andrew Murray
Senior Software Engineer
CELF Embedded Linux Conference Europe 2010
Delivering Software Innovation
22
 Senior Software Engineer,
MPC Data
 Driver and kernel development
 Embedded applications development
 Windows driver development
 Work Experience
 4 years of experience working with embedded Linux devices
 Good track record in dramatically reducing customers’ boot time
through MPC Data’s boot time reduction service:
– Tight timescales often doesn’t permit nice, elegant and generic
solutions – however this frustration had provided me with many
ideas I wish to share today
– I also wish to share my observations and experiences in boot
time reduction
Andrew Murray
Delivering Software Innovation
33
Agenda
 Principals behind boot time reduction
 My approach to boot time reduction
 Case Study: MS7724 ‘Ecovec’
 Optimizing user space and function reordering
 Video Demonstration
 Conclusion and Q&A
Delivering Software Innovation
4
Principals
 The problem:
 Getting an embedded Linux based product from power-on to a
useful state of functionality in an acceptable amount of time.
 Many innovative solutions exist: Suspend / Hibernate / etc
 This presentation focuses on cold-boot optimisation
 Specialising software for specific needs of a product
 And this works because prior to optimisation the software will be:
– More General purpose
– Likely to contain functionality your device doesn’t require
which will result in more initialisation and a larger image
– More Convenient and flexible
– Likely to probe and detect hardware which you know will
always be there which will contribute to boot delay.
 There is no silver bullet here – all that is required is:
Disciplined Analysis + Common Sense + Pragmatic Approach
4
Delivering Software Innovation
5
The Approach
5
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
Delivering Software Innovation
6
The Approach
6
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
 Understand what functionality is required:
 Immediately after boot
 Sometime after
 The better your understanding the more able you are to
specialise Linux and thus improve boot time
Delivering Software Innovation
7
The Approach
7
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
 It is important to visualise what contributes to boot time
 Measuring boot time across the entire software stack is
essential
 Without tools, gauging small boot delays can be impossible
 Being able to accurately measure boot time across the board
will allow you to measure the effect of any changes you
make…
 …otherwise you’ll be lost in the dark
Delivering Software Innovation
8
The Approach
8
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
 Unnecessary functionality will increase boot time due to
 Increased image size (flash transfer time)
 Time spent initialization during start up
 “But I might use this feature in the future, it’s nice to have”
– Be strict and stick to the brief
Delivering Software Innovation
9
The Approach
9
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
 Functionality you require can be optimised
 It may already be optimised in a later version of sources
 This may involve:
 Optimising flash timings
 Removing unnecessary probing / delays
 Refactoring code
 Taking a new approach to problems
Delivering Software Innovation
10
The Approach
10
Identify boot
time
functionality
Measure
boot time
across the
board
Remove un-
necessary
functionality
Optimise
required
functionality
Re-order
initialisation
 Further improvements can be gained by doing things at
different times:
 Parallelisation
 Using Arjan’s async framework (kernel/async.c)
 Deferred loading of less important features
 Loadable kernel modules
Delivering Software Innovation
11
Case Study
 Use the MS7724 ‘EcoVec’ as a case study for a home
automation system
 Boot time functionality:
 Responsive QT user interface
 Additional functionality:
 Video capture/render (representing a security camera)
 Will describe tools, techniques and lessons along the way
11
Delivering Software Innovation
12
MS7724
12
Delivering Software Innovation
13
SH7724
13
Delivering Software Innovation
14
Case Study
 Use the MS7724 ‘EcoVec’ as a case study for a home
automation system
 Boot time functionality:
 Responsive QT user interface
 Additional functionality:
 Video capture/render (representing a security camera)
 Will describe tools, techniques and lessons along the way
14
Delivering Software Innovation
15
Case Study
15
Delivering Software Innovation
16
Case Study
 Use the MS7724 ‘EcoVec’ as a case study for a home
automation system
 Boot time functionality:
 Responsive QT user interface
 Additional functionality:
 Video capture/render (representing a security camera)
 Will describe tools and techniques along the way
16
Delivering Software Innovation
17
Case Study
 Typical Starting Point:
 BootLoader: UBoot (2009-01)
 OS: Linux (2.6.31-rc7)
 Filesystem: Buildroot (2010.05), JFFS2, NOR Flash
 Application: QT Embedded Opensource 4.6.2
17
Delivering Software Innovation
18
MS7724 Boot Process
 Component times mostly measured using GPIO and a logic
analyser,
 UBoot time measured between reset and GPIO line being
asserted
 Sources modified to toggle GPIO at key points:
– UBoot: UBoot to kernel handover
(common/cmd_bootm.c:do_bootm)
– Kernel: Mount FS
(init/do_mounts.c:do_mount_root)
– Kernel: Init
(init/main.c:init_post)
 Used printk timings for the rest
 Time to required boot time functionality: > 19 seconds!
18
Baseline
(seconds)
UBoot
(2.58 s)
Kernel
(1.30 s)
Filesystem
Mount
(~6.83 s)
Init Scripts
(1.30 s)
GUI
Application
(7.43 s)
Power-to-UI: 19.44 seconds
Delivering Software Innovation
19
UBoot
Functionality Removal
• User Boot Delay – 1000 ms
• Image Verification – 374 ms
• Image Decompression
• USB, ROMImage, Filesystems – 195 ms
Functionality Optimisation
• Improve ‘memcpy’ code – 342 ms
• Eliminate use of console – 103 ms
• Reduced kernel size – 60ms
Functionality Re-ordering
• Read MAC from EEPROM – 124 ms
• Ethernet setup – 98 ms
Reduction: 2577 ms > 280 ms (89%)Init
0.580
User Boot
Delay
1.000
Verify
Image
0.374
Extract
Image
0.622
0
0.5
1
1.5
2
2.5
3
Time(s)
Boot Task
Delivering Software Innovation
20
UBoot (Before and After)
Init
0.580
User Boot
Delay
1.000
Verify
Image
0.374
Extract
Image
0.622
0
0.5
1
1.5
2
2.5
3
Time(s)
Boot Task
Before (136 kB) After (94 kB)
Initialisation
Decompress
0
0.5
1
1.5
2
2.5
3
Time(s)
Boot Task
Delivering Software Innovation
21
Compressed Kernel Images
 The purpose of the boot loader is to jump to an
uncompressed kernel image in RAM
 A number of factors should be considered
 If Flash throughput is greater than decompression
throughput then an uncompressed image is quicker
21
Flash
Throughput
(10.50 MB/s)
Decompression
Throughput
(2.67 MB/s)
Delivering Software Innovation
22
Linux Kernel
Functionality Removal
• Remove USB – 88 kB – 144 ms
• Remove keyboard driver – 4 ms
• Remove Filesystems – 300 kB – 0.8 ms
• Remove console output
Functionality Optimisation
• Remove delays in driver initialization – 400 ms
• Removing delays - 252 ms
• Prevent probing disconnected cameras – 200 ms
• Limiting memset size – 90 ms
• Improve performance of memset – 71 ms
Functionality Re-ordering
• Defer networking initialization – 166 kB – 20 ms
Reduction: 1301 ms -> 113 ms (91%)
Delivering Software Innovation
23
Linux Kernel (Before and After)
Delivering Software Innovation
24
Userspace (Mount and Init scripts)
Functionality Removal
•Remove all init scripts – use a single init
process – 1.32 s
Functionality Optimisation
•Statically link application with uClibc libraries
•Use SquashFS instead of JFFS2 ~6.81 s
•Improve performance of NOR memory driver
Functionality Re-ordering
•Start QT then later start video
Reduction: 8130 ms > 64 ms (99%)
Example of a bootchart graphic
Delivering Software Innovation
25
QT
 Reducing the boot time of the QT application was the biggest
challenge and very time consuming
 Un-optimized QT application was large and took 7.4 seconds
to reach it’s main function!
 Improvements reduce time to 0.3 seconds:
Measurements show incremental effects against original binary (from left to right)
Optimise flash
access
(arch/sh/kernel/io.c)
-2.89s
Removed features
-2.16s?
Used statically
linked uClibc
-0.9s?
Stripped
-0.16s
Optimising
executable
-0.35s
Read-ahead and
block size
- 0.63s
Delivering Software Innovation
26
Why does QT take so long to start?
 Only a portion of the QT application is required to display a
UI to the user
 Event handling, additional forms, etc come later
 As Linux uses Demand Paging - when an executable is run
only parts of the executable used are read from flash
 This reduces unnecessary flash accesses and decreases
application start up time
 However the application is on a block filesystem so when an
entire block is retrieved at a time…
 …This results in unnecessary flash access time if the required
executable code is spread over the entire image
Delivering Software Innovation
27
Function Reordering and Block Sizes
 Sections highlighted in red represent parts of executable
required at start up
 Most of these parts could fit in a single file-system block
 I.e. we could optimise the application such that only 2 blocks of
flash are accessed rather than 4
 Thus the executable can be optimised by:
 Reducing block size
 Eliminating FS readahead
 Reordering executable
MTD
Layer
Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7
NOR
Flash
NOR Flash
Delivering Software Innovation
28
Function Reordering
 GCC compiler features can be used to assist:
 --finstrument-functions
 --ffunction-sections
 Before the entry and after the exit of every function call –
GCC will call two new functions when –finstrument-functions
is used:
 void __cyg_profile_func_enter (….)
 void __cyg_profile_func_exit (….)
 These calls can be implemented to find out which functions
are called when
 This information can be used to generate a custom linker
script – when –function-sections is used each function lives
in its own section.
 This way we can ensure all the required sections for startup
are contained contiguously in flash
 (--gc-sections can also be helpful)
Delivering Software Innovation
29
Function Reordering and Block Sizes
 Before:
 After:
MTD
Layer
Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7
NOR
Flash
NOR Flash
MTD
Layer
Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7
NOR
Flash
NOR Flash
FS QT Application
Delivering Software Innovation
30
Essential tools
 Discrete events can be measured by toggling GPIO outputs
and utilising a logic analyser,
 Kernel events can be measured with:
 Printk timings,
 Initcall_debug and bootchart scripts,
 Userspace events can be measured with ubootchart
 http://code.google.com/p/ubootchart/
 http://www.bootchart.org/
 These are just some of the many tools available
Delivering Software Innovation
31
Case Study: Before and After
A reduction of 96%!
Baseline
(seconds)
UBoot
(2.58 s)
Kernel
(1.30 s)
Filesystem
Mount
(~6.83 s)
Init Scripts
(1.30 s)
GUI
Application
(7.43 s)
Power-to-UI: 19.44 seconds
After swiftBoot
Modifications
(seconds)
UBoot
(0.28 s)
Kernel
(0.11 s)
Filesystem
Mount
(0.02 s)
Init Scripts
(0.06 s)
GUI
Application
(0.30 s)
Power-to-UI: 0.77 seconds
Delivering Software Innovation
32
Modification
In UBoot
Gain
(ms)
Modification
In Kernel
Gain
(ms)
Modification
In Userspace
Gain
(ms)
Remove boot delay 1000 Remove driver
delays
652 Use squashfs 6830
Remove Image
verification
374 Prevent probing
disconnected
cameras
200 Optimise flash
accesses 2890
Optimise memcpy
code
342 Remove USB 144 Remove unused
features from QT
2160
Remove USB
ROMImage,
filesystems
195 Don’t allocate
memory for unused
camera components
90
Remove all init scripts 1300
Defer reading MAC
address
124 Improve memset 71 Statically link QT with
uclibc
900
Reduction due to
kernel size
60 Defer network
initialisation
20 Reduce readahead
and block size
630
Remove delays in
Ethernet init
98 Remove keyboard
driver
4 Re-order QT
application
350
Eliminate use of
console
103 Remove filesystems 0.8 Strip QT application 160
Total Gain 2.2 s Total Gain 1.2 s Total Gain 15.2 s
Summary
Delivering Software Innovation
33
Guiding Principles
 Observe and Record
 Measuring boot times is the only way to form a clear picture of
what is contributing to boot time,
 Keep copious notes
 Tackle the biggest delays in the system first,
 Identify the largest delays and remove them to be most
effective
 Be aware and try to understand varying boot times
 Remember the uncertainty principle
 Don’t forget testing
Delivering Software Innovation
34
Conclusion & Call to action
Reducing cold boot time is a like removing the
longest links of a chain until you have just
short links
 As a result boot time is a product of a system
design and long links can be easily added
 Effort will always be required to remove and
shorten links for a given system
 Holy grail is to reduce this amount of effort to
nothing – some ideas towards this:
 [Idealism] Asynchronous initialisation in the kernel by default
– Many challenges here
– This would reduce effect of delays in drivers
 [Realism] Simple Caching framework for device probes
– To eliminate probes for known hardware (generic device tree)
– Could encompass LPJ, etc
35
Thank You
Any Questions?
36
Appendix
Delivering Software Innovation
37
Initcall Debug
 Add the following to your kernel command line:
 initcall_debug (to add debug)
 loglevel=0 (to reduce the impact this has on boot time)
 Ensure the following are set in your kernel configuration:
 CONFIG_PRINTK_TIME (add timings to printks)
 CONFIG_KALLSYMS (ensure symbols are there)
 CONFIG_LOGBUF_SHIFT = 18 (ensure there is room in the log
buffer)
 Copy the output of ‘dmesg’
 Type ‘cat output | ./scripts/bootgraph.pl > graph.svg’

More Related Content

What's hot

Systemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to loveSystemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to loveAlison Chaiken
 
kexec / kdump implementation in Linux Kernel and Xen hypervisor
kexec / kdump implementation in Linux Kernel and Xen hypervisorkexec / kdump implementation in Linux Kernel and Xen hypervisor
kexec / kdump implementation in Linux Kernel and Xen hypervisorThe Linux Foundation
 
BPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveBPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveNetronome
 
Tips on High Performance Server Programming
Tips on High Performance Server ProgrammingTips on High Performance Server Programming
Tips on High Performance Server ProgrammingJoshua Zhu
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBScyllaDB
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux KernelAdrian Huang
 
Course 102: Lecture 20: Networking In Linux (Basic Concepts)
Course 102: Lecture 20: Networking In Linux (Basic Concepts) Course 102: Lecture 20: Networking In Linux (Basic Concepts)
Course 102: Lecture 20: Networking In Linux (Basic Concepts) Ahmed El-Arabawy
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracingViller Hsiao
 
U-Boot presentation 2013
U-Boot presentation  2013U-Boot presentation  2013
U-Boot presentation 2013Wave Digitech
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilionAkihiro Suda
 
QEMU and Raspberry Pi. Instant Embedded Development
QEMU and Raspberry Pi. Instant Embedded DevelopmentQEMU and Raspberry Pi. Instant Embedded Development
QEMU and Raspberry Pi. Instant Embedded DevelopmentGlobalLogic Ukraine
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device driversHoucheng Lin
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...Akihiro Suda
 
Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debuggingAshish Agrawal
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringScyllaDB
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)Brendan Gregg
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux SystemJian-Hong Pan
 

What's hot (20)

Systemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to loveSystemd: the modern Linux init system you will learn to love
Systemd: the modern Linux init system you will learn to love
 
kexec / kdump implementation in Linux Kernel and Xen hypervisor
kexec / kdump implementation in Linux Kernel and Xen hypervisorkexec / kdump implementation in Linux Kernel and Xen hypervisor
kexec / kdump implementation in Linux Kernel and Xen hypervisor
 
BPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveBPF Hardware Offload Deep Dive
BPF Hardware Offload Deep Dive
 
Tips on High Performance Server Programming
Tips on High Performance Server ProgrammingTips on High Performance Server Programming
Tips on High Performance Server Programming
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDB
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux Kernel
 
Course 102: Lecture 20: Networking In Linux (Basic Concepts)
Course 102: Lecture 20: Networking In Linux (Basic Concepts) Course 102: Lecture 20: Networking In Linux (Basic Concepts)
Course 102: Lecture 20: Networking In Linux (Basic Concepts)
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracing
 
U-Boot presentation 2013
U-Boot presentation  2013U-Boot presentation  2013
U-Boot presentation 2013
 
[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion[KubeConEU2023] Lima pavilion
[KubeConEU2023] Lima pavilion
 
QEMU and Raspberry Pi. Instant Embedded Development
QEMU and Raspberry Pi. Instant Embedded DevelopmentQEMU and Raspberry Pi. Instant Embedded Development
QEMU and Raspberry Pi. Instant Embedded Development
 
Arm device tree and linux device drivers
Arm device tree and linux device driversArm device tree and linux device drivers
Arm device tree and linux device drivers
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Memory model
Memory modelMemory model
Memory model
 
systemd
systemdsystemd
systemd
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
 
Android crash debugging
Android crash debuggingAndroid crash debugging
Android crash debugging
 
High-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uringHigh-Performance Networking Using eBPF, XDP, and io_uring
High-Performance Networking Using eBPF, XDP, and io_uring
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 

Viewers also liked

Renesas DevCon 2010: Starting a QT Application with Minimal Boot
Renesas DevCon 2010: Starting a QT Application with Minimal BootRenesas DevCon 2010: Starting a QT Application with Minimal Boot
Renesas DevCon 2010: Starting a QT Application with Minimal Bootandrewmurraympc
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6Gary Bisson
 
TI TechDays 2010: swiftBoot
TI TechDays 2010: swiftBootTI TechDays 2010: swiftBoot
TI TechDays 2010: swiftBootandrewmurraympc
 
Mainline U-BOOT for iMX6 (AR6MX)
Mainline U-BOOT for iMX6 (AR6MX)Mainline U-BOOT for iMX6 (AR6MX)
Mainline U-BOOT for iMX6 (AR6MX)Frodo Lai
 
Linux Porting
Linux PortingLinux Porting
Linux PortingChamp Yen
 
Tachyon-2014-11-21-amp-camp5
Tachyon-2014-11-21-amp-camp5Tachyon-2014-11-21-amp-camp5
Tachyon-2014-11-21-amp-camp5Haoyuan Li
 
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...Spark Summit
 
Linux Filesystems, RAID, and more
Linux Filesystems, RAID, and moreLinux Filesystems, RAID, and more
Linux Filesystems, RAID, and moreMark Wong
 
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...Spark Summit
 
The Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanThe Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanGalder Zamarreño
 
Advanced Data Retrieval and Analytics with Apache Spark and Openstack Swift
Advanced Data Retrieval and Analytics with Apache Spark and Openstack SwiftAdvanced Data Retrieval and Analytics with Apache Spark and Openstack Swift
Advanced Data Retrieval and Analytics with Apache Spark and Openstack SwiftDaniel Krook
 
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDS
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDSAccelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDS
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDSCeph Community
 
Scaling up genomic analysis with ADAM
Scaling up genomic analysis with ADAMScaling up genomic analysis with ADAM
Scaling up genomic analysis with ADAMfnothaft
 
Velox: Models in Action
Velox: Models in ActionVelox: Models in Action
Velox: Models in ActionDan Crankshaw
 
Naïveté vs. Experience
Naïveté vs. ExperienceNaïveté vs. Experience
Naïveté vs. ExperienceMike Fogus
 
SparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at ScaleSparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at Scalejeykottalam
 
SampleClean: Bringing Data Cleaning into the BDAS Stack
SampleClean: Bringing Data Cleaning into the BDAS StackSampleClean: Bringing Data Cleaning into the BDAS Stack
SampleClean: Bringing Data Cleaning into the BDAS Stackjeykottalam
 
A Curious Course on Coroutines and Concurrency
A Curious Course on Coroutines and ConcurrencyA Curious Course on Coroutines and Concurrency
A Curious Course on Coroutines and ConcurrencyDavid Beazley (Dabeaz LLC)
 

Viewers also liked (20)

Renesas DevCon 2010: Starting a QT Application with Minimal Boot
Renesas DevCon 2010: Starting a QT Application with Minimal BootRenesas DevCon 2010: Starting a QT Application with Minimal Boot
Renesas DevCon 2010: Starting a QT Application with Minimal Boot
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6
 
TI TechDays 2010: swiftBoot
TI TechDays 2010: swiftBootTI TechDays 2010: swiftBoot
TI TechDays 2010: swiftBoot
 
Mainline U-BOOT for iMX6 (AR6MX)
Mainline U-BOOT for iMX6 (AR6MX)Mainline U-BOOT for iMX6 (AR6MX)
Mainline U-BOOT for iMX6 (AR6MX)
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 
Tachyon-2014-11-21-amp-camp5
Tachyon-2014-11-21-amp-camp5Tachyon-2014-11-21-amp-camp5
Tachyon-2014-11-21-amp-camp5
 
Open Stack Cheat Sheet V1
Open Stack Cheat Sheet V1Open Stack Cheat Sheet V1
Open Stack Cheat Sheet V1
 
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...
The Little Warehouse That Couldn't Or: How We Learned to Stop Worrying and Mo...
 
Linux Filesystems, RAID, and more
Linux Filesystems, RAID, and moreLinux Filesystems, RAID, and more
Linux Filesystems, RAID, and more
 
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...
Lessons Learned with Spark at the US Patent & Trademark Office-(Christopher B...
 
The Hot Rod Protocol in Infinispan
The Hot Rod Protocol in InfinispanThe Hot Rod Protocol in Infinispan
The Hot Rod Protocol in Infinispan
 
Advanced Data Retrieval and Analytics with Apache Spark and Openstack Swift
Advanced Data Retrieval and Analytics with Apache Spark and Openstack SwiftAdvanced Data Retrieval and Analytics with Apache Spark and Openstack Swift
Advanced Data Retrieval and Analytics with Apache Spark and Openstack Swift
 
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDS
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDSAccelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDS
Accelerating Cassandra Workloads on Ceph with All-Flash PCIE SSDS
 
Scaling up genomic analysis with ADAM
Scaling up genomic analysis with ADAMScaling up genomic analysis with ADAM
Scaling up genomic analysis with ADAM
 
Velox: Models in Action
Velox: Models in ActionVelox: Models in Action
Velox: Models in Action
 
Naïveté vs. Experience
Naïveté vs. ExperienceNaïveté vs. Experience
Naïveté vs. Experience
 
SparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at ScaleSparkR: Enabling Interactive Data Science at Scale
SparkR: Enabling Interactive Data Science at Scale
 
SampleClean: Bringing Data Cleaning into the BDAS Stack
SampleClean: Bringing Data Cleaning into the BDAS StackSampleClean: Bringing Data Cleaning into the BDAS Stack
SampleClean: Bringing Data Cleaning into the BDAS Stack
 
A Curious Course on Coroutines and Concurrency
A Curious Course on Coroutines and ConcurrencyA Curious Course on Coroutines and Concurrency
A Curious Course on Coroutines and Concurrency
 
OpenStack Cheat Sheet V2
OpenStack Cheat Sheet V2OpenStack Cheat Sheet V2
OpenStack Cheat Sheet V2
 

Similar to ELC-E 2010: The Right Approach to Minimal Boot Times

TechTalk_Cloud Performance Testing_0.6
TechTalk_Cloud Performance Testing_0.6TechTalk_Cloud Performance Testing_0.6
TechTalk_Cloud Performance Testing_0.6Sravanthi N
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium EmulationRaghav Nayak
 
Improving User Experience with Ubiquitous QuickBoot
 Improving User Experience with Ubiquitous QuickBoot Improving User Experience with Ubiquitous QuickBoot
Improving User Experience with Ubiquitous QuickBootICS
 
12 Lessons Learnt in Boot Time Reduction
12 Lessons Learnt in Boot Time Reduction12 Lessons Learnt in Boot Time Reduction
12 Lessons Learnt in Boot Time Reductionandrewmurraympc
 
Infrastructure as Code, Theory Crash Course
Infrastructure as Code, Theory Crash CourseInfrastructure as Code, Theory Crash Course
Infrastructure as Code, Theory Crash CourseDr. Sven Balnojan
 
DockerCon Europe 2018 Monitoring & Logging Workshop
DockerCon Europe 2018 Monitoring & Logging WorkshopDockerCon Europe 2018 Monitoring & Logging Workshop
DockerCon Europe 2018 Monitoring & Logging WorkshopBrian Christner
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time OptimizationKan-Ru Chen
 
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...Jaeman An
 
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdf
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdfFujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdf
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdfKommaneni Sreenivasulu
 
HiPEAC 2019 Tutorial - Maestro RTOS
HiPEAC 2019 Tutorial - Maestro RTOSHiPEAC 2019 Tutorial - Maestro RTOS
HiPEAC 2019 Tutorial - Maestro RTOSTulipp. Eu
 
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...Nagios
 
NTC/326 ENTIRE CLASS UOP TUTORIALS
NTC/326 ENTIRE CLASS UOP TUTORIALSNTC/326 ENTIRE CLASS UOP TUTORIALS
NTC/326 ENTIRE CLASS UOP TUTORIALSSharon Reynolds
 
Application Of A Server Hardening Essay
Application Of A Server Hardening EssayApplication Of A Server Hardening Essay
Application Of A Server Hardening EssayWinstina Kennedy
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using JenkinsRogue Wave Software
 
Arm html5 presentation
Arm html5 presentationArm html5 presentation
Arm html5 presentationIan Renyard
 
Reproducibility in artificial intelligence
Reproducibility in artificial intelligenceReproducibility in artificial intelligence
Reproducibility in artificial intelligenceCarlos Toxtli
 
Reducing boot time in embedded Linux
Reducing boot time in embedded LinuxReducing boot time in embedded Linux
Reducing boot time in embedded LinuxChris Simmonds
 
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...Sauce Labs
 

Similar to ELC-E 2010: The Right Approach to Minimal Boot Times (20)

TechTalk_Cloud Performance Testing_0.6
TechTalk_Cloud Performance Testing_0.6TechTalk_Cloud Performance Testing_0.6
TechTalk_Cloud Performance Testing_0.6
 
Early Software Development through Palladium Emulation
Early Software Development through Palladium EmulationEarly Software Development through Palladium Emulation
Early Software Development through Palladium Emulation
 
Improving User Experience with Ubiquitous QuickBoot
 Improving User Experience with Ubiquitous QuickBoot Improving User Experience with Ubiquitous QuickBoot
Improving User Experience with Ubiquitous QuickBoot
 
12 Lessons Learnt in Boot Time Reduction
12 Lessons Learnt in Boot Time Reduction12 Lessons Learnt in Boot Time Reduction
12 Lessons Learnt in Boot Time Reduction
 
Infrastructure as Code, Theory Crash Course
Infrastructure as Code, Theory Crash CourseInfrastructure as Code, Theory Crash Course
Infrastructure as Code, Theory Crash Course
 
DockerCon Europe 2018 Monitoring & Logging Workshop
DockerCon Europe 2018 Monitoring & Logging WorkshopDockerCon Europe 2018 Monitoring & Logging Workshop
DockerCon Europe 2018 Monitoring & Logging Workshop
 
Android Boot Time Optimization
Android Boot Time OptimizationAndroid Boot Time Optimization
Android Boot Time Optimization
 
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...
How To Build Efficient ML Pipelines From The Startup Perspective (GTC Silicon...
 
Mike_Salt.pdf
Mike_Salt.pdfMike_Salt.pdf
Mike_Salt.pdf
 
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdf
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdfFujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdf
Fujitsu Services _Large Scale EBS 12.2 Upgrade Licking the Wounds_Mike_Salt.pdf
 
HiPEAC 2019 Tutorial - Maestro RTOS
HiPEAC 2019 Tutorial - Maestro RTOSHiPEAC 2019 Tutorial - Maestro RTOS
HiPEAC 2019 Tutorial - Maestro RTOS
 
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...
Nagios Conference 2011 - Nate Broderick - Nagios XI Large Implementation Tips...
 
NTC/326 ENTIRE CLASS UOP TUTORIALS
NTC/326 ENTIRE CLASS UOP TUTORIALSNTC/326 ENTIRE CLASS UOP TUTORIALS
NTC/326 ENTIRE CLASS UOP TUTORIALS
 
Application Of A Server Hardening Essay
Application Of A Server Hardening EssayApplication Of A Server Hardening Essay
Application Of A Server Hardening Essay
 
Test parallelization using Jenkins
Test parallelization using JenkinsTest parallelization using Jenkins
Test parallelization using Jenkins
 
Arm html5 presentation
Arm html5 presentationArm html5 presentation
Arm html5 presentation
 
Reproducibility in artificial intelligence
Reproducibility in artificial intelligenceReproducibility in artificial intelligence
Reproducibility in artificial intelligence
 
Reducing boot time in embedded Linux
Reducing boot time in embedded LinuxReducing boot time in embedded Linux
Reducing boot time in embedded Linux
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
 

Recently uploaded

20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdfJamie (Taka) Wang
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfAnna Loughnan Colquhoun
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServiceRenan Moreira de Oliveira
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataSafe Software
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 

Recently uploaded (20)

20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
 
Spring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdfSpring24-Release Overview - Wellingtion User Group-1.pdf
Spring24-Release Overview - Wellingtion User Group-1.pdf
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer ServicePicPay - GenAI Finance Assistant - ChatGPT for Customer Service
PicPay - GenAI Finance Assistant - ChatGPT for Customer Service
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 

ELC-E 2010: The Right Approach to Minimal Boot Times

  • 1. Delivering Software Innovation MPC Data Limited is a company registered in England and Wales with company number 05507446. Copyright © MPC Data Limited 2010. All trademarks are hereby acknowledged The Right Approach to Minimal Boot Times Andrew Murray Senior Software Engineer CELF Embedded Linux Conference Europe 2010
  • 2. Delivering Software Innovation 22  Senior Software Engineer, MPC Data  Driver and kernel development  Embedded applications development  Windows driver development  Work Experience  4 years of experience working with embedded Linux devices  Good track record in dramatically reducing customers’ boot time through MPC Data’s boot time reduction service: – Tight timescales often doesn’t permit nice, elegant and generic solutions – however this frustration had provided me with many ideas I wish to share today – I also wish to share my observations and experiences in boot time reduction Andrew Murray
  • 3. Delivering Software Innovation 33 Agenda  Principals behind boot time reduction  My approach to boot time reduction  Case Study: MS7724 ‘Ecovec’  Optimizing user space and function reordering  Video Demonstration  Conclusion and Q&A
  • 4. Delivering Software Innovation 4 Principals  The problem:  Getting an embedded Linux based product from power-on to a useful state of functionality in an acceptable amount of time.  Many innovative solutions exist: Suspend / Hibernate / etc  This presentation focuses on cold-boot optimisation  Specialising software for specific needs of a product  And this works because prior to optimisation the software will be: – More General purpose – Likely to contain functionality your device doesn’t require which will result in more initialisation and a larger image – More Convenient and flexible – Likely to probe and detect hardware which you know will always be there which will contribute to boot delay.  There is no silver bullet here – all that is required is: Disciplined Analysis + Common Sense + Pragmatic Approach 4
  • 5. Delivering Software Innovation 5 The Approach 5 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation
  • 6. Delivering Software Innovation 6 The Approach 6 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation  Understand what functionality is required:  Immediately after boot  Sometime after  The better your understanding the more able you are to specialise Linux and thus improve boot time
  • 7. Delivering Software Innovation 7 The Approach 7 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation  It is important to visualise what contributes to boot time  Measuring boot time across the entire software stack is essential  Without tools, gauging small boot delays can be impossible  Being able to accurately measure boot time across the board will allow you to measure the effect of any changes you make…  …otherwise you’ll be lost in the dark
  • 8. Delivering Software Innovation 8 The Approach 8 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation  Unnecessary functionality will increase boot time due to  Increased image size (flash transfer time)  Time spent initialization during start up  “But I might use this feature in the future, it’s nice to have” – Be strict and stick to the brief
  • 9. Delivering Software Innovation 9 The Approach 9 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation  Functionality you require can be optimised  It may already be optimised in a later version of sources  This may involve:  Optimising flash timings  Removing unnecessary probing / delays  Refactoring code  Taking a new approach to problems
  • 10. Delivering Software Innovation 10 The Approach 10 Identify boot time functionality Measure boot time across the board Remove un- necessary functionality Optimise required functionality Re-order initialisation  Further improvements can be gained by doing things at different times:  Parallelisation  Using Arjan’s async framework (kernel/async.c)  Deferred loading of less important features  Loadable kernel modules
  • 11. Delivering Software Innovation 11 Case Study  Use the MS7724 ‘EcoVec’ as a case study for a home automation system  Boot time functionality:  Responsive QT user interface  Additional functionality:  Video capture/render (representing a security camera)  Will describe tools, techniques and lessons along the way 11
  • 14. Delivering Software Innovation 14 Case Study  Use the MS7724 ‘EcoVec’ as a case study for a home automation system  Boot time functionality:  Responsive QT user interface  Additional functionality:  Video capture/render (representing a security camera)  Will describe tools, techniques and lessons along the way 14
  • 16. Delivering Software Innovation 16 Case Study  Use the MS7724 ‘EcoVec’ as a case study for a home automation system  Boot time functionality:  Responsive QT user interface  Additional functionality:  Video capture/render (representing a security camera)  Will describe tools and techniques along the way 16
  • 17. Delivering Software Innovation 17 Case Study  Typical Starting Point:  BootLoader: UBoot (2009-01)  OS: Linux (2.6.31-rc7)  Filesystem: Buildroot (2010.05), JFFS2, NOR Flash  Application: QT Embedded Opensource 4.6.2 17
  • 18. Delivering Software Innovation 18 MS7724 Boot Process  Component times mostly measured using GPIO and a logic analyser,  UBoot time measured between reset and GPIO line being asserted  Sources modified to toggle GPIO at key points: – UBoot: UBoot to kernel handover (common/cmd_bootm.c:do_bootm) – Kernel: Mount FS (init/do_mounts.c:do_mount_root) – Kernel: Init (init/main.c:init_post)  Used printk timings for the rest  Time to required boot time functionality: > 19 seconds! 18 Baseline (seconds) UBoot (2.58 s) Kernel (1.30 s) Filesystem Mount (~6.83 s) Init Scripts (1.30 s) GUI Application (7.43 s) Power-to-UI: 19.44 seconds
  • 19. Delivering Software Innovation 19 UBoot Functionality Removal • User Boot Delay – 1000 ms • Image Verification – 374 ms • Image Decompression • USB, ROMImage, Filesystems – 195 ms Functionality Optimisation • Improve ‘memcpy’ code – 342 ms • Eliminate use of console – 103 ms • Reduced kernel size – 60ms Functionality Re-ordering • Read MAC from EEPROM – 124 ms • Ethernet setup – 98 ms Reduction: 2577 ms > 280 ms (89%)Init 0.580 User Boot Delay 1.000 Verify Image 0.374 Extract Image 0.622 0 0.5 1 1.5 2 2.5 3 Time(s) Boot Task
  • 20. Delivering Software Innovation 20 UBoot (Before and After) Init 0.580 User Boot Delay 1.000 Verify Image 0.374 Extract Image 0.622 0 0.5 1 1.5 2 2.5 3 Time(s) Boot Task Before (136 kB) After (94 kB) Initialisation Decompress 0 0.5 1 1.5 2 2.5 3 Time(s) Boot Task
  • 21. Delivering Software Innovation 21 Compressed Kernel Images  The purpose of the boot loader is to jump to an uncompressed kernel image in RAM  A number of factors should be considered  If Flash throughput is greater than decompression throughput then an uncompressed image is quicker 21 Flash Throughput (10.50 MB/s) Decompression Throughput (2.67 MB/s)
  • 22. Delivering Software Innovation 22 Linux Kernel Functionality Removal • Remove USB – 88 kB – 144 ms • Remove keyboard driver – 4 ms • Remove Filesystems – 300 kB – 0.8 ms • Remove console output Functionality Optimisation • Remove delays in driver initialization – 400 ms • Removing delays - 252 ms • Prevent probing disconnected cameras – 200 ms • Limiting memset size – 90 ms • Improve performance of memset – 71 ms Functionality Re-ordering • Defer networking initialization – 166 kB – 20 ms Reduction: 1301 ms -> 113 ms (91%)
  • 23. Delivering Software Innovation 23 Linux Kernel (Before and After)
  • 24. Delivering Software Innovation 24 Userspace (Mount and Init scripts) Functionality Removal •Remove all init scripts – use a single init process – 1.32 s Functionality Optimisation •Statically link application with uClibc libraries •Use SquashFS instead of JFFS2 ~6.81 s •Improve performance of NOR memory driver Functionality Re-ordering •Start QT then later start video Reduction: 8130 ms > 64 ms (99%) Example of a bootchart graphic
  • 25. Delivering Software Innovation 25 QT  Reducing the boot time of the QT application was the biggest challenge and very time consuming  Un-optimized QT application was large and took 7.4 seconds to reach it’s main function!  Improvements reduce time to 0.3 seconds: Measurements show incremental effects against original binary (from left to right) Optimise flash access (arch/sh/kernel/io.c) -2.89s Removed features -2.16s? Used statically linked uClibc -0.9s? Stripped -0.16s Optimising executable -0.35s Read-ahead and block size - 0.63s
  • 26. Delivering Software Innovation 26 Why does QT take so long to start?  Only a portion of the QT application is required to display a UI to the user  Event handling, additional forms, etc come later  As Linux uses Demand Paging - when an executable is run only parts of the executable used are read from flash  This reduces unnecessary flash accesses and decreases application start up time  However the application is on a block filesystem so when an entire block is retrieved at a time…  …This results in unnecessary flash access time if the required executable code is spread over the entire image
  • 27. Delivering Software Innovation 27 Function Reordering and Block Sizes  Sections highlighted in red represent parts of executable required at start up  Most of these parts could fit in a single file-system block  I.e. we could optimise the application such that only 2 blocks of flash are accessed rather than 4  Thus the executable can be optimised by:  Reducing block size  Eliminating FS readahead  Reordering executable MTD Layer Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7 NOR Flash NOR Flash
  • 28. Delivering Software Innovation 28 Function Reordering  GCC compiler features can be used to assist:  --finstrument-functions  --ffunction-sections  Before the entry and after the exit of every function call – GCC will call two new functions when –finstrument-functions is used:  void __cyg_profile_func_enter (….)  void __cyg_profile_func_exit (….)  These calls can be implemented to find out which functions are called when  This information can be used to generate a custom linker script – when –function-sections is used each function lives in its own section.  This way we can ensure all the required sections for startup are contained contiguously in flash  (--gc-sections can also be helpful)
  • 29. Delivering Software Innovation 29 Function Reordering and Block Sizes  Before:  After: MTD Layer Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7 NOR Flash NOR Flash MTD Layer Block 1 Block 2 Block 3 Block 4 Block 5 Block 6 Block 7 NOR Flash NOR Flash FS QT Application
  • 30. Delivering Software Innovation 30 Essential tools  Discrete events can be measured by toggling GPIO outputs and utilising a logic analyser,  Kernel events can be measured with:  Printk timings,  Initcall_debug and bootchart scripts,  Userspace events can be measured with ubootchart  http://code.google.com/p/ubootchart/  http://www.bootchart.org/  These are just some of the many tools available
  • 31. Delivering Software Innovation 31 Case Study: Before and After A reduction of 96%! Baseline (seconds) UBoot (2.58 s) Kernel (1.30 s) Filesystem Mount (~6.83 s) Init Scripts (1.30 s) GUI Application (7.43 s) Power-to-UI: 19.44 seconds After swiftBoot Modifications (seconds) UBoot (0.28 s) Kernel (0.11 s) Filesystem Mount (0.02 s) Init Scripts (0.06 s) GUI Application (0.30 s) Power-to-UI: 0.77 seconds
  • 32. Delivering Software Innovation 32 Modification In UBoot Gain (ms) Modification In Kernel Gain (ms) Modification In Userspace Gain (ms) Remove boot delay 1000 Remove driver delays 652 Use squashfs 6830 Remove Image verification 374 Prevent probing disconnected cameras 200 Optimise flash accesses 2890 Optimise memcpy code 342 Remove USB 144 Remove unused features from QT 2160 Remove USB ROMImage, filesystems 195 Don’t allocate memory for unused camera components 90 Remove all init scripts 1300 Defer reading MAC address 124 Improve memset 71 Statically link QT with uclibc 900 Reduction due to kernel size 60 Defer network initialisation 20 Reduce readahead and block size 630 Remove delays in Ethernet init 98 Remove keyboard driver 4 Re-order QT application 350 Eliminate use of console 103 Remove filesystems 0.8 Strip QT application 160 Total Gain 2.2 s Total Gain 1.2 s Total Gain 15.2 s Summary
  • 33. Delivering Software Innovation 33 Guiding Principles  Observe and Record  Measuring boot times is the only way to form a clear picture of what is contributing to boot time,  Keep copious notes  Tackle the biggest delays in the system first,  Identify the largest delays and remove them to be most effective  Be aware and try to understand varying boot times  Remember the uncertainty principle  Don’t forget testing
  • 34. Delivering Software Innovation 34 Conclusion & Call to action Reducing cold boot time is a like removing the longest links of a chain until you have just short links  As a result boot time is a product of a system design and long links can be easily added  Effort will always be required to remove and shorten links for a given system  Holy grail is to reduce this amount of effort to nothing – some ideas towards this:  [Idealism] Asynchronous initialisation in the kernel by default – Many challenges here – This would reduce effect of delays in drivers  [Realism] Simple Caching framework for device probes – To eliminate probes for known hardware (generic device tree) – Could encompass LPJ, etc
  • 37. Delivering Software Innovation 37 Initcall Debug  Add the following to your kernel command line:  initcall_debug (to add debug)  loglevel=0 (to reduce the impact this has on boot time)  Ensure the following are set in your kernel configuration:  CONFIG_PRINTK_TIME (add timings to printks)  CONFIG_KALLSYMS (ensure symbols are there)  CONFIG_LOGBUF_SHIFT = 18 (ensure there is room in the log buffer)  Copy the output of ‘dmesg’  Type ‘cat output | ./scripts/bootgraph.pl > graph.svg’