MSI协议

科技工作者之家 2020-11-17

监听一致性协议通过利用总线将处理器核的私有Cache 和主存储器连接在一起,每一个私有 Cache 中的控制器会时刻侦听总线上的消息,并根据消息的类型做出相应的操作。MSI协议是一个在多处理器系统中运行的基本的监听高速缓存一致性协议。。与其他缓存一致性协议一样,协议名称中“M,S,I”三个字母表明高速缓存行可能的状态。

简介在MSI协议中,缓存中包含的每个块可能处于以下三种状态之一:

Modified(已修改):块已在缓存中已被修改,缓存中的数据与后备存储器(例如内存)中的数据不一致。具有“M”状态的块的缓存在该块被替换时需要将其中的内容写回后备存储。

Shared(共享):块未被修改,并在至少一个处理器的缓存中以只读状态存在。高速缓存可以将其替换而不将其中的数据写回后备存储。

Invalid(无效):该块不存在于当前缓存中,或者因为总线请求而被标记为无效。如果要将某个块存储在该缓存中,则必须首先从内存或另一个高速缓存中获取该块。

这些一致性状态通过高速缓存和后备存储之间的通信进行维护。 当缓存中的某个块被读或写时,或者当缓存通过总线接收到其他缓存发出的读写信号时,它需要据此来做出动作并调整自己的状态。

当缓存收到读取请求时,如果一个块处于“M”或“S”状态,则它会直接提供数据。但如果块尚未被装入缓存(处于“I”状态),则在装入该块之前,必须先要保证该地址的数据不会在其他缓存的缓存块中处于“M”状态。不同的缓存架构处理这个问题的方式是不同的。例如,总线架构通常使用总线监听来解决此问题,此时读取请求将广播给所有的缓存。其他架构,例如缓存目录,则通过一个中介(例如目录)来获取哪一个缓存拥有缓存块的最新副本。如果另一个缓存中有处于“M”状态的块,则它必须将数据写回后备存储,并回到“S”或“I”状态。在数据写回之后,缓存可以通过后备存储或者其他缓存中处于“S”状态的对应块获取内容。之后缓存会答复读取请求。在提供的数据后,缓存块处于“S”状态。

当缓存收到读取请求时,如果一个块处于"M"状态,则缓只需要修改本地的数据。 如果块处于"S"状态,则缓存必须通知其他的具有处于“S”状态的同样的块的高速缓存将其换出。和上文所述类似,这种通知可以通过总线监听或缓存目录来进行。接下来缓存会修改本地的数据。 如果块处于"I"状态,则缓存必须通知其他的具有处于“S”或“M”状态的同样的块的高速缓存将其换出。如果块在另一个缓存中处于"M"状态,那么它必须将数据写回后备存储或者将其提供给请求数据的缓存。如果此时缓存尚未装载该块的数据,则修改前要先将其从后备存储读入。在数据被修改之后,缓块块处于"M"的状态。

优势与不足MSI 协议在解决缓存一致性问题上有较大的优势,主要表现为以下几个方面:

首先,系统中的每一个数据块都有状态标识,通过现有状态标识及总线传输的事务并依据状态转换图进行数据块状态的转换,整个流程有序进行,数据块状态不存在混淆的情况;

其次,可以使用总线、环形网等作为一致性事务的广播介质,选材不单一;

再次,硬件实现的 MSI 协议在功能及可靠性上更显健壮性;

最后,MSI 协议简单而有效,并且总线作为互联结构其挂接设备方便快捷,易于消息传输。

但 MSI 协议也有其自身的不足:

首先,当多个私有缓存中都含有同一个共享数据块时,采用写无效策略的MSI 协议会进行多次的写作废操作,增加流量负载;

其次,总线作为互斥资源其带宽有限,即总线的扩展性差;最后,

MSI 协议是通过广播的方式发送一致性消息,存在于总线上的消息对于一些处理器核来说是不需要的,即总线的有效利用率受到影响1。

