MOSEI协议(转载,待整理)


文章转载自( http://blog.sina.com.cn/s/blog_6472c4cc0100qxcd.html)

Cache一致性协议之MOESI

MOESI协议引入了一个O(Owned)状态,并在MESI协议的基础上,进行了重新定义了S状态,而EMI状态和MESI协议的对应状态相同。

  •  O位。O位为1表示在当前Cache 行中包含的数据是当前处理器系统最新的数据拷贝,而且在其他CPU中一定具有该Cache行的副本,其他CPUCache行状态为S。如果主存储器的数据在多个CPUCache中都具有副本时,有且仅有一个CPUCache行状态为O,其他CPUCache行状态只能为S。与MESI协议中的S状态不同,状态为OCache行中的数据与存储器中的数据并不一致。
  •  S位。在MOESI协议中,S状态的定义发生了细微的变化。当一个Cache行状态为S时,其包含的数据并不一定与存储器一致。如果在其他CPUCache中不存在状态为O的副本时,该Cache行中的数据与存储器一致;如果在其他CPUCache中存在状态为O的副本时,Cache行中的数据与存储器不一致。


  • MOSEI协议(转载,待整理)_第1张图片

在一个处理器系统中,主设备(CPU或者外部设备)进行存储器访问时,将试图从存储器系统(主存储器或者其他CPUCache)中获得最新的数据拷贝。如果该主设备访问的数据没有在本地命中时,将从其他CPUCache中获取数据,如果这些数据仍然没有在其他CPUCache中命中,主存储器将提供数据。外设设备进行存储器访问时,也需要进行Cache共享一致性。

MOESI模型中,“Probe Read”表示主设备从其他CPU中获取数据拷贝的目的是为了读取数据;而“Probe Write”表示主设备从其他CPU中获取数据拷贝的目的是为了写入数据;“Read Hit”和“Write Hit”表示主设备在本地Cache中获得数据副本;“Read Miss”和“Write Miss”表示主设备没有在本地Cache中获得数据副本;“Probe Read Hit”和“Probe Write Hit”表示主设备在其他CPUCache中获得数据副本。

本节为简便起见,仅介绍CPU进行存储器写和与O状态相关的Cache行状态迁移,CPU进行存储器读的情况相对较为简单,请读者自行分析这个过程。

CPU对一段存储器进行写操作时,如果这些数据在本地Cache中命中时,其状态可能为ESM或者O

  •  状态为E或者M时,数据将直接写入到Cache中,并将状态改为M
  •  状态为S时,数据将直接写入到Cache中,并将状态改为M,同时其他CPU保存该数据副本的Cache行状态将从S或者O迁移到I(Probe Write Hit)
  •  状态为O时,数据将直接写入到Cache中,并将状态改为M,同时其他CPU保存该数据副本的Cache行状态将从S迁移到I(Probe Write Hit)

CPU A对一段存储器进行写操作时,如果这些数据没有在本地Cache中命中时,而在其他CPU,如CPU BCache中命中时,其状态可能为ESM或者O。其中CPU A使用CPU B在同一个Cache共享域中。

  •  Cache行状态为E时,CPU B将该Cache行状态改为I;而CPU A将从本地申请一新的个Cache行,将数据写入,并该Cache行状态更新为M
  •  Cache行状态为S时,CPU B将该Cache行状态改为I,而且具有同样副本的其他CPUCache行也需要将状态改为I;而CPU A将从本地申请一个Cache行,将数据写入,并该Cache行状态更新为M
  •  Cache行状态为M时,CPU B将原Cache行中的数据回写到主存储器,并将该Cache行状态改为I;而CPU A将从本地申请一个Cache行,将数据写入,并该Cache行状态更新为M
  •  Cache行状态为O时,CPU B将原Cache行中的数据回写到主存储器,并将该Cache行状态改为I,具有同样数据副本的其他CPUCache行也需要将状态从S更改为ICPU A将从本地申请一个Cache行,将数据写入,并该Cache行状态更新为M

Cache行状态可以从M迁移到O。例如当CPU A读取的数据从CPU B中命中时,如果在CPU BCache行的状态为M时,将迁移到O,同时CPU B将数据传送给CPU A新申请的Cache行中,而且CPU ACache行状态将被更改为S

CPU读取的数据在本地Cache中命中,而且Cache行状态为O时,数据将从本地Cache获得,并不会改变Cache行状态。如果CPU A读取的数据在其他Cache中命中,如在CPU BCache中命中而且其状态为O时,CPU B将该Cache行状态保持为O,同时CPU B将数据传送给CPU A新申请的Cache行中,而且CPU ACache行状态将被更改为S

在某些应用场合,使用MOESI协议将极大提高Cache的利用率,因为该协议引入了O状态,从而在发送Read Hit的情况时,不必将状态为MCache回写到主存储器,而是直接从一个CPUCache将数据传递到另外一个CPU。目前MOESI协议在AMDRMI公司的处理器中得到了广泛的应用。

Intel提出了另外一种MESI协议的变种,即MESIF协议,该协议与MOESI协议有较大的不同,也远比MOESI协议复杂,该协议由IntelQPI(QuickPath Interconnect)技术引入,其主要目的是解决“基于点到点的全互连处理器系统”的Cache共享一致性问题,而不是“基于共享总线的处理器系统”的Cache共享一致性问题。

在基于点到点互连的NUMA(Non-Uniform Memroy Architecture)处理器系统中,包含多个子处理器系统,这些子处理器系统由多个CPU组成。如果这个处理器系统需要进行全机Cache共享一致性,该处理器系统也被称为ccNUMA(Cache Cohenrent NUMA)处理器系统。MESIF协议主要解决ccNUMA处理器结构的Cache共享一致性问题,这种结构通常使用目录表,而不使用总线监听处理Cache的共享一致性。

MESIF协议引入了一个F(Forware)状态。在ccNUMA处理器系统中,可能在多个处理器的Cache中存在相同的数据副本,在这些数据副本中,只有一个Cache行的状态为F,其他Cache行的状态都为SCache行的状态位为F时,Cache中的数据与存储器一致。

当一个数据请求方读取这个数据副本时,只有状态为FCache行,可以将数据副本转发给数据请求方,而状态位为SCache不能转发数据副本。从而MESIF协议有效解决了在ccNUMA处理器结构中,所有状态位为SCache同时转发数据副本给数据请求方,而造成的数据拥塞。

ccNUMA处理器系统中,如果状态位为F的数据副本,被其他CPU拷贝时,F状态位将会被迁移,新建的数据副本的状态位将为F,而老的数据副本的状态位将改变为S。当状态位为FCache行被改写后,ccNUMA处理器系统需要首先Invalidate状态位为S其他的Cache行,之后将Cache行的状态更新为M

独立地研究MESIF协议并没有太大意义,该协议由Boxboro-EX处理器系统[1]引入,目前Intel并没有公开Boxboro-EX处理器系统的详细设计文档。MESIF协议仅是解决该处理器系统中Cache一致性的一个功能,该功能的详细实现与QPIProtocal Layer相关,QPI由多个层次组成,而Protocal LayerQPI的最高层。

MESIF协议QPI互连技术有兴趣的读者,可以在深入理解“基于目录表的Cache一致性协议”的基础上,阅读Robert A. Maddox, Gurbir Singh and Robert J. Safranek合著的书籍“Weaving High Performance Multiprocessor Fabric”以了解该协议的实现过程和与QPI互连技术相关的背景知识。

值得注意的是,MESIF协议解决主要的问题是ccNUMA架构中SMP子系统与SMP子系统之间Cache一致性。而在SMP处理器系统中,依然需要使用传统的MESI协议。Nehelem EX处理器也可以使用MOESI协议进一步优化SMP系统使用的Cache一致性协议,但是并没有使用该协议。

为简化起见,本章假设处理器系统使用MESI协议进行Cache共享一致性,而不是MOESI协议或者MESIF协议。



MOSEI协议(转载,待整理)_第2张图片

你可能感兴趣的:(其他,MOSEI,MSEI,多核架构,cache一致性)