Approaches to optimizing Boot time for Linux and Android based Embedded Systems

Date: July 20, 2018

Introduction

As the boundary between physical and digital worlds disappear, users are demanding enhanced user experience across all forms of digital interaction – smartphones, IVI systems, gaming consoles and others. The devices they use are complex embedded systems based on Linux, Windows or Android with excruciatingly long boot-up times which directly impact user experience. As the complexity of modern devices spirals upwards, it becomes more and more challenging to boot-up these devices swiftly, while enabling all the key functionalities for which users desire instant gratification.

If you take the case of automotive domain, users expect all the functionalities of infotainment systems to work, as they are intended to, right from ignition. They expect navigation to be up and running, so that they can select the route before they start driving. Rear view visibility is the first thing typically users need as they get into their cars – hence rear-view camera systems are expected to have quick response. With most of these systems running on complex embedded systems, it is imperative that automotive OEMs and tier-1s invest in optimizing the boot time in order to deliver a more immersive user experience.

So, what defines the boot-up time?

Simply put, Boot-time is defined by the sequence of steps a system performs from the time the device is switched on till the time applications are loaded and ready to use. Although the boot-up process sounds reasonably simple, it is the underlying complexities of embedded platforms, operating systems and applications that makes optimizing boot-time really complex.

Problems faced by users

Boot time of hand held devices like mobile phones are higher with many apps taking time to load during start up. Booting of IVI systems like navigation, reverse camera etc as soon as vehicle is powered on.

What will users get out of fastboot?

Enhanced user experience for hand held device users is the primary objective of incorporating fastboot. In automobile navigation and other IVI systems will start up immediately as soon as the ignition is on, also quicker change in the cockpit as soon as user wishes to engage reverse.

What does Boot sequence comprise of?

Boot sequence comprises of small functions that the system performs from the time it is powered on. Linux and Android based systems typically follow the boot sequence, depicted simplistically in the figure below:

Boot sequence comprise

Approaches to optimizing boot-time

There are various approaches to boot time optimization that can be followed, depending upon application, use-cases and underlying platform capabilities including:

  • Cold boot optimization
  • Suspend and resume
  • Hibernation boot-up
1. Cold boot optimization

Optimizing boot time of a cold-booted system boils down to optimizing the boot times of individual components of boot-up sequence (expect primary bootloader, since it is typically beyond user-control). Each function under bootloader, kernel boot-up and user-space needs to be profiled and analysed. Functions in the critical path need to be optimized for MIPS consumption until the critical path gets shifted. The process needs to be repeated until desired performance is achieved. Some of the tactics that can be used include:

  • Running only selected applications at start which are of greater importance.
  • Finding new ways to reduce the load on RAM so that boot time is reduced.
  • For kernel bootloader, stop initialization of unused devices and reduce not-so-useful logs
  • For kernel optimization, reduce the kernel image size and device tree size, remove unwanted configurations etc.
  • For driver optimization, remove latency from USB, touchscreen, display, etc.

For advanced readers, refer our blog on an unconventional approaches to reduce linux boot time here

2. Suspend/Resume approach

This approach involves saving the current state to DRAM, turning peripheral device power off, and waiting & restarting from the previously saved state. In ensures that user starts from the same state in which the IVI system was suspended.

3. Hibernation boot-up approach

The hibernation boot approach involves saving kernel image of a certain point in storage and booting up from that point during system resume. This methodology is also called snapshot boot – as a snapshot of current system is taken and then restored.

Impact

Using these approaches, boot time of complex embedded systems such as Infotainment systems can be reduced by a factor of 5-10x for cold boot and hibernation boot scenarios. To know how we optimized boot time for an automotive system based on Texas Instruments’ Jacinto6 platform, read technical case study here.

You might also like these blogs

post
Radar based object detection- 6 Different ways it is transforming the autonomous system’s navigation

In our previous blog, we discussed the mechanism of a…

Read More
post
Representing Decimal Data in Q-Format

Introduction Most of the real time signal processing algorithms have…

Read More
post
Enabling easy connectivity for Digital Audio Devices with Audio I2S Interface IP on FPGA

Abstract I2S (Inter-IC Sound) is a serial bus interface standard…

Read More