You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM Cortex-A15的L2缓存缺失是否等同于L2数据缓存填充?硬件计数器咨询

ARM Cortex-A15系统级L2缓存缺失统计:事件选择与误区解析

嘿,针对你在ARM Cortex-A15上开发内核级电压频率调控器时,统计系统级L2缓存缺失的问题,我来帮你理清楚关键点:

1. L2缓存缺失 ≠ L2数据缓存填充

你之前用的事件0x17(L2 Data Cache Refill)确实和L2数据缓存缺失强相关,但它只覆盖了数据路径的L2缺失。Cortex-A15的L2是统一指令/数据缓存,系统级的L2缓存缺失还包括指令路径的L2缺失——这类缺失会触发另一个独立事件:0x12(L2 Instruction Cache Refill)。

所以单独依赖0x17的话,你会漏掉所有指令在L2缓存未命中的情况,这也是为什么如果你的系统指令流量较大时,只统计0x17会和实际总L2缺失有明显差距。

2. 正确统计系统级L2缓存缺失的方案

要得到完整的系统级L2缓存缺失数,你需要组合两个事件的计数:

  • 启用一个通用性能计数器,配置事件0x12(L2 Instruction Cache Refill):统计指令路径的L2缺失
  • 启用另一个通用性能计数器,配置事件0x17(L2 Data Cache Refill):统计数据路径的L2缺失
  • 最终系统级总L2缓存缺失 = 指令填充计数 + 数据填充计数

关于事件0x13的说明

你提到的0x13(Data Memory Access)这个事件是统计所有数据内存访问操作(包括L2命中和缺失),它无法直接用来计算L2缺失——除非你同时统计L2数据命中事件(比如事件0x16:L2 Data Cache Access),再通过数据访问数 - 数据命中数 = 数据缺失数推导,但这种方式不如直接用0x17高效,因为0x17直接统计缺失后的填充操作,和数据缺失是一一对应的(包括预取操作带来的填充,这其实是合理的,因为预取也是源于潜在的缺失需求)。

3. 额外配置注意事项

  • 计数器启用:确保你启用了对应数量的性能计数器(Cortex-A15最多支持4个通用计数器+1个周期计数器),通过PMCNTENSET寄存器置位对应位来启用单个计数器,同时PMCR寄存器的E位(全局使能位)要置1。
  • 系统级监控模式:因为你需要的是系统级统计,要把计数器配置为全局监控模式——设置PMXEVTYPER寄存器的U(用户模式)和P(特权模式)位都为1,这样才能统计所有运行模式下的事件。

内容的提问来源于stack exchange,提问作者blancm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:50:35