我使用的系统是ubuntu-12.10-desktop-amd64
我通过
安装perfapt-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
为什么不支持这些活动?启用这些事件所需的任何操作?
答案 0 :(得分:2)
您已虚拟化Ubuntu,并且未虚拟化硬件计数器(PMU / PMC MSR寄存器)。 Xen(或其他虚拟化软件)应该知道如何使用PMC寄存器,为来宾模拟它们并将请求转发到真实硬件。我不知道它是在Xen中完成的。但对于亚马逊AWS EC2,仅花费数年才实现基本硬件事件(并且仅在专用实例上),它们仅在2017年5月完成:http://www.brendangregg.com/blog/2017-05-04/the-pmcs-of-ec2.html&#34; EC2的PMC:测量IPC&#34;作者:Brendan Gregg:
性能监控计数器(PMC)现在可从AWS EC2云中的专用主机类型公开获取。世界各地的PMC书呆子高兴! (我们所有六个人。)...... 在这篇文章中,我将总结EC2中可用的PMC,它们仅用于专用主机(例如,m4.16x1,i3.16xl),并且我将展示测量IPC。请注意,PMC也称为HPC(硬件性能计数器),以及其他名称。
他还解释了Xen以及在极少数情况下启用它们的原因:
这在云中怎么可能?
您可能想知道云客户如何阅读PMC。有用 像这样:PMC通过特权指令RDMSR和管理 配置的WRMSR(我在EC2的MSR中写过),以及 RDPMC用于阅读。特权指令会导致客户退出 由管理程序处理。管理程序然后可以运行自己的 代码,并配置PMC,如果实际硬件允许,并保存和 在客户端之间切换上下文时恢复其状态。
Xenstream的主流支持在今年推出了虚拟性能 监测单位(vPMU)。它在Xen引导中使用
vpmu=on
进行配置 线。但是,很少打开它。为什么呢?有数百个PMC,它们都暴露在vpmu = on。 有些人会冒安全隐患吗?已有多篇论文 公布了PMC侧通道攻击,其中测量一定 将输入发送到已知目标程序时,PMC最终会泄漏 目标状态的位。虽然这些在实践中不太可能,但是 此类攻击不仅限于PMC(例如,还有定时攻击), 你可以理解一个不想启用的偏执安全策略 默认情况下所有PMC。
所以,解决方案:
vpmu=on
启动选项时使用Xen(仅当您不将此PC的虚拟客户机提供给不受信任的用户时) PS:旧perf list
没有检查任何内容,它只是打印了所有已知事件,甚至没有支持/未实现的hw事件。它没有打印真实的CPU事件集。 libpfm4有表格,并且有特定于英特尔的perf wrapper ocperf.py github.com/andikleen/pmu-tools使用特定于英特尔的名称。