About this Learning Path

Who is this for?

This is an advanced topic for performance engineers and software developers targeting Arm platforms who want to optimize application binaries and shared libraries using BOLT.

What will you learn?

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

  • Instrument and optimize application binaries for individual workload features using BOLT
  • Collect and merge separate BOLT profiles to improve code coverage
  • Optimize shared libraries independently of application binaries
  • Integrate optimized shared libraries into applications
  • Evaluate and compare performance across baseline, isolated, and merged optimization scenarios

Prerequisites

Before starting, you will need the following:

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 with Linux Perf profiles to optimize an Arm application and its shared libraries. First, you’ll instrument a MySQL server build to generate workload-specific profiles, create separate traces for read-heavy and write-heavy runs, and merge them to broaden code layout guidance. Then, you’ll rebuild OpenSSL to make libssl.so and libcrypto.so suitable for BOLT, collect profiles, and apply optimizations independently from the main binary. Finally, you’ll compare results across baseline, isolated, and merged scenarios using a consistent Sysbench configuration to assess the impact of application and library-level optimizations on throughput and latency.

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
?
What output should I expect after running an instrumented workload with BOLT?
BOLT produces a profile file in .fdata format, such as profile-writeonly.fdata. These files are later used to optimize the binary and can be merged to improve coverage.
Should I reuse the BOLT-instrumented mysqld binary for additional workloads or create a new one?
Either approach works. The steps allow reusing the previously instrumented binary or generating a new instrumented variant as long as you produce a new .fdata profile for each workload.
Which shared libraries are targeted for optimization, and what if the system copies are stripped?
The path optimizes libssl.so and libcrypto.so. If system libraries are stripped, rebuild OpenSSL from source with relocations enabled so BOLT can instrument and optimize them.
Do I need to rebuild the application to benefit from optimized shared libraries?
The shared libraries are optimized independently of the application binary. The path focuses on rebuilding OpenSSL for symbol information and then integrating the optimized libraries with the application.
What test configuration is used to compare baseline and BOLT-optimized results?
Sysbench is run with --time=0 --events=10000 to complete exactly 10,000 requests per thread. Use this consistent configuration to compare baseline, application-only, and merged-with-library optimization scenarios.
Next