计算机检查架构是 CPU 中的一种机制,用于检测和报告硬件问题。当检测到问题时,系统会抛出计算机检查异常 (MCE)。如果抛出了 MCE 并显示紫色诊断屏幕(紫屏),则表示出现硬件问题。除此之外不会有其他原因会生成 MCE。
当系统出现故障并显示紫屏时,请捕获屏幕输出内容,然后重新引导服务器并联系您的硬件供应商。同时,可对此故障本身的相关信息进行解码,以更好地了解发生的情况。
免责声明:本文为 Decoding Machine Check Exception (MCE) output after a purple screen error (1005184) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。
出现硬件错误时,全局和槽特定的计算机检查架构状态寄存器将填充有关故障原因以及 CPU 是否可继续安全执行的信息。如果是可更正的错误,ESX/ESXi 会在 VMkernel 日志中报告事件详情和寄存器中的内容。如果是不可更正的错误,且 CPU 无法继续安全执行,ESX/ESXi 将终止并显示紫色诊断屏幕(紫屏)。
在 MCE 期间,系统会记录计算机检查架构寄存器的内容。紫色诊断屏幕(紫屏)上会显示相关消息,而且这些消息会记录到 VMkernel zdump 文件中的日志文件中。有关详细信息,请参见 Extracting the log file after an ESX or ESXi host fails with a purple screen error (1006796)。如果配置了串行日志记录,将在串行端口上发出相同的消息。有关详细信息,请参见 Enabling serial-line logging for an ESX and ESXi host (1003900)。
全局 MCA 寄存器 ( MCG_STATUS) 可报告 MCE 是否正在运行,以及推送到堆栈上的指令指针是否能够可靠地重新启动程序执行或直接与错误关联。
全局功能 ( MCG_CAP) 寄存器可确定处理器的计算机检查架构的功能。低 8 位指定特定处理器中存在的硬件单元错误报告槽数。一组错误报告寄存器与一个特定(或一组)硬件单元关联,尽管这是供应商和型号特定的关联。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。
每个错误报告槽都包括多个寄存器。在计算机检查异常期间,首要关注的重点是槽的状态寄存器 (MCi_STATUS)(此寄存器中包含计算机检查异常的详细信息)、地址 (MCi_ADDR) 寄存器和多功能 (MCi_MISC) 寄存器(这两种寄存器可提供其他信息)。
不同版本的 ESX/ESXi 会用不同的格式记录计算机检查架构寄存器的内容。有关详细信息,请参见 Determining VMware Software Version and Build Number (392)。
MCE
,并以出现异常的物理 CPU (C) 开头。通用状态寄存器显示在其相关行中。各个相关槽中的状态寄存器 (s)、地址寄存器 (a) 和多功能寄存器 (m) 都显示在各自的相关行中。cpuC:xxxx)Alert:MCE:Machine Check Exception:General Status 000000000000000n
cpuC:xxxx)Alert:MCE:Machine Check Exception:Bank b, Status ssssssssssssssss
cpuC:xxxx)Alert:MCE:Machine Check Exception:Bank b, Addr aaaaaaaaaaaaaaaa
cpuC:xxxx)Alert:MCE:Machine Check Exception:Bank b, Misc mmmm
MCE
开头,并包含相关物理 CPU 编号 (C)、槽号 (B) 以及状态寄存器 (s)、多功能寄存器 (m) 和地址寄存器 (a),后跟通用状态寄存器的值。Machine Check Global status on cpuC:0x000000000000000n
MCE on cpuC bankB:Status:0xssssssssssssssss Misc:0xmmmm Addr:0xaaaaaaaaaaaaaaaa
MC
开头,并包含物理 CPU 编号、槽号以及状态寄存器、多功能寄存器和地址寄存器,后跟通用状态寄存器的值。MC:PCPUc B:b S:0xssssssssssssssss M:0xmmmm A:0xaaaaaaaaaaaaaaaan
所有版本的 ESX/ESXi 都应提供以下项目的信息:
VMware ESX/ESXi 4.0 及更高版本会尝试解释状态寄存器的内容并显示在紫色诊断屏幕(紫屏)上。例如:
MCE on cpuC bankB:Status:0xssssssssssssssss Misc:0xmmmm Addr:0xaaaaaaaaaaaaaaaa:Valid.UC.Err enabled.Misc valid.Addr valid.
Hardware (Machine) Error:Cache Hierarchy:Level 2 Instruction Cache Instruction Fetch Error.PCPUc in world xxxx:process
注意:当自动解释和供应商解释不一致时,以供应商解释为准。状态寄存器的原始内容仍然可用,可手动查看这些内容。
63 | 3 | 2 | 1 | 0 |
保留 | MCIP | EIPV | RIPV |
例如,全局状态寄存器值“5”等于二进制值 0101。这可转换为 MCIP=1,EIPV=0,RIPV=1,表示正在执行计算机检查,且“重新启动 IP”是有效的。
每个槽的 MCi_STATUS 寄存器都包含有关计算机检查错误的信息。仅在设置“有效标志”(第 63 位)后,此信息才有意义并被记录下来。此寄存器是 64 位寄存器。
63 | 62 | 61 | 60 | 59 | 58 | 57 | 56 | 32 | 31 | 16 | 15 | 0 |
VAL | OVER | UC | EN | MISCV | ADDRV | PCC | 其他信息 | 扩展错误代码 | MCA 错误代码 |
第 56 - 32 位包含其他信息,这些位可能保留待用,用于计数器,或包含型号特定的其他信息。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。
第 31 - 16 位包含型号特定的扩展错误代码。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。
第 15 - 0 位包含检测到的计算机检查错误状况对应的计算机检查架构定义的错误代码。尽管个别处理器型号定义的内容可能有细微差别,但对于所有实施计算机检查架构的处理器来说,这些错误代码都是相同的。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。
计算机检查架构定义多种错误,这些错误可能存在于任何槽状态寄存器中,并划分为“简单”和“复合”这两组错误代码。确定状态寄存器中的内容应划分到哪一组。
“简单错误代码”反映特定故障,它与状态寄存器中的内容完全匹配:
0000 0000 0000 0000
- 未向此槽报告任何错误。 0000 0000 0000 0001
- 未分类。此错误尚未归为 MCA 错误类。“其他信息”部分中可能提供了相关说明。 0000 0000 0000 0010
- 内部微代码 ROM 中的奇偶校验错误 0000 0000 0000 0011
– 另一个处理器中的 BINT# 导致此处理器进入计算机检查状态。 0000 0000 0000 0100
- 功能冗余校验 (FRC) 主/从错误。 0000 0000 0000 0101
- 内部奇偶校验错误。 0000 0100 0000 0000
- 内部计时器错误。 0000 01xx xxxx xxxx
- 内部未分类错误。至少一个 x 等于 1 “复合错误代码”按照某种方式用单个错误编号定义错误的多个方面:
000F 0000 0000 11LL
- 一般缓存层次结构错误。 000F 0000 0001 TTLL
- TLB 错误。 000F 0000 1MMM CCCC
- 内存控制器错误(仅适用于 Intel)。 000F 0001 RRRR TTLL
- 缓存层次结构中的内存错误。 000F 1PPT RRRR IILL
- 总线和互连错误。 “复合错误代码”子字段定义一个复合错误代码的多个方面。使用这些子字段填充由复合错误代码定义的模板:
00
- 指令 01
- 数据 10
- 一般 11
- 保留 00
- 级别 0 01
- 级别 1 10
- 级别 2 11
- 一般 000
- 一般未定义请求 001
- 内存读取错误 010
- 内存写入错误。 011
- 地址或命令错误。 100
- 内存清理错误。 101-111
- 保留。 0000-1110
- 通道号。 1111
- 通道未指定。 0000
- 一般错误 0001
- 一般读取 0010
- 一般写入 0011
- 数据读取 0100
- 数据写入 0101
- 指令取出 0110
- 预取 0111
- 逐出 1000
- 侦听(探查) 00
- 本地节点发起请求。 01
- 本地节点响应请求。 10
- 本地节点作为第三方观察到错误。 11
- 一般 0
- 请求未超时。 1
- 请求超时。 00
- 内存访问 01
- 保留 10
- I/O 11
- 其他 基于处理器型号和槽号,计算机检查架构可以使槽状态 (MCi_STATUS) 寄存器和多功能 (MCi_MISC) 寄存器中的位或位组承载更多意义。本文未列出所有处理器系列的字段含义。
要了解槽状态 (MCi_STATUS) 寄存器和多功能 (MCi_MISC) 寄存器中其他内容的含义,请参阅特定处理器型号的相关文档。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档,或联系硬件供应商。
MCE:215: CMCI on cpu1 bank8:Status:0xd000008000310080 Misc:0x0 Addr:0x0:Valid.Overflow.Err enabled.MCE:220: Status bits:"Memory Controller Error on Channel 0.
有关详细信息,请参见:
注意:截至 2015 年 10 月 14 日,上述链接正确无误。如果您发现有链接已损坏,请提供反馈,VMware 员工将会更新该链接。
Decoding Machine Check Exception (MCE) output after a purple screen error