加载和运行内核模块,然后通过perf进行分析。
$perf record -a -g --call-graph dwarf sleep 30' $perf report
我的内核模块的符号不在perf的报告中。虽然/proc/kallsyms.中存在符号,但perf buildid-list中也不存在模块,因为this回答说,要使模块成为内核模块,我尝试了,但没有起到作用。导致这种情况的可能原因是什么?
发布于 2017-06-03 11:51:07
消息Failed to open [thrUserCtrl], continuing without symbols听起来像是perf无法找到您的模块。试着把它安装到
/lib/modules/`uname -r`/extra如https://wiki.centos.org/HowTos/BuildingKernelModules中所说的目录
[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函数返回错误时。
https://stackoverflow.com/questions/44326565
复制相似问题