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