出现紫屏错误后对计算机检查异常 (MCE) 输出进行解码
search cancel

出现紫屏错误后对计算机检查异常 (MCE) 输出进行解码

book

Article ID: 344640

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

计算机检查架构是 CPU 中的一种机制,用于检测和报告硬件问题。当检测到问题时,系统会抛出计算机检查异常 (MCE)。如果抛出了 MCE 并显示紫色诊断屏幕(紫屏),则表示出现硬件问题。除此之外不会有其他原因会生成 MCE。

当系统出现故障并显示紫屏时,请捕获屏幕输出内容,然后重新引导服务器并联系您的硬件供应商。同时,可对此故障本身的相关信息进行解码,以更好地了解发生的情况。

如果看到 MCE 紫色诊断屏幕(紫屏),请截屏,然后重新引导并收集日志。有关详细信息,请参见 Collecting diagnostic information from an ESX or ESXi host that experiences a purple diagnostic screen (1004128)
注意:如果观察到紫色诊断屏幕(紫屏),但并不涉及 MC、计算机检查异常或硬件(计算机)错误,请参见 Interpreting an ESX host purple diagnostic screen (1004250)


Symptoms:

免责声明:本文为 Decoding Machine Check Exception (MCE) output after a purple screen error (1005184) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。



  • ESX/ESXi 主机终止并显示紫色诊断屏幕(紫屏)。

  • 紫色诊断屏幕(紫屏)显示类似以下内容的消息:

    • 计算机检查异常:无法继续 (Machine Check Exception: Unable to continue)
    • 硬件(计算机)错误 (Hardware (Machine) Error)
    • PCPU:引导后出现 1 个硬件错误 (硬件已更正 1 个错误) (PCPU: 1 hardware errors seen since boot (1 corrected by hardware))

  • 从核心转储中提取日志时,您会看到类似以下内容的错误:

    • ALERT:MCE:171: Machine Check Exception:Bank x, Status nnnnnnnnnnn
    • MC:PCPUn B:x S:nnnnnnnnnnn M:mmmmmmmmmmmm:A:aaaaaaaaaaa

  • 在 AMD 系统上,您会看到指示硬件问题的消息,但不会出现 MCE。您会看到类似于以下内容的错误:

    vmkernel:72:03:47:16.847 cpu4:14403)MCE:978: MCE 不可恢复但未生成异常 (vmkernel: 72:03:47:16.847 cpu4:14403)MCE: 978: MCE not recoverable but did not generate an exception)。


Environment

VMware ESXi 4.0.x Embedded
VMware ESXi 4.0.x Installable
VMware ESX Server 2.5.x
VMware vSphere ESXi 5.5
VMware ESX Server 1.5.x
VMware ESX Server 3.0.x
VMware vSphere ESXi 5.1
VMware ESX 4.1.x
VMware ESX Server 1.x
VMware ESXi 4.1.x Embedded
VMware vSphere ESXi 5.0
VMware ESX Server 3.5.x
VMware ESXi 4.1.x Installable
VMware ESX 4.0.x
VMware vSphere ESXi 6.0
VMware ESX Server 2.0.x
VMware ESX Server 2.1.x
VMware ESXi 3.5.x Installable
VMware ESXi 3.5.x Embedded

Resolution

<embed allowfullscreen="true" allowscriptaccess="always" height="340" src="https://www.youtube.com/v/EQb2O0GnG1I&hl=en_US&fs=1&" type="application/x-shockwave-flash" width="560">


Intel 和 AMD 的最新 CPU 采用一种计算机检查架构,可检测和报告硬件问题,包括系统总线错误、RAM(ECC 和奇偶校验)错误和其他 CPU 错误。它们都有一组用于报告错误的型号特定寄存器 (MSR)。

