硬件事件和硬件caching事件在perf中有什么区别?

当我inputperf list命令,我发现有两种事件: Hardware eventHardware cache Event 。 两者有什么区别 ?

cache-missesLLC-misses之间有什么区别? caching未命中是否包含LLC未命中?

当我testing一个程序时, perf工具是否会降低总体性能?

问题2:如果我查看ARM内核代码(“arch / arm / kernel / perf_event_v7.c”)for perf

缓存未命中意味着ARMV7_PERFCTR_L1_DCACHE_REFILL这意味着第一级数据缓存未命中所以LLC可能意味着低级缓存未命中(可能是L3)

您可以查看特定于体系结构的内核代码ARMV7_PERFCTR_L1_DCACHE_REFILL具有什么值以及技术参考手册以了解该值的含义。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388i/BEHCCEAE.html

问题3:我相信perf从硬件寄存器中读取计数器(至少是硬件性能计数器),所以不会影响代码的性能。 因为它不会真的把你的代码中的代码钩子。 但是有些论文表示,如果在代码中使用perf,则会有5%的性能损失。

根据perf_event_open系统调用的手册页 (由perf用户级实用程序在内部使用):

  • 硬件事件:这表示内核提供的“广义”硬件事件之一
  • 硬件缓存事件:这表示硬件缓存事件。

更多的是,我想知道这是否与[英特尔®64和IA-32架构软件开发人员手册3B]中的所谓的非架构和架构事件有一些联系,即英特尔®64和IA-32架构软件开发人员手册3B 2 。

不管这个分类的确切含义如上,在前面的问题和我在上面提到的手册页中所述的cache-misses表示任何缓存都无法提供的内存访问的数量。 换言之,这意味着最后一级缓存中的缓存未命中的数量。 因此,我猜这和LLC-misses ,不幸的是,我不能确认在我的笔记本电脑上,因为LLC-misses不被支持。

关于你最后一个问题,性能监测的开销应该很低。 实际上,开销主要是由于读取计数器值,并使用perf stat我猜这个读取应该只在执行结束时执行一次(考虑到计数器不会溢出)