在虚拟机中运行的 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/ophelp
和 uname -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的主要内容,如果未能解决你的问题,请参考以下文章