SlideShare ist ein Scribd-Unternehmen logo
1 von 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’

Weitere ähnliche Inhalte

Was ist angesagt?

Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...
Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...
Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...Vietnam Open Infrastructure User Group
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0Ji-Woong Choi
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Etsuji Nakai
 
Multi cluster management with rancher
Multi cluster management with rancherMulti cluster management with rancher
Multi cluster management with rancherKyohei Mizumoto
 
IBM MQ Disaster Recovery
IBM MQ Disaster RecoveryIBM MQ Disaster Recovery
IBM MQ Disaster RecoveryMarkTaylorIBM
 
6 cpu scheduling
6 cpu scheduling6 cpu scheduling
6 cpu schedulingBaliThorat1
 
ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)The Linux Foundation
 
Swagger AEM - An OpenAPI Specification for AEM
Swagger AEM - An OpenAPI Specification for AEMSwagger AEM - An OpenAPI Specification for AEM
Swagger AEM - An OpenAPI Specification for AEMCliffano Subagio
 
Mastering VMware Snapshot
Mastering VMware SnapshotMastering VMware Snapshot
Mastering VMware SnapshotMohammed Raffic
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System ServerOpersys inc.
 
Chapter 6 - Process Synchronization
Chapter 6 - Process SynchronizationChapter 6 - Process Synchronization
Chapter 6 - Process SynchronizationWayne Jones Jnr
 
Reducing the boot time of Linux devices
Reducing the boot time of Linux devicesReducing the boot time of Linux devices
Reducing the boot time of Linux devicesChris Simmonds
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with PackerMatt Wrock
 
Presentation aix performance updates & issues
Presentation   aix performance updates & issuesPresentation   aix performance updates & issues
Presentation aix performance updates & issuesxKinAnx
 
OpenStack hands-on (All-in-One)
OpenStack hands-on (All-in-One)OpenStack hands-on (All-in-One)
OpenStack hands-on (All-in-One)JeSam Kim
 
Introduction to Hyper-V
Introduction to Hyper-VIntroduction to Hyper-V
Introduction to Hyper-VMark Wilson
 

Was ist angesagt? (20)

Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...
Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...
Room 3 - 7 - Nguyễn Như Phúc Huy - Vitastor: a fast and simple Ceph-like bloc...
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
 
Multi cluster management with rancher
Multi cluster management with rancherMulti cluster management with rancher
Multi cluster management with rancher
 
IBM MQ Disaster Recovery
IBM MQ Disaster RecoveryIBM MQ Disaster Recovery
IBM MQ Disaster Recovery
 
6 cpu scheduling
6 cpu scheduling6 cpu scheduling
6 cpu scheduling
 
ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)ALSS14: Xen Project Automotive Hypervisor (Demo)
ALSS14: Xen Project Automotive Hypervisor (Demo)
 
CPU Scheduling
CPU SchedulingCPU Scheduling
CPU Scheduling
 
Cs8493 unit 2
Cs8493 unit 2Cs8493 unit 2
Cs8493 unit 2
 
Swagger AEM - An OpenAPI Specification for AEM
Swagger AEM - An OpenAPI Specification for AEMSwagger AEM - An OpenAPI Specification for AEM
Swagger AEM - An OpenAPI Specification for AEM
 
Mastering VMware Snapshot
Mastering VMware SnapshotMastering VMware Snapshot
Mastering VMware Snapshot
 
Understanding the Android System Server
Understanding the Android System ServerUnderstanding the Android System Server
Understanding the Android System Server
 
Chapter 6 - Process Synchronization
Chapter 6 - Process SynchronizationChapter 6 - Process Synchronization
Chapter 6 - Process Synchronization
 
Reducing the boot time of Linux devices
Reducing the boot time of Linux devicesReducing the boot time of Linux devices
Reducing the boot time of Linux devices
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with Packer
 
Presentation aix performance updates & issues
Presentation   aix performance updates & issuesPresentation   aix performance updates & issues
Presentation aix performance updates & issues
 
OpenStack hands-on (All-in-One)
OpenStack hands-on (All-in-One)OpenStack hands-on (All-in-One)
OpenStack hands-on (All-in-One)
 
Introduction to Hyper-V
Introduction to Hyper-VIntroduction to Hyper-V
Introduction to Hyper-V
 
Process Management
Process ManagementProcess Management
Process Management
 
Kubernetes CI/CD with Helm
Kubernetes CI/CD with HelmKubernetes CI/CD with Helm
Kubernetes CI/CD with Helm
 

Andere mochten auch

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)
 

Andere mochten auch (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
 

Ähnlich wie 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
 
Cognos Performance Tuning Tips & Tricks
Cognos Performance Tuning Tips & TricksCognos Performance Tuning Tips & Tricks
Cognos Performance Tuning Tips & TricksSenturus
 
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
 
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)byteLAKE
 
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
 

Ähnlich wie 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...
 
Cognos Performance Tuning Tips & Tricks
Cognos Performance Tuning Tips & TricksCognos Performance Tuning Tips & Tricks
Cognos Performance Tuning Tips & Tricks
 
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
 
Mike_Salt.pdf
Mike_Salt.pdfMike_Salt.pdf
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...
 
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)
byteLAKE's CFD Suite (AI-accelerated CFD) (2024-02)
 
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
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 

Kürzlich hochgeladen

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

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’