blob: 610af2441f255d2689ccb9c0c5b95fab4c17890c [file] [log] [blame]
= Perf Profiling =
This feature applies to Linux perf traces converted to CTF using the perf builtin converter.
== Obtain the trace ==
The perf trace is converted to CTF after having been recorded. The trace data is thus obtained by a normal ''perf record [argument]'' command. After the recording is finished, the perf.data file can be converted to CTF using the following command:
perf data convert --all --to-ctf ./ctf-data/
Where ''./ctf-data/'' is the folder in which the CTF files will be saved. The --all argument means ensures that events like mmap[2] are included in the trace. Those will allow to resolve the symbols to at least the library that contains them when reading the trace.
'''Note''': ''Not all Linux distributions have the ctf conversion builtin. One needs to compile perf (thus linux) with environment variables LIBBABELTRACE=1 and LIBBABELTRACE_DIR=/path/to/libbabeltrace to enable that support.''
To resolve the kernel symbols of the callchains and samples, the kernel symbols are needed. They can be obtained with the following command:
cat /proc/kallsyms > mykallsymsfile
Note that to avoid symbols with low addresses resolving to the default, the 00000000 lines should be removed from the ''kallsymsfile'', that is usually the first 2 lines of the file.
== Analyzing perf sampling ==
The perf CTF trace can be obtained in Trace Compass, it should be recognized as a perf trace. If it is not, you can right-click on the trace and choose the ''Select trace type...'' -> ''Common Trace Format'' -> ''Perf 2 CTF trace'' menu item.
If the trace contains the scheduling/process/irq events, then all the views that applies to a kernel trace should be available (Control Flow View, Resources view, CPU Usage, etc)
If the trace contains perf sampling events (event name contains ''cycles''), then a flamegraph can be built for that trace. It is available under ''Perf sampling''.
[[Image:images/PerfSampling.png]]
In order to have the symbol resolved to their names, the symbols in libraries should be available if the mmap[2] events are in the trace (the --all argument should have been used when converting). To resolve the kernel symbols, the mapping file should be added to the trace. By right-clicking the trace and selecting ''Configure symbols'' menu item, the symbol files can be added, ie the kallsyms file and any other file containing symbol mapping. For example, if tracing a java application with the [https://github.com/jvm-profiling-tools/perf-map-agent perf-map-agent project], the .map file contains symbols that can be resolved.
[[Image:images/PerfConfigureSymbols.png]]
The resulting flamegraph data is grouped by thread by default, but can also be grouped globally or per process.
[[Image:images/PerfFlameGraph.png]]