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