多处理机CACHE一致性
- 概念 :
CPU 将运算结果写入Cache,再由Cache将数据写入存储器。这在单处理机运行的时候本没有太大区别。但在引入多处理机之后就有了问题,一个处理机对Cache中数据做了修改而另一个却没有,存储器要怎么分辨哪一个才是正确的、最新的、要保存的数据呢?
存储器的一致性
-
概念 : 如果对某个数据项的任何读操作均可得到其最新写入的值,则认为这个存储系统是一致的。
-
存储器系统行为的两个不同方面:
a. 读操作得到的是什么值 b. 什么时候才能将已写入的值返回给读操作
- 存储器一致性的条件 :
处理器 : P Q 存储器单元 : X
a. P 写入 X 之后再对 X 进行读取,在这期间没有其他处理器对 X 进行写,则 P 读到的值总是前面写进去的值。
b. P 对单元 X 进行写之后,另一处理器 Q 对单元 X 进行读, 读和写之间无其他写,则 Q 读到的值应为 P 写进去的值。
c. 对同一单元的写是串行化的,即任意两个处理器对同一单元的两次写,从各个处理器的角度来看顺序都是相同的。
Cache 一致性协议
在一致的多处理机中,Cache 提供两种功能
a. 共享数据的迁移 : 减少了对远程共享数据的访问延迟,也减少了对共享存储器带宽的要求。
b. 共享数据的共享 : 不仅减少了访问共享数据的延迟,也减少了访问共享数据所产生的冲突。
关键 : 跟踪记录共享数据块的状态
两类协议
-
目录式协议 : 物理存储器中数据块的状态被保存在一个称为目录的地方
-
监听式协议
a. 每个Cache除了包含物理存储器中块的数据拷贝之外,也保存着各个块的共享信息状态
b. Cache通常连在共享存储器的总线上,当某个Cache需要访问存储器时,它会把请求放到总线上,然后其他一直监听着总线的Cache就看看自己有没有这个要改动的数据块,要是有的话就改一改。
两种方法
- 写作废协议
一个处理器准备将X写入的时候,其他处理器中X的副本被全部作废,然后写入X并跟新主存储器。
写作废是针对Cache块进行操作,作废的是块...
- 写更新协议
一个处理器准备将X写入的时候,通过广播使其他Cache中所有对应于该数据项的副本进行更新。
两种方法的性能差异体现 :
-
在对同一个数据进行多次写操作的中间无读操作的情况下,写更新协议需进行多次写广播操作,而写作废只需要一次作废操作。
-
在对同一Cache块的多个字的进行写操作的情况下,写更新协议对每一个写操作都要进行一次广播,而写作废协议仅在该块的第一次写时进行作废操作即可
写作废是针对Cache块进行操作,而写更新则是针对字(或字节)进行。
- 考虑从一个处理器A进行写操作后到另一个处理器B能读到该写入数据之间的延迟时间。写更新协议的延迟时间较小。
监听协议的实现
监听协议的基本实现技术
关键有三个方面 :
- 处理器之间通过一个可以实现广播的互联机制相连。
通常采用总线
-
当一个处理器的Cache 响应本地 CPU 的访问,如果它涉及全局操作,其Cache控制器就要在获得总线控制权后,在总线上发出相应的消息。
-
所有的Cache都在监听总线,它们检测总线上的地址在它们的cache中是否有副本。如果有就动一动。
监听协议举例
目录式协议
什么是目录?
一种逻辑上集中的数据结构。记录着存储器中所有可以调入Cache中的数据块的状态以及哪些Cache中有它的副本等相关信息。
依靠这个目录,我就可以避免广播操作。
位向量的定义
是用来记录哪些Cache中有副本的,每一位对应了一个处理器,长度与处理器个数成正比,由位向量指定的处理机的集合称为共享集S。
分布式目录
目录法的实现方案
最简单的一种 : 对于存储器中的每一块都在目录中设置一项。目录中的信息量与M*N成正比。
M : 存储器中存储块的总数量 N : 处理器的个数
M = K * N K是每个处理机中存储块的数量。
目录中的信息量即为 K×N×N ,所以如果K保持不变,则目录中的信息量就与N2成正比。
存储块的状态
- 未缓冲 ( uncached ):
该块尚未被调入Cache,所有处理器的Cache中都没有这个块的副本。
- 共享 ( shared ) :
该块在一个或多个处理器上有副本,且这些副本与存储器中该块相同。
- 独占 ( exclusive ) :
仅有一个处理器有这个块的副本,且该处理器已经对其进行了写操作,所以其内容是最新的,而存储器中该块的数据已过时。这个处理及称为该块的拥有者
三种节点
信息状态综合
CACHE块的状态转换
远程CACHE块的状态转换
存储块的状态转换
目录的三种结构
- 全映像目录
每一个目录项都包含一个N位(N为处理机的个数)的位向量,其每一位对应于一个处理机。
优点 : 处理比较简单,速度也比较快。
缺点 : 存储空间开销大,可扩放性差。
- 有限映像目录
优点 : 提高其可扩放性和减少目录所占用的空间
缺点 : 当同一数据的副本个数大于m时,必须做特殊处理。当目录项中的m个指针都已经全被占满,而某处理机又需要新调入该块时,就需要在其m个指针中选择一个,将之驱逐,以便腾出位置,存放指向新调入块的处理机的指针 。
- 链式目录
优点 : 既不限制副本的个数,又保持了可扩展性。
缺点 : 复杂