首页/系统/服务器硬件与 RAID 速查/EDAC 子系统与错误计数读取
内存与电源72 条

EDAC 子系统与错误计数读取

Linux 内核的 EDAC 子系统在 sysfs 暴露内存控制器与 DIMM 的错误计数:mc 与 dimm 两级目录,适合脚本化趋势监控。

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 的定位字段交叉确认。

易错点

  • 把累计计数当实时值:没有前后差值就分不清今日新增与历史存量
  • dimm 编号直接对应物理槽位:编号与丝印不一致时会换错内存条
  • 忽略不可纠正错误:UE 非零往往意味着更严重的内存问题,不能按可纠正错误的节奏处理
  • 只看计数不看日志:内核日志里的定位字段才是与物理部件对齐的线索

数据来源与参考

  • Linux 内核文档(EDAC sysfs)
  • man 8 edac-util
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