ubuntu 12.10 perf stat <不支持>周期

我使用的系统是ubuntu-12.10-desktop-amd64

我安装perf通过

apt-get install linux-tools linux-tools-common linux-tools-3.5.0-40 

当我使用perf list ,它按预期列出所有事件。 但是当我使用perf stat ,结果看起来不正常

 perf stat ls 

结果是:

  Performance counter stats for 'ls': 3.988508 task-clock # 0.678 CPUs utilized 172 context-switches # 0.043 M/sec 0 CPU-migrations # 0.000 K/sec 276 page-faults # 0.069 M/sec <not supported> cycles <not supported> stalled-cycles-frontend <not supported> stalled-cycles-backend <not supported> instructions <not supported> branches <not supported> branch-misses 0.005883014 seconds time elapsed 

为什么这些事件不被支持? 任何需要启用这些事件的操作?

你已经虚拟化了Ubuntu,硬件计数器(PMU / PMC MSR寄存器)没有被虚拟化。 Xen(或其他虚拟化软件)应该知道如何使用PMC寄存器,将它们模拟为guest,并将请求转发给真正的硬件。 我不知道它是在Xen中完成的。 但是,对于Amazon AWS EC2来说,仅需要几年时间才能实现基本的硬件事件(并且只能在专用实例上),而且只能在2017年5月完成: http : //www.brendangregg.com/blog/2017-05-04/the- pmcs-of-ec2.html “EC2的PMC:测量IPC”Brendan Gregg:

性能监控计数器(PMC)现在可以从AWS EC2云中的专用主机类型公开获得。 世界各地的PMC书呆子高兴! (我们六个人)…在这篇文章中,我将总结EC2中可用的PMC,这些PMC仅用于专用主机(例如,m4.16xl,i3.16xl),我将演示测量IPC。 请注意,PMC也被称为HPC(硬件性能计数器)以及其他名称。

他还解释了关于Xen以及为什么它们在罕见情况下启用:

这怎么可能在云端?

您可能想知道云客户如何阅读PMC。 它是这样工作的:PMC通过特权指令RDMSR和WRMSR进行配置(我在EC2的MSR中写的)和RDPMC进行管理。 特权指令导致由管理程序处理的客户退出。 然后,管理程序可以运行自己的代码,并在实际硬件允许的情况下配置PMC,并且在客户机之间进行上下文切换时保存并恢复其状态。

主流Xen在今年以前支持虚拟性能监控单元(vPMU)。 它在Xen引导行中使用vpmu=on进行配置。 但是,它很少打开。 为什么?

有数百个PMC,它们都暴露在vpmu = on。 可能会造成安全风险吗? 已经发表了许多论文,显示了PMC侧向信道攻击,即在向已知目标程序发送输入的同时测量某些PMC最终可能泄漏目标状态的比特。 虽然这些在实践中是不太可能的,并且这样的攻击不限于PMC(例如也有定时攻击),但是您可以理解不想在所有PMC默认启用的偏执安全策略。

所以,解决方案:

  • 在非虚拟化(本机,主机)Linux(Ubuntu或任何其他)上运行perf。
  • vpmu=on启用vpmu=on启用选项的情况下使用Xen(仅当您不将此虚拟机的虚拟客户机授予不可信用户)
  • 使用其他虚拟化解决方案与虚拟PMU。 一些基本的事件可以在Vmware中根据VirtualBox页面启用: https ://gist.github.com/dannas/1fa2cfb0d3d108282955“关于Virtualbox性能计数器的注意事项”pmun_notes.txt dannas(良好的评论)。 有些是KVM为客人模拟的: https : //stackoverflow.com/a/43460663

PS:旧的perf list没有检查任何东西,只是打印所有已知的事件,甚至不支持/未实现的hw事件。 而且它没有打印真正的CPU事件集。 libpfm4有表,并且有特定于Intel的perf封装器ocperf.py (github.com/andikleen/pmu-tools)来使用Intel特定的名称。