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