文章目录
ACE协议初探
ACE可以支持不同一致性协议组件的一致性连接,如MESI、ESI、MEI、MOSEI。
支持包含多级缓存的缓存组件和非缓存组件。
1. ACE术语
caching master
initiating master
snooped master
downstream cache
local cache
peer cache
snooped cache
main memory
snoop filter
2. ACE一致性模型
ACE协议允许相同内存位置的副本驻留在一个或多个master component的本地cache中。ACE一致性协议通过强制在任何给定位置发生store时,仅存在一个副本,来确保所有主机在该位置观察到正确的数据。在每次store到某个位置后,其他主机可以为自己的本地缓存获取新的数据副本,从而允许存在多个副本。
如果cl是唯一副本,则主组件可以更改cl的值,无需通知系统中其他主组件。如果cl可能存在于另一个cache中,则主组件必须使用适当的事务通知其他高速缓存。
为了确定组件访问cache时是否需要操作,ACE协议定义了五个高速缓存状态,每个高速缓存状态基于cl的特性: cache state model:
Invalid
: cl不在cache中UniqueClean
: 该cl仅保存在该cache中,并且相对于主存没有修改,组件可以在不通知其他高速缓存的情况下执行对该cl的store。UniqueDirty
: 该cl仅保存在该cache中·该cl相对于主存已被修改,并且该cache必须确保这些改变随后被通知给主存;组件可以在不通知其他cache的情况下执行对该高速缓存线的后续store。SharedClean
: 该cl可能与其他cache共享。并不知道该cl相对于主存有没有修改,但是该组件不负责更新主存。在对该cl执行store之前,组件必须通知其他cache。SharedDirty
: 该cl可能与另外一个cache共享。该cl相对于主存已经修改,且该cache必须确保随后这些改变需要通知给主存。在执行对该cl的store之前,组件必须通知其他cache。
rules里面需要注意:
- 相对于主存更新的cl必须在一个cache中处于Dirty态。
- 相对于主存已经更新且位于多个cache中的cl,只能在一个cache中处于Dirty状态。
3. Channel
ACE协议定义:
- 在现有AXI4通道上的信号
- 在ACE特定通道上的信号
- 确认信号
3.1 对现有AXI4通道信号的修改
write data和write resp不需要额外添加。
只有支持WriteEvict事务的组件才需要AWUNIQUE信号。
3.2 ACE协议额外定义的信道
新通道:监听地址通道 snoop address channel;监听数据通道 snoop data channel;监听响应通道 snoop response channel;
AC通道是对cache主设备的输入,该cache主设备为侦听事务提供地址和相关的控制信息。
CR通道是cache 主设备的输出,其提供对侦听事务的响应。每个侦听事务都有与其相联系的单个响应。监听响应指示CD通道中相关联的数据传输是否是期望的。
CD通道是可选择的输出通道,用于将监听数据从主机传输出去。通常,当被侦听的master具有可供返回的数据副本时,read或者clean侦听事务就会发生这种情况。
3.3 ACE额外的确认信号
信号表明master完成了读或者写事务。
4. 示例
4.1 从shareable位置执行load操作
master组件从可共享位置load数据,master组件在其本地cache中还没有该位置的副本。
- master组件在AR读地址通道上发出一个读事务。
- 互联在AC(侦听地址通道)上将可共享地址传递到其他拥有私有$的组件,即被侦听的master组件。
- 现在会发生以下情况之一:
1. 如果任何被侦听的master组件持有所请求的cl,则通过下列方式指示:
1. 在侦听响应通道CR上响应
2. 在侦听数据通道上向互联提供数据
然后,互联将具有相关联的响应和数据提供给发起的master组件,通过R(读数据)通道 。
3. 如果没有被侦听的master组件保存所请求的cl
互联向主存发起事务。与标准事务一样,读数据在读数据通道上被提供给master。
- master组件使用RACK信号表示该读事务已完成。
注意:如果发起事务的master或被侦听的cache都不负责在稍后的时间点将dirty的cl写回主存,则互联必须将数据传递到发起事务master的同时写回主存。如果发生这种情况,那么互联必须生成事务地址并写入从被侦听master组件返回的脏数据。
4.2 从shareable位置执行store操作
当master store数据到可共享位置时,它移除了该cl所有其他的拷贝。这确保了master组件在执行store时具有cl的唯一副本。当相应的cacheing master组件随后读该cl时,该位置的cl的新值被传播到其他的cache。
4.2.1 部分cl的store操作
仅存储部分cl的master组件必须在执行store之前获得该cl的当前副本。
- 发起master组件通过在读地址通道上发出ReadUnique事务来获得cl的预存储形式,并请求移除其他副本。
- 互联将事务传递给其他cache,通过侦听地址通道AC。
- 当可访问的情况下,被侦听的master组件使用CR通道响应事务,指示它有所请求的cl。它还通过侦听数据通道将cl提供给互联。
- 互联使用读数据通道将cl和响应一起传递给发起主机。
如果在侦听期间没有找到cl的副本,则执行对主存的读取。互联在读数据通道上将cl和响应传递给发起的master组件
- master组件执行store并使用RACK信号来表示事务已经完成
在cl保持unique时,可以执行ld和st而不需要将事务广播至其他高速缓存。
4.2.2 整个cl的store操作
存储整个cl不需要提前获得cl副本。
- 发起master组件在都地址通道上发起MakeUnique事务获取cl的唯一副本,这将删除cl的所有其他副本。
- 互联将事务通过侦听地址通道传递事务到其他cache。
- 被侦听的master组件使用侦听响应通道响应事务,表明该cl是不是被成功移除了。
- 通过读数据通道向发起的master组件提供响应。只有响应字段有效,不发生数据传输
- master组件执行store并使用RACK信号指示事务已经完成。
4.2.3 cl已经被缓存的store操作
- 发起master组件通过在读地址通道上发出CleanUnique事务来请求cl的唯一副本。这将移除其他该cl的副本并将任何脏副本写入主存。该事务不会将cl返回到发起master组件
- 互联通过侦听地址信道将事务传递到其他cache中,被侦听的master通过侦听响应信道响应事务,传递cl被成功移除以及脏cl被互联写回主存的信息。
- 被侦听的master通过侦听数据通道将脏cl提供给互联,然后互联构造事务将脏cl写回主存。
- 使用读数据通道向发起的master组件提供响应。
4.2.4 重叠store操作
如果两个master组件尝试同时对同一cl进行可共享存储操作,则互联确定事务发生的顺序。
master 2 使用它的侦听端口观察master1的操作。
如果主端2存储partial cache line,且已经有数据的copy,当2 observes到1的store操作,2必须移除copy,然后进行下述操作之一:
- master 2必须重新组织一个数据请求操作,然后重新完成store
- master 2可以将partial cache line写入主存,但不保留数据的copy,在后续重新获取这个cache line时需要重新取数据