[PATCHSET/RFC 0/9] perf tools: Support out-of-tree modules

From: Namhyung Kim
Date: Fri Jun 23 2017 - 01:50:34 EST


Currently perf loads modules only in the canonical directory
(/lib/modules/`uname -r`/). But in some situation users want to use
local or out-of-tree modules which are not placed in the directory.

One example is developing kernel in a qemu environment. In this case,
guest doesn't see vmlinux or modules but one can load a module in some
directory which was copied separately. During the development, the
module can be unloaded, fixed and reloaded more than once.

I notice that perf uses symbols in /proc/kallsyms (and /proc/kcore)
and it sometimes shows different result with a same data file. This
was due to a same module being loaded at a different address or a
reworked module being loaded at a same address.

I think it needs to use build-id cache if possible. To do that we
need to add an option to search modules and to save them in the
build-id cache automatically.

The code is available on 'perf/kmod-dir-v1' branch at



Namhyung Kim (9):
perf symbols: Use absolute address to fixup map address
perf tools: Remove duplicate code
perf symbols: Discard symbols in kallsyms for loaded modules
perf symbols: Load kernel module symbols ASAP
perf symbols: Fixup the end address of kernel map properly
perf symbols: Use already loaded module dso when loading kcore
perf tools: Add symbol_conf.use_kcore
perf record: Not use kcore by default
perf record: Add --module-dir option

tools/perf/Documentation/perf-record.txt | 6 ++++
tools/perf/builtin-record.c | 7 ++++
tools/perf/perf-with-kcore.sh | 1 +
tools/perf/util/machine.c | 33 ++++++++---------
tools/perf/util/map.c | 4 +--
tools/perf/util/symbol.c | 61 +++++++++++++++++---------------
tools/perf/util/symbol.h | 6 ++--
7 files changed, 69 insertions(+), 49 deletions(-)