当前位置: 首页 > article >正文

Linux下EDAC功能介绍

一、背景介绍

  1. edac 目的是在linux系统运行过程中,当内存错误发生时,能够发现并且报告出硬件错误
  2. 当内存硬件有ECC功能时,如果在BIOS中使能了内存ECC,不管内核是否启用edac,内存硬件ECC功能都会使能,由硬件自动执行纠错

二、测试环境说明

  1. 硬件:鲲鹏920 96核
  2. 系统:KY3.5-2, kernel5.10
  3. 内核配置项:
    CONFIG_EDAC_SUPPORT=y
    CONFIG_EDAC=y
    CONFIG_EDAC_LEGACY_SYSFS=y
    CONFIG_EDAC_DEBUG=y
    CONFIG_EDAC_GHES=y
    CONFIG_EDAC_THUNDERX=m
    CONFIG_EDAC_XGENE=m
    

    三、内存CE注入

采用rasdaemon工具进行内存错误注入

Rasdaemon(及其模拟工具,如 edac-fake-inject)

功能和实现

软件实现:Rasdaemon 是基于软件的错误注入工具,主要用于收集和报告 RAS(Reliability, Availability, Serviceability)事件。edac-fake-inject 是 Rasdaemon 提供的一个模拟工具,用于注入虚拟的内存错误。

错误类型:主要用于模拟内存错误,通过软件生成虚拟错误事件,并将这些事件注入到系统中。

注入过程:通过软件配置虚拟错误类型、内存地址和其他参数,然后触发虚拟错误注入。这些虚拟错误不会由硬件触发,而是直接注入到系统错误报告机制中。

灵活性:由于是软件实现,不依赖于特定的硬件和 BIOS 支持,可以在任何系统上使用。

使用场景:

适用于需要快速模拟和测试错误处理机制的场景,例如验证软件错误处理路径、开发和测试 RAS 事件收集工具。

不需要特定的硬件支持,适合于广泛的开发和测试环境。

下载地址:https://github.com/mchehab/rasdaemon

rasdaemon tag v0.8.0

cd rasdaemon-master/contrib

./edac-fake-inject

可以看到内核打印:

[  666.986366] Generating 1 CE fake error to 12.0.0 to test core handling. NOTE: this won't test the driver-specific decoding logic.
[  666.986369] EDAC MC0: 1 CE FAKE ERROR on SOCKET 0 CHANNEL 6 DIMM 0 DIMM0 (memory:12 page:0x0 offset:0x0 grain:128 syndrome:0x0 - for EDAC testing only)
[  666.986410] Generating 1 CE fake error to 13.0.0 to test core handling. NOTE: this won't test the driver-specific decoding logic.
[  666.986412] EDAC MC0: 1 CE FAKE ERROR on unknown memory (memory:13 page:0x0 offset:0x0 grain:128 syndrome:0x0 - for EDAC testing only)
cat /sys/devices/system/edac/mc/mc0/ce_count
32

可以看到ce 错误值也变成了32

注意:

1. 这些错误注入是通过软件模拟的,并不是真实的硬件错误。它们主要用于测试系统中的错误检测和处理功能,例如 EDAC(Error Detection and Correction)机制的工作方式。

2. 验证系统响应。通过这种方式,可以验证系统是否能够正确地检测到模拟的错误情况,并是否采取适当的措施进行处理,例如记录日志或者报告给管理员。

查看edac-fake-inject 的实现过程,其实也是一个可执行脚本。

所以,这个脚本并没有真正触发硬件上的内存错误,而是通过 debugfs 接口模拟错误注入,以便测试系统中的错误处理功能。

它是用来测试和验证系统对错误情况的响应能力,而不是真实地引发硬件故障。

附:X86平台下查看EDAC指令

