加载中...
MESI是多核处理器中最经典的缓存一致性协议,通过为每个缓存行标记修改、独占、共享、无效四种状态,保证多个核心的私有缓存对同一内存地址看到一致的数据。它是理解多核并发与内存屏障的基础。

| 中文名 | MESI缓存一致性协议 |
| 四种状态 | M、E、S、I |
| 类别 | 缓存一致性协议 |
| 实现机制 | 总线嗅探 |
| 常见变体 | MOESI、MESIF |
MESI协议是一种缓存一致性协议,名字取自缓存行的四种状态首字母:Modified(已修改)、Exclusive(独占)、Shared(共享)、Invalid(无效)。它确保在多核系统中,各核心私有缓存里同一内存地址的副本保持一致。
现代CPU为每个核心配备私有的一级、二级缓存以加速访问。当多个核心同时缓存同一内存位置时,一个核心的写入必须让其他核心的旧副本失效或更新,否则会读到过时数据。MESI通过总线嗅探(bus snooping)监听其他核心的读写请求,并按状态机规则转换缓存行状态,从而在硬件层面维护一致性。
当一个核心要写入处于Shared状态的行时,会广播失效消息使其他副本变为Invalid,自己转为Modified。许多现代CPU使用其扩展变体MESIF或MOESI以减少内存写回。
MESI是理解并发编程性能问题的关键。多线程频繁写同一缓存行会引发缓存行来回失效,即伪共享(false sharing),严重拖慢程序。开发者常通过内存对齐、填充字节将频繁写的变量分散到不同缓存行来规避。它也是内存屏障与内存模型的硬件基础。
问:MESI能替代内存屏障吗?答:不能。MESI保证缓存最终一致,但由于存在写缓冲和乱序执行,程序仍需内存屏障来约束指令可见顺序。
问:什么是伪共享?答:两个无关变量恰好位于同一缓存行,不同核心分别频繁修改它们,导致缓存行不断失效互相争抢,性能急剧下降。

| 中文名 | MESI缓存一致性协议 |
| 四种状态 | M、E、S、I |
| 类别 | 缓存一致性协议 |
| 实现机制 | 总线嗅探 |
| 常见变体 | MOESI、MESIF |
登录 后参与讨论
暂无讨论,来发表第一条评论吧