在大规模分布式 AI 模型训练场景中,训练任务往往横跨数千台服务器,涉及海量计算、通信与存储资源,系统复杂度极高,硬件故障发生概率显著增加。一旦单机故障未被及时发现,常引发级联效应,导致整个训练任务中断或严重减速,造成数小时的资源浪费。
典型故障多源于单机硬件问题(如 CUDA 错误、NVLink 链路异常、内存 ECC 错误等),进而扩散至 NCCL 通信超时或网络中断,影响数百台节点同时空闲。下图展示了常见故障类型、发生频率,以及各类监控指标对故障的覆盖比例:

HUATUO 项目支持监控的硬件故障类型包括:
本文重点剖析 Linux 内核 RAS 相关机制的原理实现,并结合实际案例说明其应用价值。
HUATUO(https://github.com/ccfos/huatuo)基于 Linux 内核的 MCE(Machine Check Exception)和 RAS 框架,通过 eBPF 高效捕获关键硬件事件,并关联设备详细信息。自内核 2.6 版本起,RAS 机制持续演进,引入了大量 tracepoint,支持轻量级、事件驱动的故障监控,足以覆盖绝大多数高频硬件故障场景。同时,HUATUO 还扩展支持网卡物理链路状态及 PFC/RDMA 拥塞监控。
现代 CPU 具备一定程度的硬件故障恢复能力。固件可自动处理可恢复故障;当故障无法自行恢复时,CPU 会将错误信息记录在特定 MSR(Model-Specific Register)中,并通过中断通知操作系统。
根据 IA32_MCi_STATUS 寄存器的状态,故障主要分为以下几类:

Linux 内核的 MCE 机制是硬件故障的核心感知与处理枢纽,而 RAS 框架则负责各类设备的针对性处理。

RAS(Reliability, Availability and Serviceability)是 Linux 内核保障系统可靠性的核心架构,主要包含以下子模块:
RAS 相关代码在内核中分布较广,下图整理了主要模块间的关系:

MCE 作为故障感知中枢,大多数硬件错误会先通过 MCE 中断或轮询被捕获。MCE 尝试自主处理部分可纠正错误(如读取 ECC 信息并恢复),同时为不同设备提供注册回调机制。 RAS 支持的设备模块通过向 MCE 框架注册回调函数,将各自的故障信息统一汇总,最终以标准化格式上报用户态。 以 Intel Xeon E5-2620 处理器的内存控制器为例(EDAC 模块为 sbridge):

edac_mc_handle_error() 中的 tracepoint: mc_event 为上层监控工具提供了可靠的事件源。
PCIe 规范定义了两种错误报告方式:基础错误报告(所有设备必备)和可选的 AER(Advanced Error Reporting)能力。AER 提供更丰富的寄存器组,用于详细错误定位与分析。


AER 通过状态寄存器记录错误,软件处理后需清除对应 bit 以恢复状态。以下为高级可纠正错误状态寄存器(Correctable Error Status Register)示例,错误发生时硬件自动置位对应 bit,软件写 1 清零:

高级可纠正错误屏蔽寄存器(Correctable Error Mask Register)允许软件选择性屏蔽特定错误报告(默认不屏蔽):

在 PCIe 拓扑中,Root Port 是错误消息的汇聚点。下游设备发生错误时,会将包含源设备 BDF(Bus:Device:Function)信息的 Error Message 发送给 Root Port。Root Port 再根据配置决定是否向系统上报。

内核中 AER 处理流程主要在中断上下文中完成:
irq_thread() → irq_thread_fn() → aer_isr() → aer_process_err_devices() → aer_print_error() // 打印错误信息 → handle_error_source() // 清除或恢复错误HUATUO 重点关注 aer_process_err_devices() 中的 tracepoint: aer_event,可获取设备标识、错误类型等完整信息,足以精确定位 PCIe 设备故障。
HUATUO 通过 tracepoint 实时捕获硬件故障事件,记录故障类型、设备标识、详细错误描述及时间戳等信息,并支持本地存储与 Elasticsearch 持久化。
HUATUO 捕获的线上网卡 carrier down 事件(经排查为光模块信号衰减导致),导致业务指标出现明显抖动:


交换机侧确认光模块问题:

{"hostname": "your-host-name","region": "xxx","uploaded_time": "2026-03-05T18:28:39.153438921+08:00","time": "2026-03-05 18:28:39.153 +0800","tracer_name": "netdev_event","tracer_time": "2026-03-05 18:28:39.153 +0800","tracer_type": "auto","tracer_data": {"ifname": "eth0","index": 2,"linkstatus": "linkstatus_admindown","mac": "5c:6f:11:11:11:11","start": false}}linkstatus 可能取值包括:
配套硬件丢包指标示例:
huatuo_bamai_netdev_hw_rx_dropped{host="hostname",region="xxx",device="eth0",driver="ixgbe"}0RDMA PFC 网络拥塞指标:
# HELP huatuo_bamai_netdev_dcb_pfc_received_total count of the received pfc frames# TYPE huatuo_bamai_netdev_dcb_pfc_received_total counterhuatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="0",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="1",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="2",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="3",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="4",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="5",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="6",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_received_total{device="enp6s0f0np0",host="hostname",prio="7",region="xxx"}0# HELP huatuo_bamai_netdev_dcb_pfc_send_total count of the sent pfc frames# TYPE huatuo_bamai_netdev_dcb_pfc_send_total counterhuatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="0",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="1",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="2",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="3",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="4",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="5",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="6",region="xxx"}0huatuo_bamai_netdev_dcb_pfc_send_total{device="enp6s0f0np0",host="hostname",prio="7",region="xxx"}0通用 RAS 硬件故障指标
huatuo_bamai_ras_hw_total{host="hostname",region="xxx"}0线上机器内存 corrected 错误监控与详细日志:


触发故障的设备:MEM故障类型:CORRECTEDtracer触发时间:2026-03-01 15:41:13.027触发源:EDAC具体设备反馈信息:memory read error on CPU_SrcID#0_MC#1_Chan#0_DIMM#0 (mc: 1 location:0:0:-1 address: 0x3ddc84140 grain:32 syndrome:0x0 err_code:0x0101:0x0090 ProcessorSocketId:0x0 MemoryControllerId:0x1 PhysicalRankId:0x0 Row:0x15da Column:0x100 Bank:0x3 BankGroup:0x1 retry_rd_err_log[0001a209 0000000000800000 0440d001 000015da] correrrcnt[0001000000000000000000000000 0000])Linux 内核 RAS 机制结合 MCE、EDAC、AER 等子系统,构建了从硬件错误感知到软件层上报与恢复的完整链路。HUATUO 项目通过 eBPF 轻量级捕获关键 tracepoint,实现对 CPU、内存、PCIe、网卡等硬件故障的实时、精准监控,为大规模分布式系统提供了可靠的故障诊断能力。
篇尾:
