我在ubuntu 13.04 servier中使用perf。内核3.8.0-19-通用。 我使用相同的操作系统在kvm中运行虚拟机。
我想从主机端介绍来宾操作系统。 所以我按照指导操作并执行以下步骤:
但报告的输出未知
97.33% [guest/17599] [unknown] [g] 0xffffffff816d4470
2.67% [guest/17599] [unknown] [u] 0x00007fe66f2f88fb
为什么输出未知?使用perf kvm top将具有类似的输出。
答案 0 :(得分:0)
这已经很老了,但最近我遇到了类似的问题。在做了一些研究之后,我已经确定了在从主机中分析来宾VM时获得[未知]符号的一些原因。
当你做
时 perf kvm --guest <guestkallsyms> <guestmodules> record -a
来自主机,来宾内核将生成 PERF_RECORD_MMAPs 和 PERF_RECORD_FORK 等记录,这些记录表明将来宾二进制文件映射到来宾内存以及正在分叉并随后进行的任何进程exec'd(使用 PERF_RECORD_COMM )。
这些是内核在guest虚拟机上生成的边带事件。在从主机录制时,主机显然无法访问来宾内核环缓冲区以记录此类PERF事件。请注意,当人们尝试识别上下文切换时,这些边带事件随后会变得有用。
由来宾内核生成的任何此类事件都将丢失给主机,因此主机将无法跟踪正在分叉和映射的来宾二进制文件。这些[unknown symbols]
代表明显错过主机的来宾二进制文件。
可能尝试解决此问题的一种方法可能是在guest虚拟机和主机之间构建共享环缓冲区。这可能非常复杂。另一种方法可能是以某种方式同步客户机和主机时钟,然后同时在客户机和主机上运行perf record -a
。之后,可以合并两个perf.data
文件以获得最终结果。
请注意,guest虚拟机上的硬件(非内核)生成的任何perf
事件也可在主机上使用..(例如 PERF_RECORD_SAMPLE )。因此,使用这些事件进行录制和后处理可能会有效。