当我输入perf list
命令时,我发现有两种事件:Hardware event
和Hardware cache Event
。两者有什么区别 ?
cache-misses
和 和有什么不一样LLC-misses
?缓存未命中是否包括 LLC-misses ?
perf
当我测试程序时,工具会降低总体性能吗?
根据系统调用的手册页(用户级实用程序内部 使用): perf_event_open
perf
此外,我想知道这是否与 [英特尔® 64 和 IA-32 架构软件开发人员手册 3B]英特尔® 64 和 IA-32 架构软件开发人员手册 3B 2中所谓的非架构和架构事件有某种联系。
无论此分类的确切含义如何,cache-misses
如上一个问题和我上面提到的手册页中所述,表示任何缓存都无法提供的内存访问次数。换句话说,它意味着最后一级缓存中的缓存未命中数。因此,我猜这与 相同LLC-misses
,不幸的是我无法在我的笔记本电脑上确认,因为LLC-misses
不受支持。
关于您的最后一个问题,性能监控所产生的开销应该非常低。实际上,开销主要是由于读取计数器值,并且使用perf stat
我猜这个读取应该只在执行结束时进行一次(考虑到计数器不会溢出)
问题 2:如果我查看 ARM 内核代码 ("arch/arm/kernel/perf_event_v7.c") 的 perf
cache-misses 表示 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% 的性能损失。