非阻塞缓存与 MSHR
更新时间:2026-10-01。简单缓存在 miss 时阻塞,非阻塞缓存能边等边服务,是现代性能关键。
本文要回答的问题
- MSHR 到底记录了什么?
- 为什么 MSHR 数量能限制性能?
一、命中-under-miss
一次 miss 后,缓存若能继续服务后续命中甚至发起更多 miss,就不会让整个核停摆。每个在途缺失在 MSHR 中登记(行地址、等待者、返回处理)。
二、miss 合并与 MLP
多个请求指向同一在途行时合并成一条 MSHR,返回后一并满足,省访存。MSHR 条目数决定同时在途的不同缺失数(MLP),耗尽时即使执行单元空闲也必须停。
三、常见坑
- 以为缓存一次只能处理一个 miss。
- 忽略 MSHR 耗尽造成的隐藏停顿。
- 同线多请求未合并浪费带宽。
小结
MSHR 让缓存支持命中/缺失并行与 miss 合并,条目数设定内存级并行上限,耗尽即瓶颈。下一篇 缓存 bank 与组冲突。
总结
缓存在一次 miss 时不必让整个核停住:每个在途缺失登记在 MSHR 中(行地址、等待者、返回处理),后续命中照常服务、新缺失照常发起(hit-under-miss),指向同一在途行的多个 miss 还会合并成一条、返回后一并满足;MSHR 条目数直接决定同时在途的不同缺失数即内存级并行 MLP 的上限,条目耗尽时即使执行单元空闲也只能停顿。乱序性能的隐形天花板常常不是算力而是 MSHR——想看穿"执行单元空闲却在等"的停顿,就查 MLP 和 MSHR 耗尽事件。