tcg: add perfmap and jitdump

Add ability to dump /tmp/perf-<pid>.map and jit-<pid>.dump.
The first one allows the perf tool to map samples to each individual
translation block. The second one adds the ability to resolve symbol
names, line numbers and inspect JITed code.

Example of use:

    perf record qemu-x86_64 -perfmap ./a.out
    perf report

or

    perf record -k 1 qemu-x86_64 -jitdump ./a.out
    DEBUGINFOD_URLS= perf inject -j -i perf.data -o perf.data.jitted
    perf report -i perf.data.jitted

Co-developed-by: Vanderson M. do Rosario <vandersonmr2@gmail.com>
Co-developed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20230112152013.125680-4-iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Ilya Leoshkevich 2023-01-12 16:20:13 +01:00 committed by Richard Henderson
parent 7c10cb38cc
commit 5584e2dbe8
10 changed files with 505 additions and 0 deletions

View file

@ -188,3 +188,26 @@ memory areas instead calls out to C code for device emulation.
Finally, the MMU helps tracking dirty pages and pages pointed to by
translation blocks.
Profiling JITted code
---------------------
The Linux ``perf`` tool will treat all JITted code as a single block as
unlike the main code it can't use debug information to link individual
program counter samples with larger functions. To overcome this
limitation you can use the ``-perfmap`` or the ``-jitdump`` option to generate
map files. ``-perfmap`` is lightweight and produces only guest-host mappings.
``-jitdump`` additionally saves JITed code and guest debug information (if
available); its output needs to be integrated with the ``perf.data`` file
before the final report can be viewed.
.. code::
perf record $QEMU -perfmap $REMAINING_ARGS
perf report
perf record -k 1 $QEMU -jitdump $REMAINING_ARGS
DEBUGINFOD_URLS= perf inject -j -i perf.data -o perf.data.jitted
perf report -i perf.data.jitted
Note that qemu-system generates mappings only for ``-kernel`` files in ELF
format.