由 PSHED Plug-In 执行的 PFA

特定于平台的硬件错误驱动程序(PSHED)插件可以在 ECC 内存上执行预测故障分析(PFA)。 发生这种情况时,插件而不是 WHEA 必须监视 ECC 内存页。 如果插件确定 ECC 内存页已超出错误阈值,则会向 WHEA 指示此状态。 然后,WHEA 尝试将内存页下线。

注意 如果 PSHED 插件执行 PFA 并使用注册表存储其配置设置,例如错误阈值和监视超时,则不应依赖或使用 WHEA 策略设置中所述的 WHEA PFA 配置设置。

发生 ECC 内存错误时,WHEA 和插件将执行以下步骤:

  1. 低级别硬件错误处理程序LLHEH) 会通知存在内存错误条件。

  2. LLHEH 从错误源检索有关内存错误的信息,并使用错误数据完成硬件错误数据包。 此数据包的格式设置为 WHEA_ERROR_PACKET 结构。

  3. LLHEH 调用 PSHED 以检索任何特定于平台的硬件错误信息。 如果已安装并注册了 PSHED 插件以检索有关错误的信息,PSHED 将调用 PSHED 插件,以便插件可以修改返回给 LLHEH 的错误的相关信息。

  4. LLHEH 调用 Windows 操作系统内核并将错误数据包传递给它。

  5. Windows 内核会创建一条 错误记录 ,并将其添加到从 LLHEH 收到的错误数据包中的信息。 此外,Windows 内核会添加有关错误的其他信息,例如错误源、错误的严重性以及错误记录发生的次数。

  6. Windows 内核调用 PSHED,以允许 PSHED 将节添加到错误记录。

  7. 如果安装了 PSHED 插件并注册以检索错误信息,则 PSHED 将调用 PSHED 插件,以便它可以修改错误记录中的信息。

  8. 如果 PSHED 插件正在对 ECC 内存页执行 PFA,则必须执行以下操作:

    • WHEA_ERROR_PACKET结构的WHEA_ERROR_PACKET_FLAGS成员中设置PlatformPfaControl位。 如果设置了此位,WHEA 将不再负责对该内存页执行 PFA。
    • 如果插件确定出现错误的 ECC 内存页应被脱机处理,请在 WHEA_ERROR_PACKET_FLAGS 成员中设置 PlatformDirectedOffline 位。 如果设置了此位,WHEA 将尝试使内存页脱机。

    否则,PSHED 插件必须清除 WHEA_ERROR_PACKET 结构中的 WHEA_ERROR_PACKET_FLAGS 成员的 PlatformPfaControlPlatformDirectedOffline 位。

    注意 如果 PlatformPfaControl 位被清除,WHEA 会在配置允许的情况下执行 PFA,并确定是否应将遇到错误的 ECC 内存页采取脱机处理。 有关此过程的详细信息,请参阅 WHEA 执行的 PFA

  9. 如果 ECC 内存页需要下线,WHEA 首先调用系统内存管理器来执行此操作。

    注意 调用系统内存管理器时,不能保证 ECC 内存页实际上会脱机。

然后,WHEA 会将内存页添加到系统上的启动配置数据(BCD)存储中。 这会阻止在下一次系统重启后使用内存页。

注意 如果注册表值 DisableOffline 设置为非零值,WHEA 将不会使硬件组件(如 ECC 内存页)脱机。 此外,如果注册表值 MemPersistOffline 设置为 0,WHEA 将不会将内存页添加到 BCD 存储。 有关注册表值的详细信息,请参阅 WHEA 策略设置

有关系统内存管理器的详细信息,请参阅 Windows SDK 文档中的 内存管理

  1. Windows 内核生成 ETW 事件,并在系统事件日志中记录错误信息。