实验目的:证明修改tolerant参数为3时,uncorrected error和fatal error等不可纠正错误、总线错误不会导致机器宕机。
实验意义:对于已发生的硬件MCE error导致的宕机事件,如内存不可纠正错误或PCIe总线错误导致机器冷重启或宕机,在短期内无法定位故障内存或无法及时替换报错硬件时,可避免此类宕机事件再次发生,进而保证业务持续运行。
未知影响:tolerant参数改为3后,当机器发生内存不可纠正报错或总线报错时,虽机器不会宕机,是否会存在其他方面的功能异常的情况(比如内存容量、使用率变化,网卡、raid卡功能异常等等),仍需结合实际线上故障来进一步分析
实验机型:Lenovo RD350X
OS:CentOS Linux release 7.1.1503 (Core)
Kenerl version:3.10.0-229.el7.x86_64
实验原理:人为生成一条假的MCE报错事件:uncorrected error,测试在tolerant参数为1和3时(tolerant默认为1),机器的稳定性情况
实验过程:
1、手动添加一条内容为uncorrected error的MCE记录
#安装mce-inject
此tool用以验证mcelog功能是否正常,实验中使用mce-inject来生成一条uncorrectable error
为了进行测试和故障排除,可以使用 mce-test 包生成假的硬件 MCE 事件并执行系统测试。
mce-test 软件包含丰富的默认测试,能模拟真实硬件故障,甚至会导致内核错误,需要执行几个配置步骤才能对系统进行此类测试。
首先,需要安装几个支持软件包才能在测试系统上配置 mce-test,使用以下命令:
#yum install gcc.x86_64 gcc-c++.x86_64 flex.x86_64 dialog.x86_64 ras-utils.x86_64 git.x86_64
安装mce-inject
#yum install -y ras-utils
加载mce-inject模块
#modprobe mce-inject
#lsmod |grep -i mce
生成MCE事件
mce-inject使用格式:#mce-inject filename(filename为报错内容,报错内容可自行编写,但有其编写格式)
#mce-inject ./uncorrect
#cat error 创建报错文件error,内容如下,为可纠正错误
#mce-inject ./error后查看/var/log/mcelog,已生成对应报错,机器未宕机
#cat error 修改error文件内容为不可纠正报错uncorrectable
#mce-inject ./error后机器直接宕机,重启后查看mcelog无uncorrected报错记录:
2、修改tolerant参数为3,再生成uncorrected报错,查看是否会宕机
#tolerant位置:/sys/devices/system/machinecheck/machinecheck*/
说明:其中machinecheck中的号由CPU的个数所决定的,如果是双核的,则存在machinecheck0和machinecheck1两个目录,对应目录里都有一个tolerant文件,tolerant中存放容忍程度值。
由cpu配置可知一共48核
#修改machinecheck1中的tolarant参数为3
#执行mce-inject ./error 出现以下报错
这是因为mce-inject重启后未加载,手动执行modprobe mce-inject加载即可
#再次执行mce-inject ./error,机器未宕机,查看mcelog,已记录相应的uncorrected error
实验小结:
实验中发现,修改任一machinecheck*文件中的tolerant参数为3,都可避免不可纠正错误导致的宕机,并将报错信息收集到mcelog;而torelant为默认参数1时,uncorrected error会导致机器宕机,且mcelog无此报错记录。 对线上设备而言,可尝试修改此参数,用以避免内存uncorrectable error和PCIe设备bus fatal error(如飞迈瑞克82599ES网卡报错)导致的宕机。
来源:51CTO
作者:lemon爱学习
链接:https://blog.csdn.net/lemon6666666/article/details/100735797