Perf:内核模块符号未在分析中显示

时间:2017-06-02 10:21:14

标签: linux linux-kernel profiling perf

加载并运行内核模块,然后通过perf。

进行分析

$perf record -a -g --call-graph dwarf sleep 30' $perf report

我的内核模块的符号不在perf的报告中。 尽管符号出现在/proc/kallsyms.perf buildid-list中也没有该模块 正如this回答说使模块成为内核模块,我试过但没有帮助。 导致这种情况的可能原因是什么?

1 个答案:

答案 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__loadhttp://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函数返回错误时。