39 lines
1.3 KiB
ReStructuredText
39 lines
1.3 KiB
ReStructuredText
.. _profiling-perf:
|
|
|
|
Perf
|
|
####
|
|
|
|
Perf is a profiler tool based on stack tracing. It can be used for lightweight profiling
|
|
with minimal code overhead.
|
|
|
|
Work Principle
|
|
**************
|
|
|
|
The ``perf record`` shell command starts a timer with the perf tracer function.
|
|
Timers are driven by interrupts, so the perf tracer function is called during an interruption.
|
|
The Zephyr core saves the return address and frame pointer in the interrupt stack or ``callee_saved``
|
|
structure before calling the interrupt handler. Thus, the perf trace function makes stack traces by
|
|
using the return address and frame pointer.
|
|
|
|
The :zephyr_file:`scripts/profiling/stackcollapse.py` script can be used to convert return addresses
|
|
in the stack trace to function names using symbols from the ELF file, and to prints them in the
|
|
format expected by `FlameGraph`_.
|
|
|
|
Configuration
|
|
*************
|
|
|
|
You can configure this module using the following options:
|
|
|
|
* :kconfig:option:`CONFIG_PROFILING_PERF`: Enables the module. This option adds
|
|
the ``perf`` command to the shell.
|
|
|
|
* :kconfig:option:`CONFIG_PROFILING_PERF_BUFFER_SIZE`: Sets the size of the perf buffer
|
|
where samples are saved before printing.
|
|
|
|
Usage
|
|
*****
|
|
|
|
Refer to the :zephyr:code-sample:`profiling-perf` sample for an example of how to use the perf tool.
|
|
|
|
.. _FlameGraph: https://github.com/brendangregg/FlameGraph/
|