Dskpimc? · 2020年07月18日

CHI Hazard竞争

本节描述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.png
图1 CopyBack-Snoop hazard at RN-F example
2.png
图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.png
图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.png
图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 协议集专栏。
推荐阅读
关注数
7878
内容数
81
Arm AMBA协议集,APB,AHB,AXI,CHI等相关公开课回放及文章
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息