当前位置: 首页 > news >正文

缓存一致性总线协议(Cache Coherence Protocols)的发展过程

缓存一致性总线协议(Cache Coherence Protocols)的发展过程

       摘要:本文详细介绍缓存一致性总线协议(Cache Coherence Protocols,基于总线的缓存一致性协议)的发展过程。这些协议主要用于多处理器系统(Multiprocessor Systems)中,确保多个处理器缓存中的数据与主内存保持一致,避免数据不一致导致的错误。协议的发展从简单到复杂,逐步优化性能、减少总线流量和提高并发性。

文章结构:

  • 发展过程概述:从2状态到更多状态的演进。
  • 每个协议的详细解释:包括状态含义、优点/缺点。
  • 状态转换图:为每个主要协议(MSI、MESI、MOESI)提供一个状态转换图,使用HTML+SVG生成(响应式,适应移动设备)。图中节点表示状态,箭头表示转换触发条件(如读/写、总线snoop)。

       这些协议通常基于snoopy总线(所有缓存监听总线事务),如MSI是基础,MESI是Intel常用,MOESI是AMD常用。发展受硬件复杂度、功耗和性能需求驱动。


一致性总线协议的发展过程

       缓存一致性协议的起源可以追溯到1970-1980年代的多处理器系统设计(如IBM System/370)。早期系统使用简单的写回(Write-Back)或写穿(Write-Through)策略,但随着多核兴起,需要更精细的协议来处理共享数据。

  • 2状态协议(早期,~1970s):最简单形式,如VI(Valid-Invalid)协议。起源于单处理器缓存,扩展到多处理器以处理基本一致性。简单但效率低,总线流量高。典型代表:Write-Invalidate协议。
  • 3状态协议(1980s):如MSI(Modified-Shared-Invalid),由James Goodman在1983年提出(Synapse N+1系统)。引入Modified状态,减少写操作的总线广播。标志着从简单无效化到状态机的转变。
  • 4状态协议(1980s-1990s):如MESI(Illinois协议),由Papamarcos和Patel在1984年提出,用于Illinois多处理器。添加Exclusive状态,优化读操作(减少共享广播)。Intel Pentium时代广泛采用。
  • 5状态协议(1990s):如MOESI,由Sweazey和Smith在1988年提出,AMD在Opteron处理器中使用。添加Owned状态,支持“脏共享”(dirty sharing),减少内存访问。适用于大规模多核。
  • 更多状态协议(2000s至今):扩展如MESIF(Intel,2002年添加Forward状态,优化转发);MOSI(类似MSI但添加Owned);Dragon协议(4状态,添加Update状态,支持写更新而非无效化)。近年来,协议向目录-based(Directory-Based)或无snoopy(如TSO.cc)演进,以支持大规模NUMA系统。发展驱动因素:多核爆炸(Moore定律)、功耗优化和云计算需求。

       总体趋势:状态数增加以细化权限(读/写/共享),减少总线流量和延迟。但更多状态增加硬件复杂度(状态机更大)。


各个协议的状态含义和详细解释

以下按状态数分类解释。每个状态表示缓存行(cache line)的权限和一致性:

  • 触发转换:由本地处理器操作(PrRd=处理器读, PrWr=处理器写)和总线snoop(BusRd=总线读, BusRdX=总线独占读, BusWB=总线写回)引起。

2状态协议(e.g., VI: Valid-Invalid)

  • 状态含义
    • Valid (V):缓存行有效,可读/写。本地修改需广播无效化其他缓存。
    • Invalid (I):缓存行无效(脏或已失效)。需从内存/其他缓存获取。
  • 优点:简单,实现成本低。
  • 缺点:高总线流量(每写都无效化所有),无共享优化。
  • 应用:早期嵌入式系统或简单多核。

3状态协议(MSI: Modified-Shared-Invalid)

  • 状态含义
    • Modified (M):缓存行已修改,独占(唯一副本)。可读/写,写回内存时转换。
    • Shared (S):缓存行干净,共享(多缓存有相同副本)。可读,但写需先无效化其他(获取独占)。
    • Invalid (I):无效。读需从内存/其他缓存获取。
  • 优点:引入共享,减少读广播;Modified优化写性能。
  • 缺点:写时总需广播无效化,流量较高。
  • 应用:基础多处理器,如早期SPARC系统。

