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

关于L1缓存miss rate计算逻辑的误解与perf实测矛盾的疑问

关于L1缓存miss率的误解纠正

你的核心错误是误解了缓存命中/未命中的计数逻辑,以及perf工具的统计规则,具体拆解如下:

1. 缓存请求的计数逻辑并非“miss后必加hit”

当CPU发起一次加载请求时,流程是这样的:

  • 若L1缓存命中:直接返回数据,本次请求计为1次hit,流程结束,没有“再次检查L1”的步骤。
  • 若L1缓存未命中:本次请求计为1次miss,随后CPU会从L2/L3/内存获取数据,并将数据加载到L1缓存(符合缓存替换策略的前提下)。但这次加载请求本身的计数就是miss,不会因为数据被写入L1就额外生成一次hit——只有后续再次访问该数据时,才会产生hit。

你假设的“miss后必有hit”只在“同一份数据被至少访问两次”的场景下成立,但实际程序中很多数据只会被访问一次,这时候就只有miss,没有对应的hit。

2. perf工具的统计规则

perf中计算L1缓存miss率的两个关键事件是:

  • L1-dcache-loads:CPU发起的所有L1数据加载请求总数
  • L1-dcache-load-misses:其中未命中L1缓存的请求数

miss率的计算公式就是:

miss_rate = L1-dcache-load-misses / L1-dcache-loads

完全是单次请求的结果统计,不存在“miss和hit绑定”的逻辑。

3. 为什么miss率会超过50%?

举两个典型场景:

  • 遍历超大规模数组:当数组容量远大于L1缓存时,每次访问的缓存行都是新的,几乎所有加载请求都会L1 miss,miss率接近100%。
  • 随机内存访问:程序随机访问内存地址,大部分目标数据不在L1缓存中,此时miss率会远高于50%。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:57:26