出现硬件错误时,全局和槽特定的计算机检查架构状态寄存器将填充有关故障原因以及 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)

  • ESX/ESXi 3.x:

    日志消息很详细,针对每个相关槽显示三行信息。每行包含文本 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


  • ESX/ESXi 4.0:

    日志消息很简洁,针对每个相关槽显示一行信息。通用状态寄存器显示在其相关行中。每行以文本 MCE开头,并包含相关物理 CPU 编号 (C)、槽号 (B) 以及状态寄存器 (s)、多功能寄存器 (m) 和地址寄存器 (a),后跟通用状态寄存器的值。

    Machine Check Global status on cpuC:0x000000000000000n
    MCE on cpuC bankB:Status:0xssssssssssssssss Misc:0xmmmm Addr:0xaaaaaaaaaaaaaaaa

  • ESX/ESXi 4.1 和 ESXi 5.0:

    日志消息很简洁,针对每个相关槽显示一行信息。每行以文本 MC开头,并包含物理 CPU 编号、槽号以及状态寄存器、多功能寄存器和地址寄存器,后跟通用状态寄存器的值。

    MC:PCPUc B:b S:0xssssssssssssssss M:0xmmmm A:0xaaaaaaaaaaaaaaaan

所有版本的 ESX/ESXi 都应提供以下项目的信息:

  • 物理 CPU 编号
  • 全局状态寄存器
  • 槽号
  • 槽状态寄存器
  • 槽地址寄存器
  • 槽多功能寄存器

自动解释

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

注意:当自动解释和供应商解释不一致时,以供应商解释为准。状态寄存器的原始内容仍然可用,可手动查看这些内容。

对全局 MCA 状态 (MCG_STATUS) 寄存器进行解码

全局状态寄存器为 64 位,但只有低 3 位有意义。高 61 位保留待用。全局状态寄存器可转换为二进制格式以进行比较。

63 3210
保留MCIPEIPVRIPV

  • 第 2 位:正在执行计算机检查。确定是否正在执行计算机检查,以及是否应参考更多字段。
  • 第 1 位:错误 IP 有效。确定推送到堆栈上的指令指针是否与错误直接相关。
  • 第 0 位:重新启动 IP 有效。确定是否可使用推送到堆栈上的指令指针可靠地重新启动程序执行。

例如,全局状态寄存器值“5”等于二进制值 0101。这可转换为 MCIP=1,EIPV=0,RIPV=1,表示正在执行计算机检查,且“重新启动 IP”是有效的。

槽状态 (MCi_STATUS) 寄存器概述

每个槽的 MCi_STATUS 寄存器都包含有关计算机检查错误的信息。仅在设置“有效标志”(第 63 位)后,此信息才有意义并被记录下来。此寄存器是 64 位寄存器。

6362616059585756323116150
VALOVERUCENMISCVADDRVPCC其他信息扩展错误代码MCA 错误代码

高 7 位(第 57 - 63 位)提供处理器状态概览以及说明其他寄存器哪些是有意义的:
  • 第 63 位:VAL。指示(如果已设置此位)此槽的状态 (MCi_STATUS) 寄存器有效,且应参考更多字段。
  • 第 62 位:OVER。指示(如果已设置此位)出现一个计算机检查错误,而上一个错误的结果仍保留在错误报告寄存器槽中。可指示 ESX/ESXi 未及时处理 MCE,或在极短时间内相继发生多个 MCE。
  • 第 61 位:UC。指示(如果已设置此位)处理器没有或无法更正错误状况。当处理器指示错误不可更正时,ESX/ESXi 主机始终生成紫色诊断屏幕(紫屏)。
  • 第 60 位:EN。指示(如果已设置此位)错误是由 MCi_CTL 寄存器中的相关 EEj 位导致的。此位的值通常为 1。
  • 第 59 位:MISCV。指示(如果已设置此位)此槽的相关多功能寄存器 (MCi_MISC) 有效,且包含有关错误的其他信息。
  • 第 58 位:ADDRV。指示(如果已设置此位)此槽的相关地址寄存器 (MCi_ADDR) 有效,且包含发生错误的内存地址。内存地址可能是物理地址,也可能是虚拟地址,这取决于错误类型。
  • 第 57 位:PCC。指示(如果已设置此位)错误可能破坏了处理器状态,以致于软件可能无法可靠地恢复正常运行。

