二级缓存未命中是否等于;二级数据缓存重新填充“;在ARMv7 A15上?

二级缓存未命中是否等于;二级数据缓存重新填充“;在ARMv7 A15上?,arm,performancecounter,Arm,Performancecounter,我试图确定ARM Cortex A15处理器上可用的哪些硬件计数器是用于确定系统范围二级缓存未命中的正确计数器 我在这里的应用是一个内核级电压频率调节器(即,它可以替代ondemand调节器)。因为我需要在系统级别访问性能计数器,并且没有连接到特定的程序运行时,所以我没有使用现有的实用程序,例如PAPI或Linux的perf工具。从我过去使用这两种工具的经验中,我了解到它们更好地用于监视特定程序或插入指令的二进制文件的性能统计数据 我已经实现了一个内核模块,它定期更新几个硬件计数器值到sysfs

我试图确定ARM Cortex A15处理器上可用的哪些硬件计数器是用于确定系统范围二级缓存未命中的正确计数器

我在这里的应用是一个内核级电压频率调节器(即,它可以替代ondemand调节器)。因为我需要在系统级别访问性能计数器,并且没有连接到特定的程序运行时,所以我没有使用现有的实用程序,例如PAPI或Linux的perf工具。从我过去使用这两种工具的经验中,我了解到它们更好地用于监视特定程序或插入指令的二进制文件的性能统计数据

我已经实现了一个内核模块,它定期更新几个硬件计数器值到sysfs端点。我使用的资源包括:

  • 在perf和PAPI代码和文档中搜索,以查看L2未命中是否是派生计数器而不是本机计数器
我当前用于测量二级未命中的硬件计数器是事件0x17:“二级数据缓存重新填充”。即使在运行大量数据的基准测试时,打印此值也会始终为0。我是否应该使用其他事件或事件集来确定二级缓存未命中?可能是0x13,“数据内存访问”,或者是一些事件的组合

我的问题的根源很可能是对“二级数据缓存重新填充”的误解,但我无法通过文档和堆栈溢出搜索找到对此的澄清

编辑:我发现L2重新填充的读数为0,因为第五个硬件计数器由于某种原因无法正常工作;将L2重新填充重新分配到其他计数器已解决此特定问题


编辑2:第五个硬件计数器不起作用,因为我没有启用那么多。愚蠢的我。

我的问题是缓存重新填充是否一定意味着缓存未命中仍然存在。我的想法是肯定的,因为外部触发的缓存事件(如一致性逐出)不会计为重新填充,而是计为逐出。进一步考虑,当预取单元在访问缓存线之前引入缓存线时,可能会计为缓存重新填充。这不会是缓存丢失(事实上,希望可以防止缓存丢失)。那么,重新填充将是未命中的超集?