perf中的硬件事件和硬件缓存事件有啥区别?
Posted
技术标签:
【中文标题】perf中的硬件事件和硬件缓存事件有啥区别?【英文标题】:What's the difference between hardware Event and hardware cache Event in perf?perf中的硬件事件和硬件缓存事件有什么区别? 【发布时间】:2012-12-17 04:47:42 【问题描述】:当我输入perf list
命令时,我发现有两种事件:Hardware event
和Hardware cache Event
。两者有什么区别?
cache-misses
和 LLC-misses
有什么区别?缓存未命中是否包括 LLC 未命中?
perf
工具在我测试程序时会降低总体性能吗?
【问题讨论】:
【参考方案1】:根据perf_event_open
系统调用的man page(perf
用户级实用程序内部使用):
此外,我想知道这是否与 [英特尔® 64 和 IA-32 架构软件开发人员手册 3B]英特尔® 64 和 IA-32 架构软件开发人员手册 3B 中所谓的非架构和架构事件有某种联系@ 987654322@。
不管这个分类的确切含义如何,cache-misses
和上面提到的手册页中提到的cache-misses
表示任何缓存都无法提供的内存访问次数。换句话说,它意味着最后一级缓存中的缓存未命中数。因此,我猜这与LLC-misses
相同,不幸的是我无法在我的笔记本电脑上确认这一点,因为不支持LLC-misses
。
关于您的最后一个问题,性能监控所产生的开销应该非常低。实际上,开销主要是由于读取计数器值,并且使用perf stat
我猜这个读取应该只在执行结束时进行一次(考虑到计数器不会溢出)
【讨论】:
【参考方案2】:问题 2: 如果我查看 ARM 内核代码(“arch/arm/kernel/perf_event_v7.c”)的性能
cache-misses 表示 ARMV7_PERFCTR_L1_DCACHE_REFILL 表示一级数据缓存未命中 所以 LLC 可能意味着 Low level Cache misses(可能是 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中的硬件事件和硬件缓存事件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Ehcache中的“缓存未命中”和“内存缓存未命中”有啥区别?