Boot Time Optimization

NVIDIA® Jetson™ Linux provides a generic boot kernel for with which you can develop your product. To decrease kernel boot time, customize the provided kernel based on the requirements of your product.

The kernel includes a default configuration that enables all supported hardware features and searches all available devices for boot scripts. This provides out-of-the box support for the widest possible variety of controllers, features, storage devices, and boot configurations.

This flexibility comes at a cost:

  • Some hardware support features take time to initialize.

  • Enabling all software features, mostly over Advanced Peripheral Bus (APB), takes time.

  • Scanning all attached storage and network devices takes time.

In constrained or preconfigured systems, this flexibility may not be necessary; the system designer may know ahead of time which storage device contains the required files, or that certain devices do not need to be initialized by the kernel. To reduce system boot time, you can configure the kernel to respect these constraints.

For an NVIDIA® Jetson™ systems running Jetson Linux in the default configuration, it takes on an average 12 seconds from cold power-on to the log-in prompt. When the following optimization techniques are applied, boot time can be reduced to approximately three seconds.

Device Tree Nodes

If you are not using any controller from the Jetson SoC, disable the Device Tree nodes for those device tree entries. The device tree directories are at:

<top>/hardware/nvidia/platform/t23x/
<top>/hardware nvidia/soc/t23x

The DTB that is flashed is at:

<top>/hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3701-0000-p3737-0000.dts

Environment Configuration

You can optimize boot time by modifying the environment configuration in the root file system.

Disable Console Printing over UART

Console printing over the UART is a major bottleneck in kernel boot time. To reduce the bottleneck, you can reduce the volume of console printing over the UART by removing the console setting from the platform configuration file. This file is at one of the following locations:

  • For NVIDIA® Jetson AGX Orin™ series devices: Edit p3701.conf.common and remove console=ttyTCU0,115200.

  • For NVIDIA® Jetson AGX Xavier™ series: Edit p2972-0000.conf.common and remove console=ttyTCU0.

  • For NVIDIA® Jetson Xavier™ NX series: Edit p3668.conf.common and remove ``console=ttyTCU0.

After you do this you may still review the console logs over the frame buffer console.

Compile-Time Configuration

To reduce compile-time configuration, examine the generated configuration file to identify which configurations are required. After the required configurations are defined, identify which ones to boot asynchronously. For those configurations, the driver probe is executed asynchronously in a separate thread instead of the main initial thread.

Additionally, examine the required configurations and verify that they can be programmed as modules so that the drivers are loaded when they are needed. When the drivers are not loaded at boot time the kernel image is reduced, and more RAM space is available.

The following topics provide examples of each of these conditions.

Asynchronous Probe

This release includes Kernel 5.10 and the asynchronous probe feature is available by default from kernel version 3.18.

To move the driver to another thread

  • Add the probe_type property in your driver as follows:

    static struct platform_driver sdhci_tegra_driver = {
       .driver = {
          .name = "sdhci-tegra",
          .of_match_table = sdhci_tegra_dt_match,
          .pm = SDHCI_PLTFM_PMOPS,
          .probe_type = PROBE_PREFER_ASYNCHRONOUS,
       },
       .probe = sdhci_tegra_probe,
       .remove = sdhci_tegra_remove,
       .shutdown = sdhci_tegra_shutdown,
    };
    

To reduce file system initialization time

To reduce the time required to initialize the file system, modify the following configurations to set them as modules:

CONFIG_FUSE_FS=m
CONFIG_VFAT_FS=m
CONFIG_NTFS_FS=m

To disable audio configurations

To eliminate the audio codec’s initialization time, disable sound by disabling the audio configurations:

# CONFIG_SND_SOC_TEGRA_ALT is not set
# CONFIG_SND_SOC_TEGRA_ALT_FORCE_CARD_REG is not set
# CONFIG_SND_SOC_TEGRA_T186REF_ALT is not set
# CONFIG_SND_SOC_TEGRA_T186REF_MOBILE_ALT is not set

To modularize the kernel drivers

Modularize the kernel drivers so that only the required parts are loaded during boot. Drivers that are not required during boot include HID, NET, QSPI, and USB.

To disable debugging

Disable the debugging kernel hacks (FTRACE, TRACER, KMEMLEAK, etc.) in production configurations.