EDAC 子系统是什么
EDAC 是 Linux 内核的内存错误检测与上报子系统,它在 sysfs 下按内存控制器与内存条两级组织错误计数:mc 目录代表控制器,其下的 dimm 子目录代表具体内存条。可纠正错误(CE)与不可纠正错误(UE)分别有独立计数,适合脚本化采集做趋势监控。它的价值在于把「内存有问题」这句话落到具体是哪个控制器下的哪一条内存。
基本信息
| 适用平台 | Linux 内核,需要平台与固件支持并在 BIOS 中启用 ECC |
|---|---|
| 目录结构 | /sys/devices/system/edac 下按 mc 与 dimm 两级组织 |
| 计数文件 | ce_count 与 ue_count,部分平台还提供逐 dimm 的计数 |
| 读数特点 | 多为累计值,判断趋势需要前后采样做差 |
| 权限要求 | 读取 sysfs 计数普通用户即可,加载与配置模块需要 root |
典型使用场景
- 巡检采集:定时读取计数并入库,观察增长斜率
- 故障定位:把错误计数与日志编号关联到具体槽位
- 换条验证:更换内存后确认新采样的计数保持在低位
- 容量与配置核对:结合 dmidecode 确认插槽与容量分布
- 验收测试:新机压测期间关注是否出现早期错误
读取计数
读取计数
ls /sys/devices/system/edac/mc/ # 查看控制器目录
cat /sys/devices/system/edac/mc/mc0/ce_count # 控制器级可纠正错误
cat /sys/devices/system/edac/mc/mc0/ue_count # 控制器级不可纠正错误
for d in /sys/devices/system/edac/mc/mc0/dimm*/; do echo $d; cat $d/dimm_ce_count $d/dimm_ue_count 2>/dev/null; done # 逐条内存计数
edac-util -v 2>/dev/null | head -20 # 已安装工具时的汇总视图目录与字段读法
| 路径或字段 | 含义 | 判断要点 |
|---|---|---|
| mcN | 第 N 个内存控制器 | 多路机器上通常每个 CPU 一个 |
| dimmN | 控制器下的内存条条目 | 编号与物理丝印可能不同 |
| ce_count | 可纠正错误累计数 | 关注增长速率而非单次值 |
| ue_count | 不可纠正错误累计数 | 非零即为高优先级事件 |
部分平台不支持清零计数;维护或换件之后应以新采样的差值为准,而不是把累计值当现状。
sysfs 里的 dimm 编号与主板丝印不一定一致,落地到物理插槽前必须用 dmidecode 的定位字段交叉确认。