ACE Protocol Chapter C4

C4.3 不同transaction导致的state变化

state可能会被以下影响:

1. 传输类型;

2. 在AR通道上的读响应;

3. 是否master支持外部的snoop filter;

4. 是否master指定的预测读;


如果传输读响应返回PassDirty,则cache line一定要变为dirty状态。PassDirty在以下状态使能:

1. ReadNotSharedDirty

2. ReadShared

3. ReadUnique

如果传输读响应返回IsShared,则cache line要么变为Shared,要么变为Invalid。IsShared在以下状态使能:

1. ReadOnce

2. ReadClean

3. ReadNotSharedDirty

4. ReadShared

5. CleanShared

一个Unique状态的cache line可以移动到Shared 状态,但是这个行为不鼓励。

如果没有外部的snoop filter,允许cache line从Clean状态变为Invalid状态。

C4.3.1 load不会导致cache line状态的跳转;

C4.3.2 Store对cache line状态的影响

在执行一个store命令之前,master应当检查它是否有store的权限。仅当master在uniqueclean或者是uniquedirty状态时,才能存放。

如果master没有这个store的权限,那么它应当:

1. 在AR通道发起transaction,获取store的权限,然后执行store指令,存储到cache上。在store之后,master一定要处于UniqueDirty状态。可以使用以下操作获取权限:

ReadUnique

CleanUnique

MakeUnique

2. 在AW通道发起操作,获取store的权限,然后执行store指令,存储到主存上。可以store并且更新主存传输类型如下:

WriteUnique

WriteLineUnique

C4.3.3 与主存更新相关的状态改变

如果cache line是dirty状态,那么可以将其更新到主存。

使用WriteBack/WriteClean,更新主存。更新之后,cacheline一定要变成clean/invalid 状态。

如果支持外部的snoop filter,应当有以下限制:

1. 写回类型的,cache line变而为无效;

2.写清类型的,cache line变为清;

C4.3.4 与cache一致性相关的状态改变

影响cache一致性的操作如下:

1. CleanShared;

2. CleanInvalid;

3. MakeInvalid;

在发起cache 一致性操作之前,master一定要保证:

对于CleanShared,cache line一定要在clean或者Invalid状态;

对于CleanInvalid和MakeInvalid,cache line一定要在Invalid状态。

注意:cache维护操作不会影响当前行的状态。

C4.4  state change


C4.5 Read Transactions (在AR通道上)

C4.5.1 Read No Snoop

Read No Snoop 用于读不在shareable区域内的数据。当传输完成时,cache对allocate的状态没有要求;

C4.5.2 Read Once

用于读取在shareable的区域的数据。这种操作用于获取数据的快照,这个数据也不会被cache。

C4.5.3 Read Clean

Read Clean操作用于确定不将更新主存的责任传递给发起动作的master。

如果一个master(比如一个写通型的)想要获取一份干净的cache line,可以使用这个操作。

C4.5.4 Read Not Share Dirty

Read Not Share Dirty在不是IsShared 和PassDirty同时是使能的其他情况下完成。

主要用于一个cache master发起一个load 操作,并且接受除了ShareDirty 状态的其他任何状态。

这个操作要求的响应如下:

如果IsShared 响应这个cache line已经被共享了,那么PassDirty一定要保证cache line是干净的。

C4.5.5 ReadShared

ReadShared 是一个读操作,可以接受任何IsShared和PassDirty的组合类型

如果一个cache line一开始是在一个shared clean的状态,如果操作返回的类型是PassDirty,那么cache line一定要变到 Dirty的状态。


C4.5.6 ReadUnique

这个操作获取数据的备份,并且可以保证数据保持在unique状态。这就允许master 执行一个store操作到这个cache line。

典型地,一个ReadUnique操作在如下场景被使用:发起操作的master执行一个部分cache line store,并且没有cache line的拷贝。

C4.6 Clean Transactions

C4.6.1 Clean Unique

CleanUnqiue 也是发生在shareable域的,主要用于保证:

 cache line处于unqiue状态。这使得master 可以发起store到这个cache line的操作,但是这个transaction不要求获得master的拷贝。

如果其他处于dirty状态的cache被写入主存并且其他的cache line被移除。

transaction响应的要求如下:

  • IsShared 响应需要保证当前cache line上unqiue的。
  • Pass Dirty一定要被失效。

在完成CleanUnqiue操作时,发起操作的master可以store这个cache line。如果这个cache line在store 操作前是无效的,那么一定要发起一个full cache line操作,将数据allocate到cache中。在full cache line 存储之后,这个cache line就在unqiue dirty状态了。

Store 操作一定要和Clean Unique是原子操作,因此,任何在CleanUnique之后的操作都将被延迟,直到store完成。

Clean Unique可以用于完成exclusive操作。

Snoop filter在完成CleanUnique操作之后,会将cache line认为是已经allocate了。

        cache line如果在clean uniqu操作之前是allocate状态,那么在这个操作之后,仍然是allocate状态。

        如果cache line在Clean Unique操作之前没有被分配,或者在CleanUnique期间被失效,那么当CleanUnique完成时,这个master应当:

        完成一个full cache line store,那么这个cache line就被分配了。

        完成一个整行或者部分行的写回操作,用于表明这个cache line已经不是allocated状态了。

        重启另一个传输,如ReadUnique传输,在整行或者部分行成为allocated状态之前。

       不发起一个store操作。在这情况下,master一定要发起evict操作用于通知snoop filter,这个cache line已经不是allocated状态了。