加载并运行内核模块,然后通过perf。
进行分析 $perf record -a -g --call-graph dwarf sleep 30'
$perf report
我的内核模块的符号不在perf的报告中。
尽管符号出现在/proc/kallsyms.
中
perf buildid-list
中也没有该模块
正如this回答说使模块成为内核模块,我试过但没有帮助。
导致这种情况的可能原因是什么?
答案 0 :(得分:0)
消息Failed to open [thrUserCtrl], continuing without symbols
听起来像是无法找到您的模块。尝试将其安装到
/lib/modules/`uname -r`/extra
目录,如https://wiki.centos.org/HowTos/BuildingKernelModules中所述:
6. In this example, the file cifs.ko has just been created. As root, copy the .ko file to the /lib/modules/<kernel-version>/extra/ directory.
[root@host linux-2.6.18.i686]# cp fs/cifs/cifs.ko /lib/modules/`uname -r`/extra
(更改depmod -a
)
/lib/modules
命令
此消息在map__load
:http://elixir.free-electrons.com/linux/v4.11/source/tools/perf/util/map.c#L284
int map__load(struct map *map)
{
const char *name = map->dso->long_name;
int nr;
...
nr = dso__load(map->dso, map);
if (nr < 0) {
if (map->dso->has_build_id) {
...
} else
pr_warning("Failed to open %s", name);
pr_warning(", continuing without symbols\n");
return -1;
当dso__load
函数返回错误时。