首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CPU设计之Cache-广播式一致性协议(三)

基于写更新/写回策略的缓存一致性协议

基于写无效策略的一个弊端在于会造成大量的一致性缺失,每一次读取被无效的块都会遇到缓存缺失,从而导致处理缺失的延迟会很高。

基于写更新的dragon协议,处理器端的请求包括:

PrRd:处理器请求从缓存块中读出;

PrRdMiss:处理器请求读的块不在缓存中;

PrWr:处理器请求向缓存块中写入;

PrWrMiss:处理器请求写的块不在缓存中。

总线请求包括:

BusRd:总线侦听到一个来自另一个处理器的读出缓存请求;

Flush:总线侦听到整个缓存块被另一个处理器放上总线的请求;

BusUpd:总线侦听到一个写入字操作导致的写入值在总线上传播的请求,这里只有一个字的数据被放上总线,而不是整个缓存块;

每一个缓存块的状态包含:

Modified:缓存块唯一有效,可能与主存的原始数据不一致,该状态意味着对该块的唯一所有权;

Exclusive:缓存块有效,干净且唯一;

Shared Modified:缓存块有效,可能是dirty的,也可能有多份拷贝。但是,当存在多份拷贝时,只有一份拷贝处于Sm状态,其它拷贝必须是Sc状态;

Shared Clean:缓存块有效,可能不干净,也可能有多份拷贝。

Dragon协议允许“脏”共享,此时所有者的状态为Sm,其他拷贝的状态为Sc。假设缓存使用写分配的策略,状态转换如下图。因为dragon协议中没有I状态,图中没有出处的箭头指向一个状态代表新加载的缓存块。先看处理器端的请求,首先是读缺失,总线上产生一个BusRd,如果其它缓存没有相应的拷贝,那么该块应该标记成E状态。相反,如果其它的缓存中有拷贝,则该块置为Sc状态。如果是写缺失情况,由于是写分配策略,因此总线上产生一个BusRd,如果不存在其它拷贝,则该块置为M。相反如果存在其它拷贝,该块置为Sm,并且总线上还需要产生一个BusUpd通知其它缓存更新。

如果一个块处于E状态,PrRd和PrWr请求都不会产生总线事务,不同的是PrWr请求会改变块状态为M。

如果一个块处于M状态,PrRd和PrWr请求也都不会产生总线事务,因为没有其它的拷贝存在。

如果一个块处于Sc状态,处理器写请求会检查是否存在其它拷贝,如果存在,需要把状态置为Sm,成为该块的所有者。相反如果不存在其它拷贝,状态置为M。

如果缓存块处于Sm,处理器读请求不会改变其状态,也不会触发总线事务。处理器写请求可能不改变Sm状态,因为它还是该块的所有者;也可能会改变状态为M,如果这是它已经是唯一的拷贝。

图1 dragon更新一致性协议状态转换

对于侦听端,如果缓存块处于E状态,当侦听到BusRd时,块状态需要变成Sc。

如果是M状态,说明自己拥有的块是整个系统中唯一有效的,当侦听到BusRd,块必须被清空来保证写传播。

如果是Sc状态,BusRd意味着另外的处理器遇到了读缺失,由于不是所有者,所以不需要触发总线事务。侦听到BusUpd,则该字的更新被获取并用于更新当前的缓存块。

如果是处于Sm状态,说明本地缓存是所有者,侦听到BusRd需要清空该块;侦听到BusUpd,即一个请求者试图写入该块,因此请求者会成为新的所有者,本地的状态需要变为Sc。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230216A09DXQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券