场景:
机房现场发现服务器系统指示灯红灯告警,但是在bmc中没有相关告警,在系统中通过dmesg命令查看显示如下:
[root@jznr-tj-druid-14 ~]# dmesg | grep mce
[ 0.046634] mce: CPU supports 20 MCE banks
[20694683.469697] mce: [Hardware Error]: Machine check events logged
[20730564.213067] mce: [Hardware Error]: Machine check events logged
[20816812.525082] mce: [Hardware Error]: Machine check events logged
[20903060.837093] mce: [Hardware Error]: Machine check events logged
[20989309.149106] mce: [Hardware Error]: Machine check events logged
[21075557.461120] mce: [Hardware Error]: Machine check events logged
[21147456.394069] mce: [Hardware Error]: Machine check events logged
[21147564.984120] mce_notify_irq: 2 callbacks suppressed
[21147564.984125] mce: [Hardware Error]: Machine check events logged
[21161805.773131] mce: [Hardware Error]: Machine check events logged
[21248054.085145] mce: [Hardware Error]: Machine check events logged
Machine Check Exceptions (MCE)
Machine-check架构
Pentium 4, Intel Xeon 和 P6家族的处理器实现了一个主机检测架构(machine-check architecture)来提供一种检查和报告硬件(machine)错误的机制,例如:系统总线错误,ECC错误,奇偶错误(parity errors),缓存错误,以及TLB错误。MCE包含了一系列型号特定寄存器(model-specific registers, MSRs)用于设置主机检测以及额外的MSRs组用于记录检查到的错误。
处理器通过生成一个主机检测异常(machine-check exception),也就是放弃类异常,来记录检测到的不可修复主机检测错误。主机检测架构的实现并通常不是在产生一个machine-check exception时候允许处理器重启。然而,主机检测异常处理器可以从machine-check MSRs搜集有关主机检测错误的信息。
从45 nm Intel 64 处理器开始CPUID报告DisplayFamily_DisplayModel作为 06H_1AH
,处理器就可以报告有关主机检测错误的信息并发送一个可编程中断给软件以相应MC错误,引用为修正的主机检测错误中断(CMCI)。
Intel 64处理器支持主机检查架构和CMCI也可以支持一个附加的增强,可命名的,支持从一些不正确的可修复主机检测错误的软件修复。
主机检测异常是通过主机的CPU处理器检测到的错误。有2种主要的MCE错误类型:警告类错误(notice or warning error),和致命异常(fatal exception)。
- 警告类错误(notice or warning error)将通过一个"Machine Check Event logged"消息记录到系统日志中,然后可以通过一些Linux工具事后查看。
- 致命异常(fatal exception)则导致主机停止响应,MCE的详细信息将输出到系统的控制台。
哪些会导致MCE错误
常见的MCE错误原因包括:
- 内存错误或ECC(Error Correction Code)问题
- 冷却不充分/处理器过热
- 系统总线错误
- 处理器或硬件的缓存错误
如何解决MCE问题
yum install mcelog.x86_64
mcelog --ascii < mce_error #将MCE错误信息记录到文本mce_error
https://vipiu.net/archives/2020/02/13/6511.html