blob: 4a3bc004336e27e8bbdc027fa898a4c841ada540 [file] [log] [blame] [view]
# Profiling Rust Builds
This is a guide for how to profile the compilation of a Rust library or binary.
## Prerequisites
Install the following packages from `cargo`:
```shell
cargo install --git https://github.com/rust-lang/measureme crox flamegraph summarize
```
See [Using cargo](https://fuchsia.dev/fuchsia-src/development/languages/rust/cargo) for instructions
on setting up cargo if needed.
## Generating profile data
1. Change the BUILD.gn for your rustc_binary or rustc_library to include
`configs += ["//build/config/rust:self-profile"]`.
2. `fx build <target>` or `fx clippy <target>`. The former will also include LLVM linking in the
overall report, the latter will generate a report only for a check-build.
3. Locate the `*.mm_profdata` file which was created in your output directory (e.g.
`out/qemu/fxfs-0816704.mm_profdata`).
## Analyzing profile data
### Summarize the most expensive build steps
```shell
summarize summarize out/qemu/fxfs-0816704.mm_profdata | rg '\|' | awk '{print $4,$2}' | head
```
### Generate a flamegraph of the build
```shell
flamegraph out/qemu/fxfs-0816704.mm_profdata
```
A `rustc.svg` file will be created in the current working directory which can be viewed in e.g.
Chrome.
### Generating a Perfetto trace
```shell
crox out/qemu/fxfs-0816704.mm_profdata
```
A `chrome_profile.json` file will be created in the current working directory which can be viewed in
[ui.perfetto.dev].