侦听协议与目录协议小记
侦听协议
MESI协议
“Read Hit”和“Write Hit”表示内核在本地缓存中读写命中并获得有效数据;“Read Miss”和“Write Miss”表示内核在本地缓存中读写缺失,未获得有效数据;“Probe Read Hit”和“Probe Write Hit”表示内核在其他内核的 Cache 中读写命中,获得有效数据的副本。
在 MESI 模型中,当内核对主存储器进行读操作时,如果数据在本地Cache 读命中,直接读取数据并从 Cache 中送回内核,Cache 行状态信息保持不变。
如果这些数据在其他内核 Cache 中读命中,Cache 行状态信息结果如表 2.2 所示。如果读缺失,即数据从主存储器中获得,则在本地 Cache 分配一个新的 Cache 行,将数据写入,Cache 行状态为 E 状态,表示该新数据与主存中数据一致,并只存在于该Cache 中。
在 MESI 模型中,当内核对一段存储器进行写操作时,如果写缺失,则在本地缓存中分配一个新的 Cache 行,将数据写入,Cache 行状态为 M 状态,表示
该新数据与主存储器中数据不一致,并只存在于该 Cache 中。如果这些数据在本地Cache 写命中,Cache 行状态信息结果如表 2.3 所示。如果这些数据在其他内核 Cache写命中时,Cache 行状态信息结果如表 2.4 所示。
Dragon协议
Xerox PARC 的研究人员提出一种 Dragon 一致性协议 [39] ,该协议采用写更新和写回策略。在 Dragon 一致性协议中,Cache 行的状态定义为 E(exclusive),SM(sharedmodified),SC(shared clean),M(modified)四种。表 2.5 为 Dragon 一致性协议中状态的含义。
目录协议
基于目录的高速缓存一致性协议采用目录结构存储 Cache 行的状态信息,并通过目录结构完成数据的一致性维护 。在目录一致性协议中,当内核对本地的 Cache发送数据请求,在 Cache 控制器中产生缺失消息,Cache 控制器把请求消息发送到目录结构,通过目录结构查找拥有该 Cache 行数据副本的内核,然后定向地发送数据请求到拥有者,最后拥有者传输请求数据到请求者,并更新目录结构中 Cache 行的状态信息 Cache 行,当 Cache 行需要无效操作时,不仅本地 Cache 控制器需要进行无效操作,而且还需要把无效信息发送到目录结构,目录结构更新该 Cache 行的最新状态。这种采用目录结构的一致性协议有效地减小了侦听协议中总线广播需要的带宽通信。但是当发生 Cache 到 Cache 的读写缺失时,需要经过三次转发数据请求,增大了 Cache缺失延迟,另一方面随着内核数量的增大,需要呈指数型的目录结构存储目录状态信息。
目录一致性协议中,如果多个内核同时发送读数据请求,由于读数据请求不会导致数据的不一致性,因此多个读请求可并发处理。如果多个内核同时发送写数据请求,由于写数据请求会导致数据的不一致性,因此目录结构不支持同时写请求的并发处理,目录结构自身可充当一个排序的角色,对同时产生的写请求按照一定的规则进行排序,使得并发的写数据请求依次完成操作,并且目录结构支持实时更新排序结果,以避免一致性协议出现协议活锁。
参考来源
[1]操开波.多核微处理器缓存一致性研究[D].西安电子科技大学[2024-05-07].