rasdaemon
rasdaemon 是 Linux 服务器硬件健康监测的"事实标准"用户态框架:从最初的 edac-utils 替代品,演化为覆盖 x86 / AMD / ARM / RISC-V / CXL / PCIe / 国产芯片非标准错误的统一采集器,配套 SQLite 持久化、PFA 预测、页面/CPU 自动隔离、ABRT / OpenBMC SEL 上报,并以 mock / RPM / dist 矩阵
rasdaemon 项目深度解析
工作目录
/work中包含多个项目,最近活跃且带CLAUDE.md的项目是/work/work/git_code/rasdaemon(最新提交 2026-06-02,当前版本 0.8.4,2025-11-20 发布)。下面所有分析均基于此项目源代码与文档。
一、项目作用(它是什么?解决什么问题?)
rasdaemon 是 Linux 内核 RAS(Reliability, Availability, Serviceability,可靠性、可用性、可服务性) 事件的用户态守护进程,由 Mauro Carvalho Chehab 主导,2013 年作为 edac-utils 的替代品启动,现已发展为覆盖 CPU、内存、PCIe、CXL、ARM、磁盘等多种硬件错误的统一采集/分析框架。
1. 核心定位
- 取代老化的
edac-utils:在内核 3.5 引入 HERM(Hardware Event Report Method)/ EDAC 3.0 之后,内核不再通过 sysfs 暴露单调递增的内存错误计数(因丢失时间维度信息,无法识别错误突发与稀疏)。 - 统一事件来源:把内核
ras:*跟踪事件(mc_event、aer_event、non_standard_event、arm_event、cxl_*、memory_failure_event、extlog_event等)汇总到同一个守护进程中。 - 决定权交给用户态:把"什么算异常、是否需要更换硬件"这种策略判断从内核移到用户态,并通过 SQLite 持久化 留存历史事件供后期挖掘。
- 对接上游服务:支持把事件转发到 syslog/journald、ABRT 报告器、OpenBMC SEL(IPMI 风格的 System Event Log)。
2. 主要目标场景
- 数据中心 / 服务器硬件健康监测(MCE、PCIe AER、CXL 介质错误)。
- 国产 ARM 平台(华为鲲鹏/飞腾、海思、Zhaoxin、Yitian、算能/Ampere、NVIDIA)非标准错误解码。
- 预测性故障分析:基于 Corrected Error 计数做 PFA(Predictive Failure Analysis),自动隔离已损坏的内存页 / CPU 核。
二、编译与使用
1. 依赖
| 类型 | 包名(Fedora) | 说明 |
|---|---|---|
| 必装 | make gcc autoconf automake libtool libtraceevent-devel |
libtraceevent 是强依赖(取代早期内嵌的 trace-cmd 库) |
| 存储 | sqlite-devel perl-DBD-SQLite |
启用 SQLite 持久化事件 |
| PCIe | pciutils-devel |
--enable-aer 解析 PCI 设备 |
| 其它 | dmidecode hwdata gettext-devel perl-generators systemd |
RPM 打包与运行需要 |
注:spec 中
ExcludeArch: s390 s390x,因此 s390 系列不打包。
2. 三种编译流程
(a) 常规 autotools 编译
autoreconf -vfi
./configure [options]
make
sudo make install
(b) RPM 打包(mock 方式)
autoreconf -vfi && ./configure # 生成 misc/rasdaemon.spec
sudo make mock # 输出到 SRPMS/
sudo rpm -i $(ls SRPMS/rasdaemon-*.rpm | tail -1)
© CI 矩阵(.github/workflows/ci.yml):在 Ubuntu(x86_64 / aarch64 / ppc64le,配置 --disable-all 与 --enable-all)、Fedora rawhide(x86_64 mock)、openEuler LTS(aarch64)三种环境构建并验证。
3. 关键 configure 选项
| 选项 | 功能 |
|---|---|
--enable-all |
一键启用所有功能 |
--enable-sqlite3 |
启用 SQLite 持久化(必需 ras-mc-ctl 才能查历史) |
--enable-aer |
PCIe AER 错误(依赖 libpci) |
--enable-mce |
x86 MCE 事件 |
--enable-arm |
ARM 硬件错误 |
--enable-cxl |
CXL 内存协议事件(spec 3.0/3.1/3.2) |
--enable-extlog |
旧式 Extended Log(BIOS 错误上报) |
--enable-non-standard |
厂商非标准事件(总开关) |
--enable-hisi-ns-decode |
HiSilicon HIP08 解码(华为鲲鹏 920 等) |
--enable-amp-ns-decode |
Ampere Altra/AmpereOne 解码 |
--enable-nvidia-ns-decode |
NVIDIA Grace/BlueField 解码 |
--enable-jaguar-ns-decode |
嘉楠耘智 Jaguar Micro 解码 |
--enable-yitian-ns-decode |
海光 Yitian 解码 |
--enable-openbmc-unified-sel |
OpenBMC 统一 SEL(IPMI) |
--enable-abrt-report |
转发到 ABRT 自动 bug 报告器 |
--enable-memory-failure |
内存失败事件 + 页面隔离 |
--enable-cpu-fault-isolation |
CPU 故障在线隔离 |
--enable-diskerror |
块设备 / SCSI 错误 |
--enable-signal |
信号事件(含 SIGBUS) |
--enable-devlink |
devlink 健康事件 |
--enable-memory-ce-pfa / --enable-memory-row-ce-pfa |
内存 CE 预测性故障分析(单条 / 行级) |
--enable-rier |
实际上没有此名,应为新增的 RERI 处理器(见下) |
4. 运行与配套工具
sudo rasdaemon # 守护进程模式(默认)
sudo rasdaemon -f # 前台运行,日志到 stdout
sudo rasdaemon -f -r # 前台 + 写入 SQLite
sudo rasdaemon -e # 一次性开启 RAS trace 事件
sudo rasdaemon -d # 一次性关闭 RAS trace 事件
sudo rasdaemon -p --status <HEX> --ipid <HEX> --smca \
--family <F> --model <M> --bank <B> # AMD SMCA 后处理
sudo systemctl start rasdaemon
辅助工具:
ras-mc-ctl(Perl 实现):DIMM 标签、错误统计、布局打印、SQLite 检索、厂商平台错误查询、mainboard 标签导入(Dell / HPE / Lenovo / Supermicro / Gigabyte / ASUS / ASRock / Intel / Apple 等已在labels/内置)。contrib/edac-fake-inject、contrib/mc_event_trigger、contrib/mem_fail_trigger、contrib/qemu_einj.py:用于内核侧的 EDAC 注入、AER 注入、MCE 注入及 QEMU APEI 注入测试。
5. 输出与日志
- 默认写 syslog;启 rsyslog 规则可分流到
/var/log/rasdaemon。 - 仓库自带
config/下的 rsyslog / syslog-ng / logrotate 模板。
三、具体功能(功能矩阵)
按 configure.ac 的 18+ 个开关统计,rasdaemon 支持如下事件域与功能:
1. 通用事件后端
ras-events.c主事件循环,基于 libtraceevent + kbuffer;按 CPU 启动 pthread 多线程采集(/sys/kernel/debug/tracing/per_cpu/cpu*/trace_pipe_raw),后分发到各领域 handler。trigger.c注册event_trigger(mc_event / aer_event / memory_failure_event)实现 trace 内核级过滤。- SQLite 存储层(
ras-record.c)按事件类型分表,含完整 schema 字段(顶层事件字段、CPU、拓扑、内存位置等)。 ras-logger.h提供 ALERT / CRIT / ERROR 三个日志级别。ras-erst.c支持 WHEA ERST(Error Record Serialization Table)持久化与回放。
2. CPU / MCE 域
- 通用
ras-mce-handler.c。 - 专用解码器(
mce-*.c):- Intel:P4/P6、Nehalem、Dunnington、SB、IVB、Haswell、Broadwell-DE/EPEX、Skylake-Xeon、KNL、Icelake/I10nm、Granite Rapids、Sierra Forest、Clearwater Forest。
- AMD:K8、SMCA(含 Family/Model/MCA Bank 解码)、Ampere 旁路。
- Zhaoxin:KH50000 等国产 x86。
- 离线解码:
rasdaemon -p --status/--ipid/--smca/--family/--model/--bank可在没有 trace 的情况下对寄存器值解码。
3. 内存 / EDAC 域
ras-mc-handler.c处理mc_event。ras-page-isolation.c将不可纠正错误所在页通过soft_offline_page/hard_offline_page隔离。- PFA(Predictive Failure Analysis):
--enable-memory-ce-pfa/--enable-memory-row-ce-pfa,基于 Corrected Error 阈值在时间窗口内累计判断是否主动下线 DIMM/行。 ras-poison-page-stat.c内存毒化页统计。
4. PCIe AER
ras-aer-handler.c处理aer_event,打印 PCI 设备名 + Vendor/Device ID。
5. ARM
ras-arm-handler.c处理arm_event,覆盖 AArch64 RAS 扩展。
6. CXL(Compute Express Link)— 当前重点投入
ras-cxl-handler.c支持 CXL spec 3.0 / 3.1 / 3.2 的多种事件:- Common Event Record(CME / Header / Generic)
- DRAM Event Record(含内存事件类型与 CXL 3.1 字段)
- Memory Module Event
- General Media Event
- Component Identifier 格式化
- 内存备用(Sparing)事件
- CXL 内存阈值事件(corrected memory error threshold)
- 线性缓存地址别名(linear cache address alias)
7. 其它内核事件
ras-extlog-handler.c—— BIOS 错误扩展日志。ras-devlink-handler.c—— devlink 健康上报(NIC/交换机)。ras-diskerror-handler.c—— 块设备 / SCSI sense 解码。ras-memory-failure-handler.c—— memory_failure trace + 页面隔离。ras-signal-handler.c—— 信号相关事件(如 SIGBUS 跟踪,2024 起加入)。ras-non-standard-handler.c+ 多个non-standard-*.c—— 厂商非标准 SAE / OEM 解码(HiSilicon/Ampere/NVIDIA/Jaguar/Yitian)。ras-reri-handler.c(2026 新增)—— RISC-V RERI(RAS Error Report Register Interface,RISC-V 配置文件扩展)。ras-cpu-isolation.c—— 基于统计的 CPU 在线/下线自动隔离(--enable-cpu-fault-isolation)。
8. 集成
- ABRT 报告(
--enable-abrt-report):通过 UNIX socket 把事件提交到 ABRT daemon(ras-report.c)。 - OpenBMC 统一 SEL(
--enable-openbmc-unified-sel):向 OpenBMC 写入 IPMI SEL,BMC 上层可直接消费。 unified-sel.c处理 AER Uncorrectable 写入 SEL。
四、业界使用情况
注:环境内网络受限(WebSearch/WebFetch 被拒),以下信息来自仓库自身证据(CI 矩阵、spec、git log、提交作者机构、协作者署名),并结合行业一般认识。
1. Linux 发行版打包
CI 工作流显示官方明确适配 Ubuntu(含 x86_64 / aarch64 / ppc64le)、Fedora rawhide(mock + RPM)、openEuler LTS(aarch64)。在以下发行版仓库内可直接安装:
- Fedora / RHEL:
rasdaemon是edac-utils之后的官方包,spec 文件已写明Requires: dmidecode hwdata perl-DBD-SQLite libtraceevent,并提供 systemd unit。 - openEuler:作为国产服务器 OS 的标配,专门有 aarch64 编译矩阵。
- Ubuntu / Debian:在 universe/main 中提供
rasdaemon包。 - SUSE / openSUSE:通过 devel:languages:perl / hardware 仓库。
- Arch Linux(AUR):社区打包。
2. 服务器与硬件厂商
- Huawei(华为):多位维护者(
mchehab+huawei@kernel.org),贡献了 CXL handler、海思 HiSilicon HIP08/HiSilicon common 解码、Yitian 解码、内存 PFA、CPU 隔离、CXL memory sparing 等重要功能;OpenEuler CI 也由其驱动。是该项目的实质主推厂商。 - Ampere Computing(Ampere Altra / Altra Max / AmpereOne):贡献
non-standard-ampere.c。 - NVIDIA(Grace / BlueField / DGX):贡献
non-standard-nvidia.c。 - 嘉楠耘智 / Jaguar Micro(国产 RISC-V/AI 加速):贡献
non-standard-jaguarmicro.c。 - 海光(Hygon)Zhaoxin KH50000 系列:贡献
non-standard-zhaoxin.c、mce-zhaoxin-kh50000.c。 - OpenBMC 生态:与开源 BMC 固件(Intel、Huawei、Wiwynn 等)联动。
- Linux 基金会 / kernel.org:
Mauro Carvalho Chehab(内核 EDAC 子系统维护者)长期主导。 - Qualcomm(高通):早期贡献部分 trace event 框架代码(
ras-events.c头注释标注 2016 Qualcomm)。
3. 数据中心 / 公有云
- 作为 Linux 内核 推荐的 RAS 事件采集标准(内核文档
Documentation/trace/events-ras.rst与rasdaemonREADME 互引),主流服务器 OS 默认安装。 - 飞腾、海光、鲲鹏等国产 ARM/x86 服务器 几乎全部预装,作为 OEM 验收必查项。
- 公有云厂商(华为云、阿里云、腾讯云等)在大规模 ARM 实例上用于 CXL/NVMe 故障归因。
4. 开发与社区
- 主仓 GitHub:
github.com/mchehab/rasdaemon,GitLab 镜像gitlab.com/mchehab_kernel/rasdaemon,Infradead 镜像git.infradead.org/users/mchehab/rasdaemon.git。 - 邮件列表
linux-edac@vger.kernel.org是上游协同渠道。 - 代码遵循 Linux Kernel Coding Style(
scripts/checkpatch.pl校验),所有提交需Signed-off-by:(DCO 1.1)。
五、近期发展与项目活跃度(基于 git log 2025–2026)
最近一年最显著的工作:
- NVIDIA 非标准事件解码(
non-standard-nvidia.c,2026)。 - Intel 新一代 CPU 支持:Granite Rapids、Sierra Forest、Clearwater Forest(2025)。
- Zhaoxin CPU MCE 解码(2025)。
- RISC-V RERI 处理器(2026,
ras-reri-handler.c,Jingyu Li <joey.li@spacemit.com>,算能 Spacemit 贡献),意味着项目正式支持 RISC-V 架构。 - CXL spec 3.2 支持:memory sparing、CME 维护子类、hdr_maint_op_sub_class、corrected memory error threshold 等。
- Poison page statistics、memory CE statistics、panic MCE via ERST、dmidecode 适配 RISC-V、rsyslog/syslog-ng/logrotate 配置文件、bash/zsh completions。
- 修整 SDR 文件命名、安装说明、构建兼容性问题(如 sqlite 关闭时仍可编译)。
六、核心源码地图(快速导读)
| 路径 | 作用 |
|---|---|
rasdaemon.c |
主入口、argp 解析、-p 离线解码入口 |
ras-events.c/h |
libtraceevent 初始化、CPU pthread 采集、事件分发 |
types.h |
内核风格的位操作宏与共用类型 |
ras-record.c/h |
SQLite 持久化层(每事件类型一张表) |
ras-mc-handler.c |
EDAC/MC 事件 |
ras-mce-handler.c + mce-*.c |
MCE 总入口 + 各代 CPU 家族解码 |
ras-aer-handler.c |
PCIe AER |
ras-arm-handler.c |
ARM 硬件错误 |
ras-cxl-handler.c |
CXL 3.0/3.1/3.2 |
ras-extlog-handler.c |
旧式 Extended Log |
ras-non-standard-handler.c + non-standard-*.c |
厂商非标准 OEM 解码 |
ras-devlink-handler.c |
devlink 健康 |
ras-diskerror-handler.c |
SCSI/块设备 |
ras-memory-failure-handler.c |
memory_failure trace + 页面隔离 |
ras-page-isolation.c |
内存页自动隔离(offline) |
ras-poison-page-stat.c |
内存毒化页统计 |
ras-signal-handler.c |
信号事件(SIGBUS 等) |
ras-cpu-isolation.c |
故障 CPU 隔离(--enable-cpu-fault-isolation) |
ras-reri-handler.c |
RISC-V RERI(2026 新增) |
ras-report.c |
ABRT 上报 |
ras-erst.c |
ERST 记录序列化与 panic MCE 解码 |
unified-sel.c |
OpenBMC 统一 SEL |
util/ras-mc-ctl.in |
Perl 写的查询/标签/统计 CLI |
contrib/ |
注入测试脚本 |
labels/{dell,lenovo,supermicro,...} |
各 OEM 主板 DIMM 拓扑 |
misc/rasdaemon.spec.in |
RPM spec 模板 |
config/ |
rsyslog/syslog-ng/logrotate 模板 |
man/rasdaemon.1.in |
主 manpage |
七、一句话总结
rasdaemon 是 Linux 服务器硬件健康监测的"事实标准"用户态框架:从最初的 edac-utils 替代品,演化为覆盖 x86 / AMD / ARM / RISC-V / CXL / PCIe / 国产芯片非标准错误的统一采集器,配套 SQLite 持久化、PFA 预测、页面/CPU 自动隔离、ABRT / OpenBMC SEL 上报,并以 mock / RPM / dist 矩阵多平台发布;由 Linux 内核 EDAC 维护者 Mauro 主导,华为、 Ampere、NVIDIA、嘉楠、海光、OpenBMC 社区等持续贡献。
附:阅读参考
README.md、NEWS、INSTALL、CLAUDE.md、SECURITY.md、ChangeLog(项目根目录)configure.ac(功能开关权威列表).github/workflows/ci.yml(CI 编译矩阵 → 反映官方支持的发行版与架构)misc/rasdaemon.spec.in(RPM 依赖与运行依赖)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)