我使用的系统是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默认启用的偏执安全策略。
所以,解决方案:
vpmu=on
启用vpmu=on
启用选项的情况下使用Xen(仅当您不将此虚拟机的虚拟客户机授予不可信用户) PS:旧的perf list
没有检查任何东西,只是打印所有已知的事件,甚至不支持/未实现的hw事件。 而且它没有打印真正的CPU事件集。 libpfm4有表,并且有特定于Intel的perf封装器ocperf.py (github.com/andikleen/pmu-tools)来使用Intel特定的名称。