在虚拟机中运行的 Linux 上的 oprofile

Posted

技术标签:

【中文标题】在虚拟机中运行的 Linux 上的 oprofile【英文标题】:oprofile on Linux running in a virtual machine 【发布时间】:2010-09-09 10:29:06 【问题描述】:

我正在使用 VirtualBox 运行 Linux Ubuntu 10.4 VM。我正在尝试使用 oprofile 来分析虚拟机中的某些应用程序。我已经安装了 oprofile 0.9.6,但我无法让它工作。当我尝试启动时,出现以下错误:

opcontrol --start
/usr/local/bin/opcontrol: line 323: /usr/local/bin/ophelp: cannot execute binary file
/usr/local/bin/opcontrol: line 1483: /usr/local/bin/oprofiled: cannot execute binary file
Couldn't start oprofiled.
Check the log file "/var/lib/oprofile/samples/oprofiled.log" and kernel syslog

由于我不确定 VirtualBox 是否可以提供对性能计数器的访问(我对此表示怀疑,所以如果您有任何指针,那就太好了)我默认 oprofile 为定时器中断,如下所示:

opcontrol --deinit
/usr/local/bin/opcontrol: line 323: /usr/local/bin/ophelp: cannot execute binary file
Unloading oprofile module
root@dev-ubuntu-10:/usr/local/bin# /sbin/modprobe oprofile timer=1
root@dev-ubuntu-10:/usr/local/bin# opcontrol --init

但仍然无法正常工作,我遇到了同样的错误。甚至可以在虚拟机中运行 oprofile 吗?

谢谢

【问题讨论】:

【参考方案1】:

我过去尝试过类似的方法,只是使用 VMware Fusion 和不同的分析器,但遇到了同样的问题。似乎访问性能寄存器和探查器所需的其他低级内容在 VM 中是不可行的。恐怕你需要一台真正的机器来进行分析。

【讨论】:

我原以为无法访问性能计数器,但我认为至少计时器中断应该对“虚拟化”系统可用。【参考方案2】:

这个错误:

/usr/local/bin/ophelp: cannot execute binary file

通常意味着您正在尝试在 32 位内核上执行 x86_64 二进制文件。

file usr/local/bin/ophelpuname -a 打印什么?

【讨论】:

【参考方案3】:

几年前,我在 vmware 中运行 oprofile 时遇到了一些问题。我在这个帖子上写了我的小经验http://blogs.epfl.ch/category/3239

【讨论】:

那么,在您的解决方案中,没有可用于访客系统的任何硬件计数器?并且系统定时器用于周期性的产生采样事件。 正确,vm 过滤掉那些寄存器。我认为这不是一件容易的事(即多路复用这些寄存器)。【参考方案4】:

您可以尝试安装旧版本,例如 oprofile-0.9.7

在任何地方解压,然后按照以下步骤操作:

install it by >  1 ./configure 2. make 3. make install

然后尝试使用它,它工作正常,您可能希望在 VMWARE 中打开虚拟 CPU 计数器并在 linux 中禁用 nmi_watchdog 寄存器,因为它们可能会被其他分析器使用。

【讨论】:

【参考方案5】:

使用HPC(硬件性能计数器)需要硬件支持,尝试在vbox中安装cpuid,你会看到

 Architecture Performance Monitoring Features (0xa/ebx):
  core cycle event not available           = false
  instruction retired event not available  = false
  reference cycles event not available     = false
  last-level cache ref event not available = false
  last-level cache miss event not avail    = false
  branch inst retired event not available  = false
  branch mispred retired event not avail   = false

架构性能监控功能 (0xa/edx): 固定计数器的数量 = 0x0 (0) 固定计数器的位宽 = 0x0 (0)

似乎只有 Vmware 和 KVM 可以模拟 PMU 单元,而不是 VBOX

【讨论】:

以上是关于在虚拟机中运行的 Linux 上的 oprofile的主要内容,如果未能解决你的问题,请参考以下文章

使用 perf_events/oprofile 在 Linux 上分析 JIT 的输出?

虚拟机中linux系统启动后 一直黑屏解决办法

我可以在虚拟机中运行 Docker 吗?

虚拟机中的Linux不能上网

安卓上的OProfile

给EXSI虚拟机中linux硬盘扩容