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 eventHardware cache Event。两者有什么区别?

cache-missesLLC-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中的硬件事件和硬件缓存事件有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Linux perf 事件:cpu-clock 和 task-clock - 有啥区别

为啥 perf 不报告缓存未命中?

用于缓存引用的 Linux perf 命令

硬件 - CPU 缓存 SRAM 与内存 DRAM 的区别

Linux内核性能架构:perf_event

perf-perf stat用户层代码分析