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

7
当我输入perf list命令时,我发现有两种类型的事件:Hardware eventHardware cache Event。这两种事件有何区别? cache-missesLLC-misses之间有什么区别?Cache misses是否包括LLC-misses?
当我测试一个程序时,perf工具会减少总体性能吗?
2个回答

2
根据perf用户级工具内部使用的perf_event_open系统调用的man页:
  • 硬件事件:这表示内核提供的“通用”硬件事件之一
  • 硬件缓存事件:这表示硬件缓存事件。
此外,我想知道这是否与Intel® 64和IA-32体系结构软件开发人员手册3B中所称的非体系结构和体系结构事件有关。man page2 无论这个分类的确切含义如何,如前一个问题中所述(在此之前)以及我上面提到的 man 手册中,cache-misses 表示未能被任何缓存服务的内存访问数量。换句话说,它表示最后一级缓存中的缓存未命中次数。因此,我猜想这与 LLC-misses 相同,但不幸的是,由于我的笔记本不支持 LLC-misses,我无法确认这一点。
关于您最后的问题,性能监测产生的开销应该非常低。实际上,开销主要是由于读取计数器值造成的,使用 perf stat,我认为这个读取只需要在执行结束时进行一次(假设计数器不会溢出)。

1

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

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从硬件寄存器中读取计数器(至少对于HW性能计数器),因此不会真正影响您的代码性能。 因为它不会在您的代码中放置代码钩子。 但是有些论文说,如果您在代码中使用perf,则会有5%的性能损失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接