4状态协议(MESI: Modified-Exclusive-Shared-Invalid)

  • 状态含义
    • Modified (M):已修改,独占。
    • Exclusive (E):干净,独占(唯一副本)。可无声转换为M(本地写无需广播)。
    • Shared (S):干净,共享。
    • Invalid (I):无效。
  • 优点:Exclusive优化首次写(silent upgrade),减少总线流量10-20%。
  • 缺点:仍需广播写无效化;无脏共享支持。
  • 应用:Intel x86处理器(如Pentium)。

5状态协议(MOESI: Modified-Owned-Exclusive-Shared-Invalid)

  • 状态含义
    • Modified (M):已修改,独占。
    • Owned (O):已修改,共享("脏共享")。该缓存负责响应其他读请求(而非内存),减少内存访问。
    • Exclusive (E):干净,独占。
    • Shared (S):干净,共享。
    • Invalid (I):无效。
  • 优点:Owned状态允许脏数据共享,减少内存带宽使用(尤其在读多写少场景)。
  • 缺点:更复杂的状态机,潜在死锁风险增加。
  • 应用:AMD Opteron、现代多核SoC。

更多状态协议

  • MESIF (Modified-Exclusive-Shared-Invalid-Forward, 5状态):Intel扩展(2002)。添加Forward (F):干净,共享,但负责转发数据(优化共享读)。
    • 优点:减少总线争用。
    • 应用:Intel Nehalem处理器。
  • MOSI (Modified-Owned-Shared-Invalid, 4状态):MOESI的简化,无Exclusive。
    • 优点:平衡复杂度。
  • Dragon协议 (4状态: Exclusive, Shared Clean, Shared Modified, Modified):Firefly项目(1984)。使用写更新(update)而非无效化。
    • Shared Modified (Sc):类似Owned。
    • 优点:减少无效化流量,但增加更新广播。
    • 应用:早期研究系统。
  • 进一步发展(6+状态):如Berkeley协议(添加更多过渡状态);现代如RISC-V的TileLink(目录-based,非总线);或MOESIF(结合MOESI和MESIF)。趋势:从snoopy到目录协议,支持100+核系统,减少广播开销。
http://www.dtcms.com/a/334293.html

相关文章:

  • LangChain4j:基于 SSE 与 Flux 的 AI 流式对话实现方案
  • Honor of Kings 100star (S40) 2025.08.16
  • 11-verilog的RTC驱动代码
  • 10-verilog的EEPROM驱动-单字节读写
  • OpenCV安装及配置
  • 机器学习核心概念精要:从定义到评估
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践222
  • 利用 Java 爬虫按图搜索淘宝商品(拍立淘)实战指南
  • AirReceiverLite:轻松实现手机隔空投屏
  • [typescript] interface和type有什么关系?
  • Spark 数据分发性能深度剖析:mapPartitions vs. UDF – 你该选择哪一个?
  • 矩阵链相乘的最少乘法次数(动态规划解法)
  • KVM虚拟化技术解析:从企业应用到个人创新的开源力量
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • AutoDL使用学习
  • 第二十八节 业务代表模式
  • Custom SRP - Baked Light
  • tree组件(几种不同分叉树Vue3)
  • Qt QDateTime时间部分显示为全0,QTime赋值后显示无效问题【已解决】
  • 从零开始大模型之实现GPT模型
  • 黑板架构详解
  • Wi-Fi 7 将如何重塑互联工作场所
  • 链式二叉树的基本操作——遍历
  • 《从入门到高可用:2025最新MySQL 8.0全栈速通指南》
  • docker-compose-mysql-定时备份数据库到其他服务器脚本
  • SpringBoot 集成Ollama 本地大模型
  • mysql的group by函数怎么使用
  • Java内功修炼(1)——时光机中的并发革命:从单任务到Java多线程
  • [Linux] Linux文件系统基本管理
  • 基于STM32的精确按键时长测量系统