基于侦听的高速缓存一致性协议基于监听的一致性协议使用总线或者环形网进行一致性命令的广播。小规模的多处理器常采用总线进行广播。这种类型的机器是通过高速共享总线将商用的微处理器与共享存储器连接起来,并且用硬件实现侦听高速缓存一致性协议,以保证高速缓存一致性。侦听高速缓存一致性协议主要是利用了总线的特性。总线是一组连接多个设备的线路,总线上的每个设备都能侦听到总线上出现的事务。在侦听高速缓存一致性协议的实现中,所有高速缓存控制器都侦听总线上出现的事务,一旦发现与自己相关的事务就执行相应的动作来保证高速缓存一致性。

单片多处理器系统中,多个处理器核通过片内互联的进行通讯。片内高速缓存一致性自身的特点决定了它对可扩展性要求不高。因此,在单片多处理器的片内高速缓存一致性设计时,实现简单的监听协议比强调可扩展的目录协议更有吸引力。总线和环形网都可以方便地实现广播,其中仲裁、总线长度、总线阻抗是总线设计中需要考虑的重要问题。而环形网将网络上的设备串联起来,则不存在上面的问题。而从广播的效率来看总线优于环形网。在多核处理器中,各处理器核集中在一个芯片内部,仲裁、总线长度、总线阻抗等问题不会给设计带来太多麻烦。因此,总线广播的方式也是多核处理器片内高速缓存一致性实现中首选的方式。在侦听高速缓存一致性协议中,每个高速缓存控制器接收的两方面输入处理器发出的内存请求和总线上侦听到的事务。作为这些输入的响应,高速缓存控制器可能根据相应高速缓存块的当前状态及状态转换图来更新该块的状态,并且也可能要执行一些动作。比如,作为对处理器发出的读请求的响应,高速缓存控制器可能要产生一个总线事务来获得数据,并返回给处理器。有时候,高速缓存控制器也要参与到总线上侦听到的事务中去,并作出响应。因此,侦听协议实际上是一组互相协作的有限状态机所代表的分布式算法,它由三部分组成:①状态集合一个与本地高速缓存块相关联的状态集合②状态转换图以当前状态和处理器请求,或观察到的总线事务作为输入,并输出该高速缓存块的下一个状态③动作与每个状态转换相关的实际动作,这是由总线、高速缓存和处理器的具体设计来决定。对同一个块的不同状态机不是独立操作的,而是由总线事务来协调的2。

状态机处理器向高速缓存发出的请求包括:

PrRd:处理器请求读取一个缓存块。

PrWr:处理器请求改写一个缓存块。

状态图的总交易MSI协议。

此外,还有总线方面的请求。 包括:

BusRd:当某个处理器的高速缓存的读操作出现未命中,它会向总线发送一个BusRd请求,并预期能够收到该缓存块的数据。

BusRdX:当某个处理器的高速缓存的写操作出现未命中,它会向总线发送一个BusRdX请求,预期能够收到该缓存块的数据,并且使其他处理器中对应相同地址的缓存块无效。

BusUpgr:当某个处理器的高速缓存的写操作命中时,它它会向总线发送一个BusUpgr,使其他处理器中对应相同地址的缓存块无效。

Flush:该请求表明一个缓存块正在被写回内存。

状态转移:

处于Invalid(无效)状态的缓存块:

在PrRd,BusRd发出时,状态变为Shared(共享)。

在PrWr,BusRdX发出时,状态变为Modified(已修改)。

在BusRd,BusRdX或BusUpg发出时,状态保持Invalid(无效)。

处于Shared(共享)状态的缓存块:

在PrRd,BusRd发出时,状态保持Shared(共享)。

在PrWr,BusUpgr发出时,状态变为Modified(已修改)。

在BusRdX或BusUpgr发出时,状态变为Invalid(无效)。

处于Modified(已修改)状态的缓存块

在PrRd或PrWr发出时,状态保持Modified(已修改)。

在BusRd发出时,缓存块被写回,状态变为Shared(共享)。

在BusRdX发出时,缓存块被写回,状态变为Invalid(无效)。

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。