我在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顶部将有类似的输出。
发布于 2017-12-01 10:45:57
这是一个相当古老的问题,但我最近也遇到了类似的问题。在进行了一些研究之后,我已经确定了为什么您在分析来自主机的客户VM时获得未知符号的一些原因。
当你做一个
perf kvm --guest <guestkallsyms> <guestmodules> record -a
从主机上,客户机内核将生成PERF_RECORD_MMAPs和PERF_RECORD_FORK等记录,这些记录表明客户机二进制文件被映射到客户机内存和任何进程被分叉,随后被执行(使用PERF_RECORD_COMM). )
这些是由来宾上的内核生成的边带事件。在从主机进行记录时,主机显然无法访问用于记录此类PERF事件的来宾内核环缓冲区。请注意,这些边带事件在尝试标识上下文开关时会变得有用。
由来宾内核生成的任何这样的事件都将丢失给主机,因此主机将无法跟踪来宾二进制文件、被分叉的。这些[unknown symbols]表示主机明显丢失的来宾二进制文件。
可以尝试解决此问题的一种方法是在来宾和主机之间构建一个共享环缓冲区。这可能真的很复杂。另一种方法可以是以某种方式同步客户时钟和主机时钟,然后在来宾和主机上同时运行perf record -a。稍后,可以合并两个perf.data文件以获得最终结果。
请注意,由客户机上的硬件(而不是内核)生成的任何perf事件也将在主机上可用。(就像PERF_RECORD_SAMPLE).因此,这些事件的记录和后处理很可能会起作用。
https://stackoverflow.com/questions/20070393
复制相似问题