ubuntu 12.10 perf stat <不支持>周期

use*_*663 6 xen virtualization ubuntu perf

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

我安装穿孔

apt-get install linux-tools linux-tools-common linux-tools-3.5.0-40
Run Code Online (Sandbox Code Playgroud)

当我使用时perf list,它按预期列出所有事件.但是当我使用时perf stat,结果似乎异常

perf stat ls
Run Code Online (Sandbox Code Playgroud)

结果是:

 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
Run Code Online (Sandbox Code Playgroud)

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

osg*_*sgx 4

您已虚拟化 Ubuntu,但硬件计数器(PMU/PMC MSR 寄存器)未虚拟化。Xen(或其他虚拟化软件)应该知道如何使用 PMC 寄存器,为来宾模拟它们并将请求转发到真实硬件。我不知道它是否在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) 提供了支持。vpmu=on它是在 Xen 引导行中使用配置的。然而,它很少被打开。为什么?

PMC 有数百个,并且都以 vpmu=on 的方式暴露。有些会带来安全风险吗?已经发表的许多论文都展示了 PMC 旁道攻击,即在向已知目标程序发送输入的同时测量某些 PMC,最终可能会泄露目标状态的一些信息。虽然这些在实践中不太可能发生,并且此类攻击不仅限于 PMC(例如,还有定时攻击),但您可以理解偏执的安全策略不希望默认启用所有 PMC。

所以,解决方案:

  • 在非虚拟化(本机、主机)Linux(Ubuntu 或任何其他)上运行 perf。
  • 使用vpmu=on启用启动选项的 Xen(仅当您不将此 PC 的虚拟访客提供给不受信任的用户时)
  • 使用具有虚拟化 PMU 的其他虚拟化解决方案。根据 VirtualBox 页面,可以在 Vmware 中启用一些基本事件: https: //gist.github.com/dannas/1fa2cfb0d3d108282955 dannas 的“关于 Virtualbox 性能计数器的注释”pmu_notes.txt(很好的评论)。有些是由 KVM 为来宾模拟的:/sf/answers/3042246441/

PS:旧的perf list没有检查任何内容,它只是打印所有已知的事件,甚至不支持/未实现的硬件事件。并且它没有打印真实的 CPU 事件集。libpfm4 有表格,并且 github.com/andikleen/pmu-tools 中有 Intel 特定的性能包装器 ocperf.py来使用 Intel 特定的名称。