Dskpimc? · 2023年04月18日 · 北京市

CHI里的Error handling机制

1. Data Error和Non-data Error

CHI协议支持了两种在packet层次上的错误上报(error reporting),分别为Data Error (DERR)和Non-data Error (NDERR)。这两种error通过RespErr域段传递,RespErr域段可用于Response和data channel的packets。以下是RespErr域段的译码。
image.png
 可以看出RespErr==0b10时DERR,RespErr==0b11是NDERR。对于1个transaction里,混合了EXOK和DERR响应是允许的,但不允许EXOK和NDERR响应混合。下面分别讲下它们。

  • Data Error, DERR:这种error是发生在可以正确访问地址,但地址中的data发生错误了。典型例子是由于ECC或parity检查导致的数据损坏。DAT packet中的RespErr、Poison和DataCheck域段支持Data Error。
  • Non-data Error, NDERR:这种error是用在和数据损坏无关的场景。CHI spec没有定义上报这种error的全部场景。在RSP和DAT packets的RespErr域段支持Non-data Error。Non-data Error场景通常有:

    • 访问的一个地址不存在;
    • 非法访问,比如写到RO地址上;
    • 使用1个不支持的transaction;

即使error response,所有的transaction flow都仍然要按照兼容协议的行为完成。

2. Poison和DataCheck

Poison用于标识一组data bytes是否先前已被损坏,它通常在DAT packets中伴随着data一块传递,这样允许在未来时刻用户可以发现data发生损坏了。当支持Poison时:

  • DAT packet的每64-bit data需要用1-bit Poison;
  • Data如果被标识为poisoned,那么它一定不能被任何requester使用,但允许它存到cache和memory里,未来有requester用到它的时候再报错,也就是延迟上报错误;
  • Poison的值一旦设置了,它必须跟随data一起传输;
  • 当1个poison error检测到,允许更过度poison data。也就是说假如只有1个64-bit data发生poisoned了,那么可以认为整个cacheline都poisoned了;
  • MTE tags不支持poison;

如果data是无效的,那么poison可以为任意值;如果data是有效的,那么poison必须要为精确值。

DataCheck域段用于检查DAT packet中的data errors,每64-bit的data支持8-bit的DataCheck,所以相当于是1-bit DataCheck保护8-bit data的。DataCheck其实就是校验位,用于产生奇校验的校验位。

3. DERR, Poison和DataCheck之间的转换

如果data packet不支持poison或datacheck特性,那么interconnect必须将它们转成DAT packet的Data Error(DERR)。

如果对Poison和DataCheck特性的支持在接口上不一致,那么应采用以下规则:

  • 如果Poison不支持的话,Poison必须映射到DataCheck或DERR。在这样的interface上,如果支持DataCheck的话,CHI spec期望优先映射到DataCheck域段上。因此在将poison转换到DataCheck时,如果有1-bit poison问题,那么对应的8-bit DataCheck都要进行操作来产生parity错误。
  • 如果DataCheck不支持的话,DataCheck必须映射到Poison或DERRICK。在这样的interface上,如果支持Poison的话,CHI spec期望优先映射到Poison域段上。因此在将DataCheck转换到Poison时,如果64-bit data单位内有任意bit的DataCheck发生parity错误,这64-bit对应的poison位就要设置为1。

在处理Poison和DERR上的区别是,接收端通常会延迟上报接收data packets中的poison错误,而接收端通常不会延迟上报DERR中的错误。

对于发送端来说,只需要指示出Data packet有poison错误的data就可以了,不需要再把RespErr域段标识为DERR。

对于发送端来说,只需要指示出Data packer中有DataCheck错误的data就可以了,不需要再把RespErr域段标识为DERR。

由于Poison和DataCheck域段是独立设置的,因此其中一种错误类型不需要设置另一种错误类型的。

如果Data packet中的RespErr域段的值为DERR或NDERR,那么Poison和DataCheck域段就不适用了,可以为任意值。

4. 总结

总结来说,CHI支持两种packet level的error上报机制:DERR和NDERR。两种sub-packet level的error上报机制:Poison和DataCheck。sub-packet level的两种机制可以升级到packet level的DERR,但是packet level error无法下降到sub-packet level error。如果发生error reporting方式转换,sub-packet level优先内转,实在不行,再升级转到packet level的DERR。

如果RespErr上报为DERR或NDERR,那么sub-packet level的error reporting可以被忽视;

只有RespErr不为DERR或NDERR时,sub-packet level的error reporting才有意义。

Poison和DataCheck的设置是独立的,并且发送端如果确定使用它们就足够标识出data错误的话,不需要再把RespErr域段标识为DERR,这样会多此一举,扩大data错误范围了。

作者:谷公子
文章来源:CSDN

推荐阅读

更多Arm AMBA 协议集技术干货请关注Arm AMBA 协议集技术专栏。
迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
7919
内容数
82
Arm AMBA协议集,APB,AHB,AXI,CHI等相关公开课回放及文章
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息