• 正文
  • 相关推荐
申请入驻 产业图谱

一文看懂CXL RAS特性

11小时前
349
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

RAS即Reliability、Availability和Serviceability。CXL的RAS能力是基于PCIe协议的。额外引入了一些特性来解决缓存一致性和内存问题。

1. CXL支持的RAS特性

下表列出了CXL具体支持的RAS特性,包括链路CRC和Retry、链路重训练和恢复、ECRC、Data poison、Viral等。

2. CXL错误处理

CXL可以同时承载三种协议:CXL.io,CXL.cache和CXL.mem。CXL.io具有类似pcie的语义,所有CXL Endpoint必须支持。

下图展示了CXL和CXL RAS相关内容。

链路和协议RAS,适用于CXL组件到组件的通信机制。

设备RAS,只适用于设备本身。

CXL Device错误处理:

当CXL设备返回坏的或可疑的数据时,必须确保数据的使用者知道,无论是在使用数据时还是使用之前。这允许使用者采取遏制措施。

CXL定义了两种错误遏制机制,poison和viral:

poison:CXL.io和CXL.cachemem的返回数据可能被标记为poison。

viral:CXL.cachemem支持viral,主要用于指示设备上更严重的错误情况。

当Metadata被怀疑时,设备必须在CXL.cachemem返回响应中将MetaField设置为No-Op。

如果CXL组件不在viral状态,则只要已知数据是坏的或可疑的,该组件就会将CXL接口上的数据消息标记poison。

如果使能viral,并且CXL组件处于viral状态,建议组件不要将CXL.cachemem接口上的后续数据响应标记poison,以避免错误污染。

Host可能向CXL连接的设备发送poison数据。CXL设备如何响应poison是设备特有的,但必须遵循PCIe指导。设备必须清楚如何处理poison数据。在某些情况下,简单地忽略poison数据可能会导致静默数据损坏(Silent data Corruption,SDC)。CXL设备需要以64字节粒度记录设备接收的poison数据。

由于没有错误引脚,不能用poison指示处理的设备错误应该由设备通过message返回到主机。为此,表12-2总结了错误类型及其映射。

对于实现了Memory Error Logging和Signaling Enhancement的设备,这些设备应该按照表12-2处理所有非内存错误。

3. CXL.cache和CXL.mem的Isolation

CXL.cache和CXL.mem的隔离是CXL Root Port(RP)的可选标准能力。这种隔离将停止各自协议上的通信。此外,一旦触发,RP将综合该协议上所有pending和后续事务的响应。

CXL规范定义了两种触发机制:

Link Down。如果RP支持CXL.cache隔离,并且软件使能CXL.cache隔离,则Link Down将无条件触发CXL.cache隔离。如果RP支持CXL.mem隔离,且软件使能CXL.mem隔离,则Link Down将无条件触发CXL.mem隔离。

事务超时。支持CXL.cache隔离的RP可以配置成这样一种方式,即CXL.cache超时触发CXL.cache隔离。CXL.mem也是同理。

4. CXL Viral 处理

CXL链路和CXL设备需要支持viral。viral是一种错误遏制机制。平台必须在启动时使能viral。viral的host实现允许平台通过写入寄存器来启用viral功能。类似地,写入设备上的BIOS可访问控制寄存器以使能设备上的viral。viral的支持和使能控制在DVSEC寄存器中。

使能后,只要检测到Uncorrected_Fatal错误,就会产生viral指示。viral并不是现有错误报告机制的替代,它是一种额外的错误遏制机制。错误检测器通过AER报告错误并产生viral指示。任何能够报告Uncorrected_Fatal错误的实体也必须能生成viral指示。

CXL.cache和CXL.mem预先使能了viral。viral需要双向传播。当viral功能启用且host遇到viral状态时,host应通过CXL.cache和/或CXL.mem与下游组件传递viral。viral指示必须在可能受到错误影响的数据之前到达。如果主机收到来自任何CXL组件的viral指示,主机应将viral传给所有下游组件。

所有类型的Convention复位都应清除viral状态。CXL复位和FLR复位对viral状况没有影响。

Device考虑:

尽管设备对viral的反应是特定于设备的,但期望设备采取与viral要求一致的错误遏制措施。设备必须阻止坏数据被提交到永久存储中。如果设备连接到永久存储或连接到连接永久存储的外部接口,则设备需要自我隔离以符合viral兼容,即设备必须不依赖主机帮助而采取遏制措施。

设备采取的遏制措施不能阻止主机继续前进。这对于判断和避免错误污染很重要(例如,将读事务的数据保留到设备内存可能会导致主机超时)。因此,在viral检测时,除满足遏制要求外,设备还应:

Drop写入到设备上或连接到设备的持久化HDM区域。

始终返回一个完成响应。

在所有包含MetaField的响应中将MetaField设置为No-Op。

当试图将状态从dirty修改为clean时,执行Set Shutdown State命令失败,并出现内部错误。

在GPF流程后,不要将Shutdown状态转换为clean状态。

在收到viral条件之前,通过CXL接口完成的任何写操作提交到持久HDM范围。

保持对snoop的响应。

完成对主机内存的pending写。

完成对设备易失性内存的所有读写。

当设备进入viral状态且viral使能时,设备应:

设置Viral Status bit,表示发生了viral。

遏制。将错误遏制在设备中,并按上面列出的步骤进行操作。

将viral状态反馈给CXL.cache和CXL.mem,传至host。将viral传给虚拟层次结构中的所有设备,包括host。

5. Maintenance

维护操作包括media维护、media测试、模块测试等。维护操作由维护操作类和维护操作子类标识。设备可以支持与一个维护操作类相关的一个或多个维护操作子类。

设备可能通过事件记录来通知系统软件或固件需要进行维护操作。当设备需要维护时,Event Record Flags中的Maintenance Needed bit设置为1,推荐维护操作的类别由Maintenance Operation Class字段表示。

Perform Maintenance命令发起维护操作。要执行的维护操作由Maintenance Operation Class字段和Maintenance Operation Subclass字段指定。

6. CXL Error Injection

错误注入机制的目的是允许系统验证和系统固件/软件开发等创建错误场景和错误处理流程。为此,建议CXL上游端口和下游端口实现以下错误注入到指定的地址:

一种CXL.io UC错误(可选,与PCIe类似)。

一种CXL.cache UC错误

一种CXL.mem UC错误

Link Correctable error:包括Transient error和Persistent error。

在读取到指定地址时返回Poison?(只用于CXL.mem)。

 

参考:CXL?Specification?3.0/3.1

相关推荐