1. Arm CMN-600AE错误处理架构概述
在现代计算系统中,错误处理机制是确保系统可靠性的基石。Arm CoreLink CMN-600AE作为一款高性能一致性网状网络互连架构,其错误处理系统采用了分层设计理念,能够有效应对从瞬时性单比特错误到致命性系统故障等各种异常情况。
CMN-600AE的错误处理架构包含三个关键层级:
- 错误检测层:通过硬件电路实时监控数据传输和存储过程
- 错误分类层:根据错误严重程度进行分级处理
- 错误响应层:执行预设的恢复策略或触发系统级响应
这种分层设计使得系统能够根据错误性质采取最合适的处理方式,既避免了过度反应导致的性能损失,又能确保严重错误得到及时处理。
2. 错误类型与处理机制
2.1 可纠正错误(Corrected Error, CE)
可纠正错误是CMN-600AE中最常见的错误类型,通常由高能粒子撞击或信号完整性等问题引起的单比特翻转。这类错误的特点是:
- 可通过ECC或奇偶校验机制检测并自动纠正
- 不会影响系统正常运行
- 通常不需要软件干预
典型CE场景包括:
- SLC(系统级缓存)数据RAM中的单比特ECC错误
- 事务重放恢复的管道错误
- 总线传输中的瞬时性错误
CE处理流程:
- 错误检测:硬件检测到可纠正错误
- 计数器更新:ERRMISC.CEC计数器递增
- 状态标记:设置ERRSTATUS.AV(地址有效)和ERRSTATUS.MV(杂项有效)
- 信息记录:错误属性记录在ERRADDR和ERRMISC寄存器
- 溢出处理:若CEC计数器溢出,则设置ERRSTATUS.V、ERRSTATUS.CE和ERRMISC.CECOF
提示:在CE频繁发生的场景中,建议监控CEC计数器溢出情况,这可能是潜在硬件问题的早期征兆。
2.2 延迟错误(Deferred Error, DE)
延迟错误属于不可纠正但可暂时容忍的错误类型,其特征包括:
- 检测节点与数据使用节点不同
- 数据被标记为毒化(poison)
- 系统可继续运行但存在潜在风险
典型DE场景:
- SLC数据RAM中的双比特ECC错误
- SLC中检测到的数据检查错误
DE处理流程:
- 错误记录:将错误信息记录到ERRSTATUS、ERRADDR和ERRMISC寄存器
- 状态标记:设置ERRSTATUS.V和ERRSTATUS.DE
- 中断屏蔽:通过ERRCTLR.FI和ERRCTLR.UI屏蔽RAS控制块信号
- 多次错误处理:若检测到多个DE,设置ERRSTATUS.OF(溢出)
2.3 不可纠正错误(Uncorrectable Error, UE)
不可纠正错误是最严重的错误类型,通常会导致系统功能异常或数据损坏,其特征包括:
- 控制逻辑节点出现错误
- 继续运行可能导致系统无法恢复的损坏
- 需要立即处理
典型UE场景:
- SLC标签中的双比特ECC错误
- Flit奇偶校验错误
- 响应包中的非数据错误(NDE)
UE处理流程:
- 错误记录:将错误信息记录到ERRSTATUS、ERRADDR和ERRMISC寄存器
- 状态标记:设置ERRSTATUS.V和ERRSTATUS.UE
- 中断屏蔽:通过ERRCTLR.UI屏蔽RAS控制块信号
- 多次错误处理:若检测到多个UE,设置ERRSTATUS.OF
3. 关键组件的错误处理实现
3.1 HN-F节点的错误处理
HN-F(Home Node-Fully coherent)是CMN-600AE中处理一致性请求的核心组件,其错误处理能力包括:
3.1.1 ECC错误处理
HN-F检测三种类型的ECC错误:
- SF(Speculative Fetch)标签RAM错误
- 单比特:记录为CE
- 双比特:记录为DE,禁用SF标签RAM
- SLC标签RAM错误
- 数据RAM错误
- 单比特:记录为CE
- 双比特:记录为DE,数据标记为毒化
3.1.2 毒化错误处理
当HN-F分配数据时检测到毒化错误:
- 若por_hnf_aux_ctl.hnf_poison_intr_en==1:记录为UE
- 否则:按配置处理
3.1.3 非数据错误(NDE)处理
HN-F从RN-F、RN-I和SN-F接收NDE:
- 若缓存行在SLC数据RAM中分配:记录为UE
- 否则:将错误作为NDE传播给请求者
3.1.4 MPU访问违规处理
HN-F检测来自RN的非法访问:
- 记录请求者信息到por_hnf_erraddr(_NS)和por_hnf_errmisc(_NS)
- 在por_hnf_errstatus(_NS)中记录为UE
- 对一致性请求总是报告NDE
3.2 HN-I节点的错误处理
HN-I(Home Node-I/O)处理I/O空间请求,其错误处理机制包括:
3.2.1 请求错误处理
HN-I检测以下请求类型错误:
- 一致性读
- CleanUnique/MakeUnique
- 一致性/CopyBack写
- 原子操作
- 非法配置读写(HN-D专用)
通过por_hni_cfg_ctl.reqerr_cohreq_en配置位控制NDE响应发送和错误记录。
3.2.2 数据错误处理
写数据错误处理分两种情况:
- AXI/ACE-Lite写请求(无请求错误):
- 配置写请求(无请求错误):
- 检测到部分ByteEnable错误、数据检查错误或毒化
- 发送NDE响应,记录为DE
3.2.3 响应错误处理
HN-I检测以下下游响应错误:
- BRESP上的SLVERR或DECERR(早期完成)
- 转换为CHI DE或NDE传播给请求者
3.2.4 MPU访问错误处理
检测到非法MPU访问时:
- 记录请求信息到错误日志寄存器
- 标记为UE
- 对特定请求类型发送NDE
3.3 SBSX节点的错误处理
SBSX(Subordinate Bridge Slave Extension)主要处理AXI接口错误:
3.3.1 毒化错误处理条件
当下游AXI内存控制器不支持POISON(por_sbsx_unit_info.axdata_poison_en=0)且CHI写数据有毒化标记时,SBSX检测并记录错误。
3.3.2 错误响应映射
SBSX将AXI侧错误映射为CHI响应:
| 错误源 |
AXI侧错误 |
CHI响应 |
| RDATA |
Decode错误 |
NDE on COMP_DATA |
| RDATA |
Slave错误 |
Poison on COMP_DATA |
| BRESP |
Decode错误 |
NDE on COMP |
| BRESP |
Slave错误 |
DE on COMP |
3.4 CXHA节点的错误处理
CXHA(CCIX Home Agent)处理CCIX协议错误,主要检测两种类型:
-
写数据RAM的Byte-Enable字段奇偶错误:
-
读/写数据RAM的数据和毒化字段奇偶错误:
- 记录为DE
- 设置对应毒化位
- 若毒化字段错误,所有毒化位置1
4. 错误检测与报告机制
4.1 错误状态寄存器解析
CMN-600AE通过一组寄存器记录错误状态:
4.1.1 ERRSTATUS寄存器
| 字段 |
描述 |
| V |
错误记录有效 |
| UE |
不可纠正错误 |
| DE |
延迟错误 |
| CE |
可纠正错误 |
| OF |
错误溢出标志 |
| AV |
错误地址有效 |
| MV |
杂项信息有效 |
4.1.2 ERRMISC寄存器
ERRMISC作为辅助错误综合征寄存器,其字段因组件和错误类型而异:
| 组件 |
重要字段 |
| HN-I |
LPID[4:0], ERRSET[12:0], ORDER[1:0] |
| HN-F |
CEC[15:0] (CE计数器), SIZE[2:0], MEMATTR[3:0] |
| SBSX |
SIZE[2:0], MEMATTR[3:0], SRCID[10:0] |
| CXHA |
ERRSRC[1:0] |
4.2 错误中断处理流程
CMN-600AE错误中断处理基本流程:
- 错误发生并被检测
- 设置错误组状态寄存器(errgsr)相应位
- 根据ERRCTLR配置决定是否触发中断
- 若中断使能,立即生成中断请求
- 软件读取错误记录确定错误源和类型
- 采取适当恢复措施
- 清除ERRSTATUS.V位以复位中断
中断类型与错误类型映射:
| 错误类型 |
中断类型 |
| 不可纠正错误 |
错误恢复中断(若ERRCTLR.UI==1) |
| 延迟错误 |
无错误恢复中断 |
| 可纠正错误 |
无错误恢复中断 |
4.3 错误溢出处理
ERRSTATUS.OF标志表示多个错误情况:
- 0b0:仅检测到最高优先级错误(UE>DE>CE)
- 0b1:检测到多个同优先级错误
OF标志更新规则:
- UE优先级最高,DE次之,CE最低
- 新错误优先级高于当前错误时,OF清零
- 新错误优先级等于当前错误时,OF置1
5. 高级错误处理功能
5.1 CCIX协议错误消息支持
CMN-600AE CML配置支持向CCIX错误代理发送协议错误(PER)消息:
5.1.1 CXLA配置寄存器
-
CCIX PER消息负载寄存器:
- por_cxla_permsg_pyld_0_63
- por_cxla_permsg_pyld_64_127
- por_cxla_permsg_pyld_128_191
- por_cxla_permsg_pyld_192_255
-
CCIX PER消息控制寄存器:
-
CCIX错误代理ID寄存器:
5.1.2 PER消息触发机制
- 外部错误聚合器:
- 将PER负载写入por_cxla_permsg_pyld_*寄存器
- 设置por_cxla_permsg_ctl.per_msg_vld_set
- CMN-600AE发送PER消息到指定CCIX链路
5.2 错误处理与系统地址映射
CMN-600AE错误处理与系统地址映射(SAM)紧密集成:
5.2.1 RN SAM目标ID选择
RN SAM采用优先级目标ID选择策略:
- DVM事务:最高优先级
- GIC区域
- 非哈希区域
- 哈希区域
- 默认区域:最低优先级
5.2.2 哈希与非哈希区域
内存分区可配置为:
- 哈希区域:分布在多个目标设备
- 非哈希区域:分配给单个设备
特殊配置场景:
- 使用SCG区域寄存器处理HN-I/HN-D/HN-T目标
- 使用非哈希区域寄存器处理HN-F目标
6. 错误处理实践建议
6.1 错误监控策略
- 定期轮询错误状态寄存器
- 为关键组件设置错误阈值警报
- 实现错误率趋势分析
- 建立错误严重程度分级响应机制
6.2 错误恢复最佳实践
-
可纠正错误:
-
延迟错误:
-
不可纠正错误:
- 立即停止受影响操作
- 启动备用系统(如有)
- 收集完整错误日志供分析
6.3 性能与可靠性权衡
-
中断频率调节:
- 通过ERRCTLR.CFI控制CE中断
- 平衡实时性与系统开销
-
错误处理延迟:
-
资源占用优化:
在实际部署中,我们通常会在系统初始化阶段全面配置错误处理参数,包括中断使能、错误阈值和恢复策略等。对于高性能应用,建议实现分层错误处理策略,将关键路径错误与非关键错误分开处理,以最小化错误处理对系统性能的影响。