我使用相同的操作系统在kvm中运行虚拟机.
我想从主机端介绍来宾os.
所以我按照指导操作并执行以下步骤:
>从vm复制/ proc / modules和/ proc / kallsyms
> perf kvm –guest –guestmodules = guest-modules –guestkallsyms = guest-kallsyms record -a
> perf kvm –guest –guestmodules = guest-modules –guestkallsyms = guest-kallsyms report
但该报告的输出未知
97.33% [guest/17599] [unkNown] [g] 0xffffffff816d4470 2.67% [guest/17599] [unkNown] [u] 0x00007fe66f2f88fb
解决方法
当你这样做的时候
perf kvm –guest< guestkallsyms> < guestmodules>记录-a
来自主机,来宾内核将生成PERF_RECORD_MMAPs和PERF_RECORD_FORK等记录,这些记录指示将客户二进制文件映射到来宾内存以及正在分叉并随后被执行的任何进程(使用PERF_RECORD_COMM).
这些是内核在guest虚拟机上生成的边带事件.在从主机录制时,主机显然无法访问来宾内核环缓冲区以记录此类PERF事件.请注意,当尝试识别上下文切换时,这些边带事件后来变得有用.
客户内核生成的任何此类事件都将丢失给主机,因此主机将无法跟踪正在分叉和映射的来宾二进制文件.这些[未知符号]表示明显错过主机的来宾二进制文件.
可能尝试解决此问题的一种方法可能是在guest虚拟机和主机之间构建共享环缓冲区.这可能非常复杂.另一种方法可能是以某种方式同步客户机和主机时钟,然后同时在客户机和主机上运行perf记录-a.稍后可以合并两个perf.data文件以获得最终结果.
请注意,guest虚拟机上的硬件(而非内核)生成的任何perf事件也将在主机上可用..(如PERF_RECORD_SAMPLE).因此,使用这些事件进行记录和后处理可能会起作用.