我正在尝试确定ARM Cortex A15处理器上可用的哪些硬件计数器是用于确定系统范围的L2缓存未命中的正确计数器。
我的应用程序是内核级电压频率调控器(即它可以替代ondemand调控器)。因为我需要在系统级访问性能计数器而不是连接到特定的程序运行时,所以我没有使用现有的实用程序,如PAPI或Linux的perf工具。根据我过去的经验,我了解这些更好地用于监控特定程序或检测二进制文件的性能统计数据。
我已经实现了一个内核模块,可以定期将几个硬件计数器值更新到sysfs端点。我使用的资源包括:
我目前用来测量L2未命中的硬件计数器是事件0x17:“L2数据缓存重新填充”。即使在运行数据量很大的基准测试时,也始终打印此值为0。是否存在我应该用于确定L2缓存未命中的不同事件或事件集?也许0x13,“数据存储器访问”,或某些事件的复合?
我的问题的根源很可能是对“L2数据缓存重新填充”的误解,但我无法通过文档和堆栈溢出搜索找到对此的澄清。
编辑:我发现L2笔芯读数为0,因为第5个硬件计数器由于某种原因没有按预期工作;将L2替换重新分配到不同的计数器已解决了这个特定问题。
编辑2:第5个硬件计数器不起作用,因为我没有启用那么多。傻我。