Course contentsShow
← Embedded Systems & Computer Architecture
Lesson 860 of 93611. Introduction to Embedded LinuxFree lesson

Monitoring System Resources with Systemd-analyze

Measure and optimize the boot sequence and system service startup times to improve overall system responsiveness and initialization speed.

In this lesson, you will learn how to leverage systemd-analyze to identify and mitigate boot-time bottlenecks, ensuring your embedded device reaches an operational state as quickly as possible.

Understanding Boot Latency

In resource-constrained embedded systems, every millisecond spent in the initialization phase counts. The systemd-analyze tool is the industry-standard utility for inspecting the boot performance of Linux systems managed by systemd. By dissecting the time spent in the kernel, initrd, and user-space service activation, you can identify which processes are delaying the availability of your application.

Practical Analysis

To begin your optimization, first get a high-level overview of the total boot duration:

systemd-analyze

This output provides the total time spent in the kernel versus user-space. However, the real power lies in identifying specific "slow" services. Run the following command to see which units are consuming the most time during startup:

systemd-analyze blame

This command prints a list of all running units, sorted by the time they took to initialize. If you see a non-essential service (like NetworkManager.service or a logging daemon) consuming a significant portion of the boot time, you have found a primary target for optimization.

Visualizing the Critical Path

Once you identify the culprits, you should investigate the dependency chain. Some services might be slow because they are waiting on others. Use systemd-analyze critical-chain to visualize the tree of dependencies that are directly impacting your system's "Time-to-Ready":

systemd-analyze critical-chain

This view allows you to identify the "critical path." Optimizing a service that isn't on this path will provide zero improvement to the total boot time. Instead, focus on the services listed here—perhaps by switching them to Type=simple instead of Type=notify, or by using socket activation to defer their execution until they are actually required.

For a comprehensive report, you can even generate an SVG diagram:

systemd-analyze plot > boot_analysis.svg

By analyzing this diagram, you can visually spot gaps where no services are starting, allowing you to parallelize tasks that are currently running sequentially due to incorrect dependency declarations in your unit files.

Key Takeaway: Use systemd-analyze blame to find the slowest units and critical-chain to ensure your optimization efforts focus on the processes actually delaying your device's startup.