[root@node3-0 ~]# cd /sys/devices/system/edac/mc/
mc0/ power/ subsystem/
[root@node3-0 ~]# cd /sys/devices/system/edac/mc/mc0/
[root@node3-0 mc0]# ls
ce_count csrow0 dimm12 dimm3 mc_name reset_counters size_mb ue_
ce_noinfo_count dimm0 dimm15 max_location power seconds_since_reset subsystem ue_
[root@node3-0 mc0]# cd csrow0/
[root@node3-0 csrow0]# ls
ce_count ch0_dimm_label ch1_dimm_label ch4_dimm_label ch5_dimm_label edac_mode po
ch0_ce_count ch1_ce_count ch4_ce_count ch5_ce_count dev_type mem_type si
[root@node3-0 csrow0]# ls -l
总用量 0
-r--r--r--. 1 root root 4096 10月 10 17:00 ce_count
-r--r--r--. 1 root root 4096 10月 10 17:00 ch0_ce_count
-rw-r--r--. 1 root root 4096 10月 10 17:00 ch0_dimm_label
-r--r--r--. 1 root root 4096 10月 10 17:00 ch1_ce_count
-rw-r--r--. 1 root root 4096 10月 10 17:00 ch1_dimm_label
-r--r--r--. 1 root root 4096 10月 10 17:00 ch4_ce_count
-rw-r--r--. 1 root root 4096 10月 10 17:00 ch4_dimm_label
-r--r--r--. 1 root root 4096 10月 10 17:00 ch5_ce_count
-rw-r--r--. 1 root root 4096 10月 10 17:00 ch5_dimm_label
-r--r--r--. 1 root root 4096 10月 10 17:00 dev_type
-r--r--r--. 1 root root 4096 10月 10 17:00 edac_mode
-r--r--r--. 1 root root 4096 10月 10 17:00 mem_type
drwxr-xr-x. 2 root root 0 10月 10 17:00 power
-r--r--r--. 1 root root 4096 10月 10 17:00 size_mb
lrwxrwxrwx. 1 root root 0 10月 10 17:00 subsystem -> ../../../../../../bus/mc0
-r--r--r--. 1 root root 4096 10月 10 17:00 ue_count
-rw-r--r--. 1 root root 4096 1月 1 2000 uevent

查看ch*_ce_count就是ECC错误计数

可以通过在shell下敲命令直接输出计数值

[root@node3-0 csrow0]# grep "[0-9]" /sys/devices/system/edac/mc/mc*/csrow*/ch*_ce_count
/sys/devices/system/edac/mc/mc0/csrow0/ch0_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow0/ch1_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow0/ch4_ce_count:0
/sys/devices/system/edac/mc/mc0/csrow0/ch5_ce_count:0

以上显示ECC错误计数均为0
 


http://www.kler.cn/a/373732.html

相关文章:

  • 新材料产业数据管理:KPaaS平台的创新驱动
  • 未来生活中的AI电脑是怎样的
  • Oracle数据泵(expdp)导入导出数据
  • 如何写好prompt以及评测prompt的好坏
  • linux驱动—在自己的总线目录下创建属性文件
  • 北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置
  • Linux第二讲:Linux权限理解
  • 若依框架部署到服务器后头像资源访问404
  • 图片懒加载(自定义指令)
  • 共享内存相关知识点
  • 架构师备考-数据库基础
  • 安科瑞AM5SE-IS 防逆流保护装置 功能全面 逆功率保护
  • Linux安装部署数据库:MongoDB
  • Redis高级篇之bigKey理论介绍以及优化
  • STATCOM静止同步补偿器原理及MATLAB仿真模型
  • Windows1学习笔记
  • 易考八股文之SpringBoot的启动流程
  • 【UBuntu20 配置usb网卡】 记录Ubuntu20配置usb网卡(特别是建立热点)
  • 企业奇门与金蝶云星空的数据集成解决方案
  • 数据库编程 SQLITE3 Linux环境
  • 必应Bing国内搜索广告代理商,必应广告如何开户投放?
  • Flink + Kafka 实现通用流式数据处理详解
  • 钉钉报销数据与金蝶云星空系统的集成解决方案
  • 前端如何安全存储密钥,防止信息泄露
  • JS:列表操作
  • css-元素居中方式