- Order使用背景
1)除非特别要求,对Normal memory、Device RE的访问,同地址保序即可;
2)对Device nRE\Device nRnE的访问,需要对空间访问保序;
3)CHI中,互联不保证顺序,从相同channel发布的命令不一定按照相同顺序到达HN。
问题:那么CHI如何解决transaction顺序问题?
CHI中提供Comp、CompAck、Order这3种mechanism解决顺序问题,下文分别描述。
- Comp mechanism
- Comp如何传递?
为了解决顺序问题,CHI协议要求Comp满足:“A completion guarantees that the request has reached a PoS or a PoC, where it will be ordered with respect to requests to the same address from any Requester in the system.-P146”。即Completer发布Comp意味着transaction到达下一保序节点,将按照接收transaction的顺序进行处理。接下来,只要保证Completer接收顺序与Requester发布顺序一致即可。
1)在Requester侧,仅当收到Comp之后,再发布同地址/同地址范围的访问;
2)在Completer侧,当transaction到达保序节点(PoS)后,回Comp。(具体见2.4节)
-
- Transaction与Comp
不同transaction的Comp根据访问地址类型,具有不同的含义,具体如下:
1)读访问Noncacheable/Device地址空间时,CompData确保transaction对后续同一地址段(endpoint address range,impdef,from any agent)的transaction可见
2)读访问Cacheable地址空间时,CompData确保transaction对后续同一地址(location,from any agent)的transaction可见
3)Dataless transaction(仅可访问Cacheable地址空间),Comp确保transaction对后续同一地址(location,from any agent)的transaction可见
4)写、Atomic访问Noncacheable/Device nRnE/Device nRE 地址空间时,Comp/CompData确保transaction后续对后续同一地址段(endpoint address range,impdef,from any agent)的transaction可见
5)写、Atomic访问Cacheable/Device RE 地址空间时,Comp/CompData确保transaction对后续同一地址(location,from any agent)的transaction可见
总结规律:若是memory attribute为Device nR*,来自同一agent的去往相同address range的transaction将按照接收顺序进行处理。否则,来自同一agent的相同地址将按照接收顺序进行处理;(备注,读访问不受nR控制?)
-
- Comp什么时候发布?
对于Write:Comp表示该笔传输对其他RN是observable的(收到Comp之后,假如其他RN发布相同地址的读传输,那么读到的一定是该笔传输的数据),因此:
1)对于WriteNoSnp,不需要snoop其他RN,HN收到transaction即可返回Comp (This flow example shows Comp is sent after CompDBIDResp is received from SN-F. However, HN-F is permitted to send Comp anytime after it receives the WriteNoSnp request from RN-F0.-P192)
备注:思考Write的Comp:EWA: Early Write Acknowledgement,表示Write Completion Response是否可以从中间节点提前返回。如果EWA=0,则Write Completion Response必须从Endpoint节点返回后中间节点才能返回。因此上图中如果EWA=0,则HN向RN发送Comp时必须等待收到SN返回的CompDBIDResp. 除*NoSnp、Atomic外的所有传输EWA必须为1.
2)对于WriteUnique,HN必须收到所有snoop resp之后才能返回Comp(因为Comp必须保证别的RN中的cache已经被invalid,之后读到的是新数据);
3)对于CopyBack,因为Comp与DBIDResp必须合并为CompDBIDResp发送,因此必须等到DataBuffer可用后返回&#