本节描述Snoopable transactions之间出现地址hazards and race情况下,RN-F和HN-F如何处理。Non-snoopable transactions之间和Snoopable transactions之间的保序在博客《CHI保序》中讲解。
除了多个Requesters可以同时发送多笔transactions,CHI协议允许每个Requester可能发送多笔outstanding requests,也可以接收多笔outstanding snoop request。ICN(HN-F, HN-I and MN)需要确保这些对访问同一个cacheline出现的情况的transactions有确定的顺序,并且这个确定的顺序都所有组件都一样。
作者:谷公子
除了多个Requesters可以同时发送多笔transactions,CHI协议允许每个Requester可能发送多笔outstanding requests,也可以接收多笔outstanding snoop request。ICN(HN-F, HN-I and MN)需要确保这些对访问同一个cacheline出现的情况的transactions有确定的顺序,并且这个确定的顺序都所有组件都一样。
1. At the RN-F node
RN-F在收到Snoop requests时,必须及时返回响应,不能和其它outstanding requests的完成有任何协议上的依赖关系(除了SnpDVMOp Sync操作)。
如果RN-F发送一个访问相同cacheline正在pending的request,并且该pending request还没有接收到任何Data response packet:
- snoop request必须要正常处理;
- 对于任何snoop request type,cache state必须正常transitions;
- 如果snoop request type、snoop request attribute和cache state需要,cached data或CopyBack request data必须随着snoop response返回数据或forward data给Requester;
如果RN-F发送一个访问相同cacheline正在pending的request,并且该pending request已经接收到至少一个Data response packet:
- RN-F必须等待所有的Data response packets收齐后,才能处理snoop request;
- 一旦RN-F收齐所有的Data response packets后:1. snoop request必须可以正常处理;2. 对于任何snoop request type,cache state必须正常transitions;3. 如果snoop request type、snoop request attribute和cache state需要,cached data必须随着snoop response返回数据或forward data给Requester;
如果pending request是CopyBack request,那么还有如下额外要求:
- 收到CompDBIDResp响应之后 ,那Request transaction flow必须完成;
- WriteData response里的Resp cacheline state必须是snoop request处理之后的,而不是在CopyBack发送时的cache state;
- 如果在snoop完成之后,cacheline变为I态或SC态,RN允许不发送有效的CopyBack data。如果CopyBack data已经被snoop走了,那么WriteData响应的cache state必须是I态,且所有的BE为0和Data为0;
- 如果WriteData包含data,那么该data必须要和snoop response中的一样,或是更多最新的数据;注意:比snoop response更多最新的数据指的是:如果snoop是SnpOnce、SnpOnceFwd、SnpCleanShared,这些snoop对应的response指示cacheline data可以被进一步修改;
对于non-ordered transactions,RN不等DataSepResp就发送CompAck(这种情况在DataSepResp回来之前,RN会负责hazard后续同地址的snoop请求);对于ordered transactions,RN一旦接收到一个DataSepResp packet就可以发送CompAck。在这两种情况下,RN在接收到全部data packets之前,不会去响应snoop request。
对于一笔pending的CopyBack request,HN-F可能接收到多笔同地址的snoop requests,在这种情况下,data response携带最后一笔snoop request响应完成后的cacheline state。
2. At the ICN(RN-F) node
HN-F会对同地址的transactions进行保序,是通过对transaction responses和snoop transactions排序发送给Requesters来保证的。由于ICN不要求保序,因此在某些情况下,这些messages的到达顺序不会和它们在HN-F上发送的顺序一样。
如果包含多笔data packets的response message需要在ICN上传输,那么HN接收或发送这些messages意味着所有的相关的packets。也就是,当HN开始发送message,它必须将所有的message packets全部发送,不能和其它Request或Response message的完成有任何依赖关系。同样的,如果HN收到部分data message packets,那么它必须要收到剩余的所有data message packets,不能和其它Request或Response message有任何依赖关系。
当后续的数据传输进行依赖于接收Data message,在收到第一笔first Data packet之后数据的进行就可以开始。如果后续的non-data传输是处理后续request则必须等待所有的数据都收到或发送完成,是由于HN发送和接收数据。
当一笔snoop transaction response正在pending,HN允许发送的同地址的transaction responses是:
- RetryAck for a CopyBack;
- RetryAck and DBIDResp for a WriteUnique and Atomics;
- RetryAck and,if applicable,a ReadReceipt for a Read request type;
- RetryAck for a Dataless request type;
一旦HN-F给一笔transaction发送了completion响应,那么HN-F不能发送相同地址的snoop request,直到它接收到:
- 除了ReadOnce*和ReadNoSnp以外的任何Read and Dataless requests的CompAck;
- CopyBack和Atomic requests的WriteData response;
- 对于WriteUnique,WriteData response,如果可以的话,CompAck。
3. Hazard handling examples
本节描述在Requester处的CopyBack-Snoop request的hazard场景,并且在HN-F上request和request、request和snoop request的hazard场景,包含了如下几小节:
3.1 CopyBack-Snoop hazard at RN-F
图1为RN-F发送了一笔pending CopyBack request,并收到一笔Snoop request的流程图。
图1 CopyBack-Snoop hazard at RN-F example
图2 CopyBack-Snoop hazard with no cache state change example
3.2 Request hazard at HN-F
如果HN-F收到来自多个requester发送的同地址请求,HN-F可以任意选择一个。但是如果两个请求时来自同一个源且有保序需求,那么HN-F对它们的处理顺序必须和到达顺序一致。
图3 Read-Read request hazard example
3.3 Read-CopyBack or Dataless - CopyBack hazard at HN-F
Read or Dataless request和CopyBack request在HN-F上的hazard初六流程和Read-Read相似。
图4 Read-CopyBack or Dataless - CopyBack hazard example
3.4 Request-CompAck to HN-F race hazard
在transaction完成后,Requester可能silent evict cacheline,并且产生另一笔同地址的request。那可能会有如下场景:
新产生的request早于之前request的CompAck响应到达HN-F;
HN-F检测到地址hazard,会block新产生的request直到接收到CompAck响应;
在上述场景中,HN-F收到CompAck响应会释放之前request的资源,然后unblock新请求request的处理。
————————————————
版权声明:本文为CSDN博主「谷公子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/W1Z1Q/article/details/104195612
CHI系列篇
更多AMBA CHI的知识请关注Arm AMBA 协议集专栏。