“如何避免总线错误或不可纠正的错误导致的宕机事件”之tolerant介绍

匿名 (未验证) 提交于 2019-12-03 00:03:02

实验目的:证明修改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 errorPCIe设备bus fatal error(如飞迈瑞克82599ES网卡报错)导致的宕机。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!