perf事件文档

我已经search了由perf stat命令监视的每个事件的含义的详尽解释;

我find了一个教程 ,很好地解释了如何使用perf工具的不同function。 但是,这并不能解释可以观察到的几个事件的意义(而且有很多!!)。

有人知道哪里是一个相当简单和完整的文件有关perf列表命令列出的事件?

特别是,我有兴趣找出我写的一些应用程序使用的CPU的百分比。 我可以直接通过cpu时钟或任务时钟来测量它吗? 这两个事件的意义是什么?

提前致谢

perf工具使用性能计数器,其含义记载在处理器手册中。 对于英特尔处理器,这是英特尔®64和IA-32架构开发人员手册:卷。 3B,附录A.

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

有些复杂的事情是perf使用“符号”的名字。 这些名称和处理器事件类型之间的映射可以在内核源代码中找到。 对于英特尔处理器再次,这是在arch / x86 / kernel / cpu / perf_event_intel.c。

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/cpu/perf_event_intel.c?id=dea4f48a0a301b23c65af8e4fe8ccf360c272fbf#n2367

例如,perf事件“stalled-cycles-frontend”映射到

/* UOPS_ISSUED.STALLED_CYCLES */ intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = X86_CONFIG(.event=0x0e, .umask=0x01, .inv=1, .cmask=1); 

这被记录为

 Counts the number of cycles no Uops issued by the Register Allocation Table to the Reservation Station, ie the UOPs issued from the front end to the back end. 

有博客http://www.bnikolic.co.uk/blog/hpc-prof-events.html (“ 如何监视由Bojan Nikolic提供的全部CPU性能事件 ”)以及CPU事件列表和转换方法任何特定于CPU的事件名称(在供应商优化手册中使用)转换为原始的perf代码。 预定义的perf符号名称将只显示非常基本的信息,有时它们不会映射到任何实际的硬件事件。

Bojan Nikolic建议使用来自git://perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4的perfmon2 / libpfm工具/库,它具有CPU性能事件数据库(来自libpfm4示例的showevtinfo程序;它知道许多CPU及其所有事件以及一些描述),并将CPU的符号事件名称转换为可传递给原始事件的事件 – check_events (来自同一地点)。

还有另一种探索CPU特定事件的方法(但是只有Intel的CPU,从Nehalem开始 – 任何i3,i5,i7,任何32nm或更小,但不是Atom,或2008年以后生产的任何桌面cpu):英特尔的ocperf.py pmu-tools开源脚本集合以及perf ocperf.py python包装。 其作者Andi Kleen在这里描述了这个集合: “用于英特尔在perf之上的特定分析的pmu工具” ; 在http://github.com/andikleen/pmu-tools上托管,事件数据库支持并由Intel在01.org( https://download.01.org/perfmon )定期更新。

如果在CPU中实现, ocperf.py将接受来自英特尔优化手册 (64-ia-32-architectures-optimization-manual.pdf,内部编号:248966-029)的任何符号名称。

还有toplev.py -tools的半自动脚本toplev.py来调查CPU的哪个部分正在限制你的速度,然后在里面挖掘,以得到确切的原因。 它只适用于Sandy Bridge,Ivy Bridge,Haswell,以及未来的内核(任何i3,i5,i7都有4位数; 2011年之后生产的所有桌面cpus)。

您也可以检查来自Google的Gooda分析器: https : //github.com/David-Levinthal/gooda (代码:.google.com/p/gooda/),它有几个有用的pdf,如:

他们也有Gooda visualizer – https://github.com/David-Levinthal/gooda/tree/master/gooda-visualizer这将显示所有事件与JS GUI。 它就像一个基本的Vtune GUI的快速,易用,零成本克隆,带有交互式反汇编器和代码注释引擎。