Skip to content

计算机系统结构(2月10日)

lirui edited this page Feb 10, 2021 · 13 revisions

多核Cache一致性协议

Cache Coherence问题提出:在多核和多处理系统中,多个Cache对应的copy内容应该一致

memory中的copy和cache中的copy应该是一致的

每个core有一个cache,多个cache共用一个memory

多个cache不一致的原因:

1、共享可写数据的不一致性(sharing of writable data)

2、进程迁移的不一致

包含共享变量x的进程原来在core1上运行,并对x进行了修改(但采取写回策略,所以暂时没有修改Memory),由于某种原因迁移到core2,修改过的x‘仍在core1的cache中,core2运行时从Memory中得到x,这个x其实是“过时”的,所以造成了不一致。

core2中运行的进程对x进行了修改,采取写通过策略,所以把memory中的x页修改为x’,由于某种原因,该进程迁移到core1,但core1的cache中仍为x,所以造成不一致

3、IO操作(绕过Cache的IO操作)

两种设计Cache一致性协议策略

1、写无效(write invalidate)

任一core写它的私有cache时,它都使所有其它的Cache中的副本失效

对Write-through,它也更新memory中的副本(最终是一个Cache中的副本和memory中的副本是有效的)

对write-back,它使memory中的副本也失效(最终只有一个cache中的副本是有效的)

2、写更新(write update)

任一处理器写它的私有Cache时,它都立即更新所有其它的Cache中的副本

对Write-through,它也更新主存储器中的副本

对Write-back,对存储器中副本的更新延迟到这个Cache被置换的时刻

从开销方面来说,写更新开销更大

写无效的问题:主要开销在两个方面:1、作废各Cache副本的开销;2、由作废引起缺失造成的开销,即处理机需要访问已经作废的数据时将引起Cache的缺失

如果一个core经常对某个块连续写,且Core间对共享块的竞争较小,这时写无效策略维护一致性的开销是很小的。如发生严重竞争,即Core之间对某个地址的共享数据竞争,将产生较多的作废,引起更多的作废缺失。结果是共享数据在各Cache间倒来倒去,产生颠簸现象,当缓存块比较大时,这种颠簸现象更为严重

写更新的问题:开销比较大

监听总线协议(Snoopy protocol):通过总线监听机制实现cache与共享存储之间的一致性

适用性分析:适用于具有广播能力的总线结构多Core系统,允许每个Core监听其它Core的存储器访问情况。只适用于小规模的多Core系统

写一次(write-once)协议:写无效监听一致性协议,将写通过和写回策略结合。为了减少总线流量,高速缓存块的第一次写用写通过方法,产生一份正确的主存储器副本,并使其它的Cache中的副本无效,之后就采用写回方法更新Cache与主存储器

写通过:core将cache中的内容修改了,同时也将memory中这个副本也改了

1、一致性协议的内容:(1)Cache可能出现的状态集合;(2)共享主存的状态;(3)为维护一致性而引起的状态转换

2、每份Cache中的副本可能出现的四种状态:

(1)有效(valid state):与主存储器副本一致的Cache副本,即该副本未经修改,所以这个副本不是唯一的副本

(2)保留(reserved state):这一Cache副本是第一次修改,并用写通过方法写入主存,所以这一Cache副本和主存储器副本一致

(3)重写(dirty state):Cache副本不止一次被修改过,由于不再采用写通过方法,所以这个Cache副本是唯一的副本。与存储器和其他的Cache副本都不一致。主存储器中的副本也是无效的

(4)无效(invalid state):与存储器或其他的Cache副本不一致,或在Cache中找不到

3、局部命令(Local commands)

(1)P-Read:本地处理机读自己的Cache副本

(2)P-Write:本地处理机写自己的Cache副本

4、一致性命令

(1)Read-blk:从另一Cache读一份有效的副本

(2)Write-inv:在写命中时在总线上广播一个无效命令

(3)Read-inv:在写缺失时在总线上广播一个无效命令

Clone this wiki locally