本文描述CHI error handling、Data Source和Trace Tag。
本节描述CHI error handling需求,包含如下部分。
CHI协议支持在sub packet级的两种error reporting类型,和packet级的两种error reporting类型。
packet级的error reporting类型有:
RespErr域用于指示error conditions。在response和data packets中都包含该域段。表1为RespErr域段的编码。
表1 Error response field encodings
一笔transaction不允许混合返回OK和EXOK响应;
一笔transaction允许混合返回OK、DERR和NDERR响应;
一笔transaction允许混合返回EXOK、DERR和NDERR响应。
不管transaction是否包含error response,都必须按照与协议一致的行为完成。
使用DMT的transaction的error handling和没有使用DMT相同请求的error handing处理流程一样。
requests或snoops没有机制传输errors,如果在ICN上检测错误,那么该request不能使用DMT或DCT。
如果transaction包含data packets,则需要data packets的源发送正确数量的数据包,但不要求数据值有效。
transaction中resp域的cache state可以被error handling影响。如果transaction的响应没有包含合法的cache state,那么RespErr域必须把所有data packets指示为Non-data Error。带没有合法cache state error信息的snoop response必须不能在response中携带数据。
不管是否存在error情况,data message的每个packet的Resp域在响应中必须有相同的值;
在Non-data error响应的Read data packets中,DataSource域段的值不用,且可以为任意值。
本小节描述用于每种transaction类型允许的error field。在下表中将会使用的一些关键字意思如下:
1、Read Transactions
读传输包含多个CompData data packets,每个data packet可以使用不同的error类型,如表2和表3所示,有一个限制是一笔transaction不能混合有OK和EXOK两种responses。
表2 Read transaction’s Data and Response packets legal RespErr field values
表3 Read transac’s Data-only and Non-data packets legal RespErr field values
2、Dataless transactions
当其它component遇到data corruption error时,Dataless transactions可以用Data Error来反馈。data error将传递给原始component,尽管没有数据传输发生。表4为Dataless transaction packets合法的RespErr域段值。
表4 Dataless transaction packets legal RespErr field values
3、Write transactions
写传输可以包含要么Non-data Error,要么Data Error。Errors可以在两个方向传输,从Requester到Completer,或从Completer到Requester。
对于一笔写传输,Error可以通过CompDBIDResp或Comp响应从Completer传输到Requester。在处理transaction时,允许Completer在还没有收到WriteData之前就返回Error错误,例如在查找cache时遇到一个data corruption error。表5为Write传输响应合法的RespErr域段。
表5 Write transaction response packets legal RespErr field values
Requester可以检测到写数据error,并将其包含在write data packet中一块往下发,用于指示data value是否被损坏。表6为Write transaction data packets的合法RespErr域段值。
4、Atomic transactions
这里暂不描述。
5、Other transactions
本小段用于DVMOp和PrefetchTgt transaction的error handling需求。
DVMOp
DVMOp transaction可以在Comp响应中包含Non-data Error。对于DVMOp的所有snoop responses响应,ICN必须将它们合并成一个最终Comp,然后返回给Requester。DBIDResp packet必须只使用OK response。尽管WriteData响应的发送者可能没有使用DERR,但是如果在转换过程中遇到errors,data packet可以用于携带DERR。表7 DVM transaction packets合法的RespErr域值。
表7 DVM transaction packets legal RespErr field values
PrefetchTgt
发往不支持地址的PrefetchTgt transaction应该被丢弃掉。
6、Cache Stashing transactions
如果指定的stash target不支持接收Stash type snoops,那么HN必须忽视Stash hint,且按没有Stashing来完成transaction,例如:如果Stash targets是RN-I,RN-D,legacy RN-F,or Non-request node。在这些环境中,HN不能给Requester返回error信号。这样错误的指定Stash target可以归为软件错误。
7、Snoop transactions
Snoop transaction响应可以包含Data error的data响应。对于Snoop transaction的响应,可以在不同packets中混合包含Okay和Data Error响应。不带数据的snoop transaction响应可以用Non-data Error来指示。表8为Snoop request响应合法的RespErr域值。
表8 Snoop request response packets legal RespErr field values
Data Pull request的DERR响应,不期望出现在Stash request的Comp响应中。Snoopee给Request的完成响应带数据和snoop和fowarding snoop transaction一样可以包含error指示。当同时发生Forwarding data给requester和返回data给HN,如果其它response没有遇到错误,只允许一个response携带Data Error指示。
在数据发送给Requester,但还没有发送给HN情况下,SnpRespFwded允许包含Non-data Error错误指示。在Non-data Error的SnpRespFwded响应中,Fwdstate的值必须的发送给Requester中CompData的Resp域值一样。表9为forward snoop response packets的合法RespErr域段值。
表9 Forward Snoop response packets legal RespErr field values
表10为 Forward snoop Data response packets legal RespErr field values
Posion bit用于指示一组data bytes是否已经被损坏了。随DAT packet一块传输的Posion,允许告知后续使用data告知该data已经损坏了。
当支持Posion的话:
在64bit块中,如果有其他任何有效的数据,Posion必须精确。其它情况下,Posion bit可以不care,例如64bit,8Bytes全部无效,那么Posion的值bucare。
使用Data_Poison属性去指示是否一个组件支持Posion功能。
DataCheck域用于检查DAT packet的data errors。当支持Data Check时:
使用Data_check属性去指示是否一个组件支持Data_check。
如果Data packet的接受者不支持Posion或DataCheck特性,需要的话,ICN必须将其转换成DAT packet的Data Error。如果支持Posion和DataCheck特性,但接口不是相似的话,需要遵循如下原则:
注意:Posion和DERR的不同之处在于: 收到带Posion error的Data packet通常会被receiver推迟,但是DERR error通常不会被receiver推迟。
对在检测到Posion error时将其指示到Posion bits,对于Sender来说已经足够了,但是否将其RespErr置成DERR不是需要的。
对在检测到DataCheck error时将其指示到DataCheck bits,对于Sender来说已经足够了,但是否将其RespErr置成DERR不是需要的。
Posion和DataCheck的域段是独立的,一个类型的错误不要求另一个类型的域段置位;
在一个Data packet中,如果RespErr域段设置成DERR或NDERR,那么Posion和DataCheck的域段值不关心。
CHI协议定义了两种类型错误:software based error和hardware based error。
Software based error
软件错误通常是发生在多笔访问同一个地址的操作,确采用了mismatch的Snoopable或memory属性;
软件错误可以导致一致性功能失效和数据值的损坏。CHI协议要求在发生软件错误时不能有死锁,所有的transactions仍然可以及时进行;
对于访问一份4KB memory区间,软件错误不能导致其它4KB区间的数据损坏;
对于Normal memory空间的地址,使用恰当的stores和软件CMO操作可以使memory空间返回确定的状态;
在访问peripheral device是,不能保证peripheral的正常工作。唯一一点要求就是外设对于CHI的访问,要返回合乎CHI协议的response。事件序列可能用于将peripheral device返回到不正确的已知工作状态为,是根据具体实现决定的。
Hardware based error
任何不适软件错误的其它protocol error都归为硬件错误。
如果硬件错误发生了,那么不能保证错误能够修复,系统可能会崩溃、死锁,或遭受一些不可恢复的失败。
本节描述CHI中Data Source和Trace Tag的机制,用于给debugging和tracing of system和monitoring of performance提供额外的支持。包含如下小节。
CHI协议允许Read request的Completer指定data的来源,是通过CompData、DataSepResp、SnpRespData和SnpRespDataPtl响应中的DataSource域段传输的,该域段设置在data error时也是有效的。
DataSource的值必须按如下赋值:
如果存在across chip,需要将到来的Data packet的DataSource值映射成不同的值,用于标识响应是来自remote chip cache,这个功能应该是由chip interface module来完成的。chip interface module可能采用的方法示例为:
Suggested DataSource values
图1展示了multichip配置和对于系统中不同组件的DataSource映射建议值的例子:
表11为建议的DataSource编码。
图1 Suggested DataSource values
对于Requester如何使用DataSource信息有两个例子如下:
CHI协议在每个通道包含了TraceTag bit,用于提供·增强debugging、tracing和系统性能测量。
合适设置TraceTag和怎样传输TraceTag域段的值按如下规则:
注意,以下列出一些Request-Response对的例子: