【发布时间】:2017-06-02 10:21:13
【问题描述】:
加载和运行内核模块,然后通过 perf 进行分析。
$perf record -a -g --call-graph dwarf sleep 30'
$perf report
性能报告中没有我的内核模块的符号。
虽然符号出现在/proc/kallsyms.
该模块也不存在于perf buildid-list
正如this 的回答所说,要使模块成为内核模块,我试过但没有帮助。
可能导致这种情况的原因是什么?
【问题讨论】:
-
您的模块是长时间计算某些东西还是调用计算时间长的东西?如果模块函数或某些通过模块函数解析为调用的函数中没有分析示例,则模块将不会在性能报告中显示任何内容。
-
我的函数确实运行了足够长的时间。我怎么知道?因为我从用户空间程序中运行了相同的函数,并在分析报告中看到了它的符号,并且占用了相当多的 CPU 时间。我想知道 perf 是否有某种方式无法访问我的外部内核模块的符号?
-
在获取导致问题的分析报告时是否会出现以下警告?
no symbols found in /sbin/dhclient, maybe install a debug package? no symbols found in /bin/kmod, maybe install a debug package? Failed to open [thrUserCtrl], continuing without symbols no symbols found in /usr/sbin/dnsmasq, maybe install a debug package? -
萨蒂,那么,模块本身有很长的功能吗?每个 dso 都有没有调试符号的消息,大多数是用户空间程序,但是“thrUserCtrl”是你的模块吗? Perf 找不到它,它是否安装到
/lib/modules/`uname -r`/extra(wiki.centos.org/HowTos/BuildingKernelModules) 中?你的内核版本是什么 (uname -a?) -
回答您的问题:是的,模块本身有很长的功能。是的 'thrUserCtrl' 是我的模块。不,我还没有安装我
in /lib/modules/uname -r/extra。内核版本是 - 3.13.0-32-generic。
标签: linux linux-kernel profiling perf