About this Learning Path

Who is this for?

This is an introductory topic for software developers who want to learn how to use BOLT on an Arm executable.

What will you learn?

Upon completion of this Learning Path, you will be able to:

  • Build an application which is ready to be optimized by BOLT
  • Profile an application and collect performance information
  • Run BOLT to create an optimized executable

Prerequisites

Before starting, you will need the following:

  • An Arm based system running Linux with BOLT and Linux Perf installed. The Linux kernel should be version 5.15 or later. Earlier kernel versions can be used, but some Linux Perf features may be limited or not available. For SPE the version should be 6.14 or later.
  • (Optional) A second, more powerful Linux system to build the software executable and run BOLT.

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll use BOLT to post-link optimize an Arm Linux executable based on real execution profiles. First, you’ll prepare a target system for profiling and optionally a separate build/BOLT system, then choose a profiling method — Perf samples, ETM, or SPE — to collect runtime behavior into a perf.data file. You’ll convert the profile for BOLT, and run BOLT to reorder code layout and emit a new optimized executable. Finally, you’ll compare the resulting binary against the original to observe improvements.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
How should I choose between Perf samples, ETM, and SPE for profiling?
Use the dedicated sections for each method. Perf samples provide general sampling data, while ETM and SPE record richer branch information. Follow the method that best fits your availability and profiling detail needs.
Can I profile on one Arm Linux system and run BOLT on another?
Yes. The target system runs the application and collects the profile, and a separate Linux system can build the application and run BOLT. Transfer the executable and the collected profile files between systems as needed.
What file should exist after recording with Perf before converting for BOLT?
Expect a perf.data file. Perf prints sample counts or data size when recording completes, which indicates that profiling output was captured and is ready for conversion.
What version of Perf do I need for the SPE workflow?
Use Linux Perf version 6.14 or later for SPE to capture the required branch stack information. Verify the version before recording so the profile contains all needed fields.
How do I check results after BOLT creates the optimized executable?
Run the same workload with the original and the optimized executables and compare outcomes. The optimized executable should show improved performance relative to the original after the steps are completed.
Next