7

我使用的系统是 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

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

4

1 回答 1

3

你已经虚拟化了 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 Brendan Gregg 的“EC2 的 PMC:衡量 IPC”:

性能监控计数器 (PMC) 现在可从 AWS EC2 云中的专用主机类型公开获得。全世界的 PMC 书呆子们欢欣鼓舞!(我们六个人。)... 在这篇文章中,我将总结 EC2 中可用的 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。
  • 在启用引导选项的情况下使用 Xen vpmu=on(仅当您不将此 PC 的虚拟访客提供给不受信任的用户时)
  • 使用带有虚拟化 PMU 的其他虚拟化解决方案。根据 VirtualBox 页面,可以在 Vmware 中启用一些基本事件:https : //gist.github.com/dannas/1fa2cfb0d3d108282955 dannas 的“关于 Virtualbox 性能计数器的说明”pmu_notes.txt(好评)。KVM 为客人模拟了一些:https ://stackoverflow.com/a/43460663

PS:oldperf list没有检查任何东西,它只是打印了所有已知的事件,甚至不支持/未实现的硬件事件。而且它没有打印真正的 CPU 事件集。libpfm4 有表格,并且有 github.com/andikleen/pmu-tools 的英特尔特定性能包装器ocperf.py 以使用英特尔特定名称。

于 2017-05-30T03:52:38.607 回答