由 PSHED 插件执行的 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 事件,并将错误信息记录在系统事件日志中。