此处仅简单分析每个命令的含义,背景,以及可能的状态变化,对于每个trans具体包含的流程,将在下文描述;
dataless trans的整体流程图下:
=========================================================================
CleanUnique
- 访问snoopable空间,想要获得unique状态,来获得写的权限;
- 典型的场景是,当前RN有shared copy时,想要获得该cacheline的写权限;
- 被snoop的RN对应的cacheline,如果是dirty的,需要写回主存;
- 和ReadUnique的区别在于,partial的写,merge发生在下一级cache,而非本地;
- 初始状态:除了UDP之外的所有状态;
- 结束状态:UC/UD/UCE;
- 被snoop的RN, 最终状态都是I;
- 对应的snoop请求
- requester的cache state transaction
- 可能的场景flow:
=========================================================================
MakeUnique
- 访问的是snoopable空间,想要获得该cacheline的主导权,不需要获得对应的数据;
- 其他RN处dirty的数据直接丢弃;
- 典型场景是当前的这个RN,保证它会改写整条cacheline;
- 初始状态:UC/UCE/SC/SD/I;
- 结束状态:UD, 注意这里不能是UC, 因为这个命令的本意,就是他保证一定会改写这个cacheline;
- 被snoop的RN的状态:I;
- 状态转换图示如下,注意这里的响应和最终状态的关系;
- 这里comp response是Comp_UC, 最终状态是UD, 应该是该RN保证会写,所以UC-> UD;
- 可能的flow如下:
=========================================================================
CleanInvalid
- HN将所有包含该cacheline的RN中的copy都invalid掉,如果有dirty的数据,flush到memory;
- 初始状态和结束状态都只能是I;
- 状态转换图如下:
- 对应的snp请求;
- communication node;
=========================================================================
MakeInvalid
- HN将所有包含该cacheline的RN中的copy都invalid掉,如果有dirty的数据,直接丢弃;
- 这个命令对应的snoop attributes如下:
- 同cleaninvalid, 初始状态和结束状态都只能是I;
- 初始状态:
- 结束状态:
- 被snp的RN的状态如下:
- 对应的snp请求:
- 状态转换图如下:
- communitcation node;
=========================================================================
Evict
- 告诉HN, 当前RN中的这条clean的cacheline不再进行缓存;
- 类似于CPU知会HNF某一条cacheline已经被逐出了,因为是clean的,这个数据也不给你了,直接丢掉;
- snoop atrr:
- 初始状态:
- 结束状态:
- 状态转换图:
- RN在发送之前,会先将状态调整到I; -> RNF move the cache line to I state and issue an Evict trans;
- evict request是一种提示,HNF回comp resp的时候,可以更新snoop filter 或者directory, 或者不更新;
- 因此,发送evict的RN,只能是invalid状态;
- communication nodes
=========================================================================
CleanShared
- 类似于cleaninvalid, 将所有包含该cacheline的copy的RN状态,都改成non-dirty的,如果有dirty的,写回mem;
- 当cleanshared的completion response返回后,标志着所有的cache copy都变成了non-dirty状态,同时任何dirty的copy, 都已经写入到了memory中;
- snoop attr;
- 初始状态:I,UC, SC,;
- 结束后的状态,也只能是I,UC, SC;
- 被snp之后的RN, 状态可以是UC/SC/I;
- 对应的snoop请求;
- 状态转换图如下:
- communication node
cleansharedPersist
- 此命令的completion response返回,标志着所有的cache copy都变成了non-dirty state, 如果由dirty的cache copy, 已经写入了POP或者最终的目的地;
- 示意流程图
CleanSharedPersistSep
- 此命令的persist responce,或者comppersist completion 返回,标志着所有的cache copy都变成了non-dirty state, 如果由dirty的cache copy, 已经写入了POP或者最终的目的地;
- 功能同cleansharedPersist, 只是允许两个seperatede response;
- 两个命令,倾向于用CleanSharedPersistSep,这样允许即可以返回合并的响应,也可以返回分开的响应;
- 状态转变在cleanshared中已经描述了;