多处理机Cache一致性
**多个处理器共享一个存储器
**当处理器规模较小时,这种机器十分经济
**支持对共享数据和私有数据的Cache缓存
私有数据供一个单独的处理器使用,而共享数据供多个处理器使用
** 共享数据进入Cache产生了一个新的问题:
Cache的一致性问题
(1)不一致产生的原因(Cache一致性问题)
I/O操作
Cache中的内容可能与由I/O子系统输入输出形成的存储器对应部分的内容跟不同
共享数据
不同处理器的Cache都保存有对应存储器单元的内容
例:两个处理器cache 对应同一存储器单元产生出不同的值
(2)存储器是一致的(非正式定义)
如果对某个数据项的任何读操作均可得到其最新写入的值,则认为这个存储系统是一致的。
存储系统行为的两个不同方面: 一是返回给读操作的是什么值 二是什么时候才能将已写入的值返回给读操作
满足条件:
假设:直到所有的处理器均看到了写的结果,一次写操作才算完成;允许处理器无序读,但必须以程序规定的顺序进行写
实现一致性的基本方案
在一致的多处理机中,Cache提供两种功能。
降低了对远程共享数据的访问延迟。
2. 共享数据的复制
不仅降低了访存的延迟,也减少了访问共享数据所产生的冲突
小规模多处理机不是采用软件而是采用硬件技术实现Cache一致性。
(1)Cache一致性协议
对多个处理器维护一致性的协议
(2)关键:跟踪共享数据块的状态
(3)共享数据状态跟踪技术
物理存储器中共享数据块的状态及相关信息均被保存在目录中
每个Cache除了包含物理存储器中块的数据拷贝之外,也保存着各个块的共享状态信息
监听:Cache通常连在共享存储器的总线上,各个Cache控制器通过监听总线来判断它们是否有总线上请求的数据块
3.两种协议
(1)写作废协议
在一个处理器写某个数据项之前保证它对该数据项有唯一的访问权
例:在写回Cache的条件下,监听总线中写作废协议的实现
(2)写更新协议
当一个处理器写某数据项时,通过广播使其它Cache中所有的读数据想拷贝进行更新。
例:写回Cache条件下,监听总线中写更新协议的实现
(3)写作废和写更新协议性能上的差别
对同一数据的多个写而中间无读操作的情况,写更新协议需多次写广播操作,而在写作废协议下只需一次作废操作。
对同一块中多个字进行写,写更新协议对每个字的写均要进行一次广播,而在写作废协议下仅在对本块第一次写时进行作废操作
从一个处理器写到另一个处理器读之间的延迟通常在写更新模式中较低。而在写作废协议中,需要读一个新的拷贝。
在基于总线的多处理机中,写作废协议成为绝大多数系统设计的选择
监听协议及其实现
(1)小规模多处理机中实现写作废协议的关键利用总线进行作废操作,每个块的有效位使作废机制的实现较为容易。
(2)写直达Cache,因为所有写的数据同时被写回主存,则从主存中总可以取到最新的数据值
(3)对于写回Cache,得到数据的最新值会困难一些,;因为最新值可能在某个Cache中,也可能在主存中。
(4)在写回Cache条件下的实现技术
复制标志位
采用多级包含Cache
分布式共享存储器体系结构
1.基于目录的Cache一致性
存储器分布于各节点中,所有的结点通过网络互连。访问可以是本地的,也可能是远程的。
不支持Cache一致性:
规定共享数据不进入Cache,仅私有数据才能保存在Cache中。
优点:所需的硬件支持很少(因为远程访问存取两仅是一个字(或双字)而不是一个Cache块)
缺点:
(1)实现透明的软件Cache一致性的编译机制能力有限
(2)没有Cache一致性,机器就不能利用取出同一块中的多个字的,开销接近于取一个字的开销这个优点,这是因为共享数据是以Cache块为单位进行管理的。当每次访问要从远程存储器取一个字时,不能有效利用共享数据的空间局部性。
(3)诸如预取等延迟隐藏技术对于多个字的存取更为有效,比如针对一个Cache块的预取
解决cache一致性问题的关键:
目录协议
目录:用一种专门的存储器所记录的数据结构,他记录着可以进入Cache的每个数据块的访问状态、该块在各个处理器的共享状态以及是否修改过等信息
对每个结点增加目录表后的分布式存储器的系统结构
(1)目录协议的基本点
状态描述该目录所对应存储块的当前情况;
位向量共有N位,其每一位对应于一个处理器的局部Cache,用于置出该Cache中有无该存储块的拷贝
(2)目录必须跟踪每个Cache块的状态
Cache块状态有三种:
共享:在一个或多个处理器上具有这个块的拷贝,且主存中的值是最新值(所有Cache均相同)
未缓冲:所有处理器的Cache都没有此块的拷贝
专有:仅有一个处理器上有此块的拷贝,且已对此块进行了写操作,而主存的拷贝仍旧是旧的。这个处理器称为此块的拥有者。
(3)由于写作废操作的需要,还必须记录共享此块的处理器信息
方法:对每个主存块设置一个位向量。
当此块被共享时,每个位指出与之对应的处理器是否有此块的拷贝。
当此块为专有时,可根据位向量来寻找此块的拥有者。
(4)宿主结点
存放有存储器块和对应地址目录项的结点
目录协议及其实现
基于目录的协议中,目录承担了一致性协议操作的主要功能。
(1)发往一个目录的消息会产生两种不同类型的动作
更新目录状态
发送消息满足请求服务
(2)目录项可能接手到三种不同的请求
读失效
写失效
数据写回
(3)在各个状态下所接收到的请求和相应的操作
1)当一个块处于未缓冲状态时,对此块发出的请求及处理操作为:
读失效
将存储器数据送往请求方处理器,且本处理器成为此块的唯一共享结点,本块的状态转换为共享。
写失效
将存储器数据送往请求方处理器,此块成为专有。
2)当一个块是共享状态时,存储器中的数据是其当前最新值,对此块发出的请求及处理操作为:
读失效
将存储器数据送往请求方处理器,并将其加入共享集合
写失效
将数据送往请求方处理器,对共享集合中所有的处理器发送,写作废消息,且将共享集合置为仅含有此处理器,本块的状态变为专有。
3)当某块处于专有状态时,本块的最新值保存在共享集合指出的拥有者处理器中,从而有三种可能的目录请求
读失效
将“取数据”的消息发往拥有者处理器,使该块的状态转变为共享,并将数据送回目录结点写入存储器,进而把该数据返送请求方处理器,将请求方处理器加入共享集合
写失效 本块将有一个新的拥有者
数据写回
拥有者处理器的Cache要替换此块时必须将其写回,从而使存储器中有最新的拷贝(宿主结点实际上成为拥有者),此块成为非共享,共享集合为空。
3.对基于目录的Cache一致性的多种改进
有限映射目录
链式结构目录
4.基于目录的Cache一致性协议是完成由硬件实现的。此外,还可以用软硬结合的办法实现。