如何分析在 KVM 客户机中运行的应用程序

Posted

技术标签:

【中文标题】如何分析在 KVM 客户机中运行的应用程序【英文标题】:How to profile an app running inside KVM guest 【发布时间】:2015-04-24 12:08:29 【问题描述】:

有没有办法使用 perf_events 之类的工具来分析在 KVM 客户机中运行的应用程序?

我尝试过使用

perf kvm --guestkallsyms=.. --guestmodules=.. --guest record -a

但报告中的信息毫无用处:

# ========
#
# Samples: 627  of event 'cache-misses'
# Event count (approx.): 295421
#
# Overhead  Command     Shared Object                  Symbol
# ........  .......  ................  ......................
#
    73.18%   :15661  [x_tables]        [g] 0xffffffff8176bc80
    26.82%   :15661  [unknown]         [u] 0x00000000004004fe


#
# (For a higher level overview, try: perf report --sort comm,dso)
#

【问题讨论】:

【参考方案1】:

没有。

perf 工具在主机中运行,无法获取有关来宾中应用程序的信息。我认为将样本归属于来宾内核空间或来宾用户空间是基于采样时的 cpu 模式(而不是关于来宾正在做什么的更高级别的信息)。

您可以通过直接在来宾中运行 perf 来获取一些分析信息。使用perf list 查看选项(它们可能都在“软件”类别中)。

【讨论】:

【参考方案2】:

是的,你可能可以。主人可以看到客人。您可以使用原始硬件事件来执行此操作(只需检查系统上可用的事件编号)。 对我来说,这是一个例子:

sudo perf kvm stat -I 1000 -e r1a8 -a

(确保您在一段时间后关闭 KVM 机器并查看零点来监控来宾 ..)

【讨论】:

【参考方案3】:

是的, 怎么样

sudo perf kvm stat record  -p appPID

它应该在 perf kvm 的帮助下工作,但事实并非如此!它在系统范围模式下工作正常 -a

【讨论】:

它不起作用 - ***.com/questions/35997809 - 主机内核没有来宾内核的进程表。 (Kvm 客户也可能是非 linux 和非 unix:en.wikipedia.org/wiki/Kernel-based_Virtual_Machine "*各种各样的客户操作系统与 KVM 一起工作,包括 Linux、BSD、Solaris、Windows、Haiku、ReactOS、Plan 9 的许多风格和版本, ... *")

以上是关于如何分析在 KVM 客户机中运行的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何通过python创建kvm虚拟机

如何在 vmware esxi 虚拟机上运行 kvm

kvm如何让一个vcpu占用一个物理cpu

kvm_read_guest*函数分析

内存性能测试工具

如何在 KVM 虚拟机下在 Openstack 上运行 ESXi