Files
clang-p2996/bolt/docs/Heatmaps.md
Amir Ayupov 1c5d3a056c Rebase: Merge BOLT codebase in monorepo
Summary:
This commit is the first step in rebasing all of BOLT
history in the LLVM monorepo. It also solves trivial build issues
by updating BOLT codebase to use current LLVM. There is still work
left in rebasing some BOLT features and in making sure everything
is working as intended.

History has been rewritten to put BOLT in the /bolt folder, as
opposed to /tools/llvm-bolt.

(cherry picked from FBD33289252)
2020-12-01 16:29:39 -08:00

1.6 KiB

Code Heatmaps

BOLT has gained the ability to print code heatmaps based on sampling-based LBR profiles generated by perf. The output is produced in colored ASCII to be displayed in a color-capable terminal. It looks something like this:

Heatmaps can be generated for BOLTed and non-BOLTed binaries. You can use them to compare the code layout before and after optimizations.

To generate a heatmap, start with running your app under perf:

$ perf record -e cycles:u -j any,u -- <executable with args>

or if you want to monitor the existing process(es):

$ perf record -e cycles:u -j any,u [-p PID|-a] -- sleep <interval>

Note that at the moment running with LBR (-j any,u or -b) is a requirement.

Once the run is complete, and perf.data is generated, run BOLT in a heatmap mode:

$ llvm-bolt heatmap -p perf.data <executable>

By default the heatmap will be dumped to stdout. You can change it with -o <heatmapfile> option. Each character/block in the heatmap shows the execution data accumulated for corresponding 64 bytes of code. You can change this granularity with a -block-size option. E.g. set it to 4096 to see code usage grouped by 4K pages. Other useful options are:

-line-size=<uint>   - number of entries per line (default 256)
-max-address=<uint> - maximum address considered valid for heatmap (default 4GB)

If you prefer to look at the data in a browser (or would like to share it that way), then you can use an HTML conversion tool. E.g.:

$ aha -b -f <heatmapfile> > <heatmapfile>.html