第 56 - 32 位包含其他信息,这些位可能保留待用,用于计数器,或包含型号特定的其他信息。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。

第 31 - 16 位包含型号特定的扩展错误代码。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。

第 15 - 0 位包含检测到的计算机检查错误状况对应的计算机检查架构定义的错误代码。尽管个别处理器型号定义的内容可能有细微差别,但对于所有实施计算机检查架构的处理器来说,这些错误代码都是相同的。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档。

计算机检查架构定义的错误代码位于槽状态 (MCi_STATUS) 寄存器中

计算机检查架构定义多种错误,这些错误可能存在于任何槽状态寄存器中,并划分为“简单”和“复合”这两组错误代码。确定状态寄存器中的内容应划分到哪一组。

“简单错误代码”反映特定故障,它与状态寄存器中的内容完全匹配:

  • 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 - 总线和互连错误。

“复合错误代码”子字段定义一个复合错误代码的多个方面。使用这些子字段填充由复合错误代码定义的模板:

  • “事务类型”(TT) 子字段的编码方式如下:

    • 00 - 指令
    • 01 - 数据
    • 10 - 一般
    • 11 - 保留

  • “内存层次结构级别”(LL) 子字段的编码方式如下:

    • 00 - 级别 0
    • 01 - 级别 1
    • 10 - 级别 2
    • 11 - 一般

  • “内存事务类型”(MMM) 子字段的编码方式如下:

    • 000 - 一般未定义请求
    • 001 - 内存读取错误
    • 010 - 内存写入错误。
    • 011 - 地址或命令错误。
    • 100 - 内存清理错误。
    • 101-111 - 保留。

  • “通道号”(CCCC) 子字段的编码方式如下:

    • 0000-1110 - 通道号。
    • 1111 - 通道未指定。

  • “请求”(RRRR) 子字段的编码方式如下:

    • 0000 - 一般错误
    • 0001 - 一般读取
    • 0010 - 一般写入
    • 0011 - 数据读取
    • 0100 - 数据写入
    • 0101 - 指令取出
    • 0110 - 预取
    • 0111 - 逐出
    • 1000 - 侦听(探查)

  • “参与处理器”(PP) 子字段的编码方式如下:

    • 00 - 本地节点发起请求。
    • 01 - 本地节点响应请求。
    • 10 - 本地节点作为第三方观察到错误。
    • 11 - 一般

  • “超时”(T) 子字段的编码方式如下:

    • 0 - 请求未超时。
    • 1 - 请求超时。

  • “内存/IO”(II) 子字段的编码方式如下:
    • 00 - 内存访问
    • 01 - 保留
    • 10 - I/O
    • 11 - 其他

槽状态 (MCi_STATUS) 寄存器和多功能 (MCi_MISC) 寄存器中的型号特定错误代码

基于处理器型号和槽号,计算机检查架构可以使槽状态 (MCi_STATUS) 寄存器和多功能 (MCi_MISC) 寄存器中的位或位组承载更多意义。本文未列出所有处理器系列的字段含义。

要了解槽状态 (MCi_STATUS) 寄存器和多功能 (MCi_MISC) 寄存器中其他内容的含义,请参阅特定处理器型号的相关文档。有关详细信息,请参见本文的“其他信息”部分中列出的供应商文档,或联系硬件供应商。

其他注意事项

  • 计算机检查架构报告的信息有助于排除硬件故障。然而,MCA 错误代码提供的信息可能不足以深挖问题根源。如需更多信息,请参阅制造商提供的处理器文档。

  • 在尝试确定故障模式时,应在分析计算机检查架构报告的信息时参考其他错误。

  • 如果计算机检查架构报告了无效信息,但却出现了 MCE,仍可说明硬件发生故障。

  • 可将完整的计算机检查架构寄存器内容提供给硬件供应商,以帮助他们调查硬件故障的原因。


Additional Information

在某些情况下,主机可能不会因为出现 PSOD 错误而发生故障,但 vmkernel/消息日志会报告 MCE 错误,如下所示:

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