CHI里的Error handling机制

CHI协议支持DataError和Non-dataError两种错误报告,前者涉及数据错误,后者涉及非数据错误。Poison用于标记可能损坏的数据,而DataCheck则用于检测数据错误。如果数据包不支持特定错误报告机制,它们会被转换为DERR。错误报告优先在子包级别处理,必要时升级到包级别。发送端无需同时使用RespErr为DERR和子包错误报告。
摘要由CSDN通过智能技术生成

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域段的译码。

 可以看出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错误范围了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值