为什么 Enhanced MCA gen2 选择在固件优先错误处理模型中触发 SMI/SCI?
Why the Enhanced MCA gen2 choose to trigger SMI/SCI in firmware first error handling model?
我在下面看到本机 MCA 模型和增强型 MCA 固件第一个模型之间的信号差异:
对于第一行中的处理器 CE:
本机模型使用 CMC(更正的机器检查中断)发送信号。 CMCI 由各自的 MCA 银行报告,并通过本地 APIC 的 LVT(本地向量 table)处理。所有这些都发生在 处理器内。
固件 1st 模型,SMI/SCI 被触发而不是 CMC。但据我了解,SMI/SCI必须通过PCH芯片组触发,这意味着离开处理器,一直到PCH,然后触发 SCI/SMI 返回处理器。
那么为什么我们需要这么长的往返路程呢?还是我误会了什么?
ACPI 平台错误接口 (APEI) 定义了两种模型来处理机器错误:Firmware 1st 和 OS Native .
前者首先将错误情况路由到主机固件,这样板卡制造商可以尝试恢复 and/or 记录错误信息。
后者将错误直接引导到 OS。
这些方法在局部而非全局是互斥的,特定的错误条件可能是 Firmware 1st,另一个可能是 OS Native。
在固件 1st 模型中,固件配置每个硬件错误源(例如 ECC DIMM 的 DRAM 控制器)以生成 SMI。
这将调用 SMM 固件,为制造商提供一个入口点来处理错误。
最后,固件通过 SCI 或 NMI 向 OS 报告错误。
In the Firmware 1st model, all errors are initially
signaled to the host firmware via SMI or other General Purpose Input (GPI) events.
Then host
firmware analyzes and decides what to do, and at the end of the flow creates a detailed APEI
error log with FRU information to OS.
Finally, the host firmware will then signal the OS about
the existence of the error via SCI, NMI, or other interrupts.
请注意,table 的第一行显示了哪个事件用于发出错误信号,而不是硬件的实际配置方式。
注意我对这个话题一点经验都没有。
在检测到可配置的 CE 阈值后,处理器 Correctable 错误 (CE) 全部通过 Correctable 机器检查中断 (CMCI) 发出信号。
CMCI 在 LAPIC LVT(本地 Vetor Table)
中有自己的条目
我相信这是 Processor CE 的唯一硬件来源。
理论上可以有一个相对于核心的外部硬件单元来检测这些错误,但我感觉整个画面比这更精简。
因此所有处理器 CE 错误都会生成 CMCI。
在固件 1st 模型中,固件导出的 ACPI 方法被编码以配置 CMCI 条目以生成 SMI(请记住 LACPI IVT 条目可以生成不同类型的中断,包括 SMI)。
在 OS 本机模型中,ACPI 方法不涉及 CMCI。
SMI 是为固件提供进入流程的唯一方式,它正是为此目的而设计的,所有其他中断均由 OS 处理。
一旦固件处于控制之下并完成检查,它就可以指示 PCH 生成 SCI。
在固件 1st 模型中,流程必须 "exit" 处理器,因为我们要处理对固件的控制。
"re-steer it into" 处理器固件需要产生一个中断;理论上,它可以将 SCI 系统向量解析为 CPU 本地向量,但这并不可靠,更好的方法是通过 PCH 生成真正的 SCI。
我把整个事情想象成
红色箭头表示 OS 本机流程,蓝色箭头表示固件第一流程。
在后一种情况下,我们选择更长的行程,让固件有机会对错误采取行动。
我在下面看到本机 MCA 模型和增强型 MCA 固件第一个模型之间的信号差异:
对于第一行中的处理器 CE:
本机模型使用 CMC(更正的机器检查中断)发送信号。 CMCI 由各自的 MCA 银行报告,并通过本地 APIC 的 LVT(本地向量 table)处理。所有这些都发生在 处理器内。
固件 1st 模型,SMI/SCI 被触发而不是 CMC。但据我了解,SMI/SCI必须通过PCH芯片组触发,这意味着离开处理器,一直到PCH,然后触发 SCI/SMI 返回处理器。
那么为什么我们需要这么长的往返路程呢?还是我误会了什么?
ACPI 平台错误接口 (APEI) 定义了两种模型来处理机器错误:Firmware 1st 和 OS Native .
前者首先将错误情况路由到主机固件,这样板卡制造商可以尝试恢复 and/or 记录错误信息。
后者将错误直接引导到 OS。
这些方法在局部而非全局是互斥的,特定的错误条件可能是 Firmware 1st,另一个可能是 OS Native。
在固件 1st 模型中,固件配置每个硬件错误源(例如 ECC DIMM 的 DRAM 控制器)以生成 SMI。
这将调用 SMM 固件,为制造商提供一个入口点来处理错误。
最后,固件通过 SCI 或 NMI 向 OS 报告错误。
In the Firmware 1st model, all errors are initially signaled to the host firmware via SMI or other General Purpose Input (GPI) events.
Then host firmware analyzes and decides what to do, and at the end of the flow creates a detailed APEI error log with FRU information to OS.
Finally, the host firmware will then signal the OS about the existence of the error via SCI, NMI, or other interrupts.
请注意,table 的第一行显示了哪个事件用于发出错误信号,而不是硬件的实际配置方式。
注意我对这个话题一点经验都没有。
在检测到可配置的 CE 阈值后,处理器 Correctable 错误 (CE) 全部通过 Correctable 机器检查中断 (CMCI) 发出信号。
CMCI 在 LAPIC LVT(本地 Vetor Table)
我相信这是 Processor CE 的唯一硬件来源。
理论上可以有一个相对于核心的外部硬件单元来检测这些错误,但我感觉整个画面比这更精简。
因此所有处理器 CE 错误都会生成 CMCI。
在固件 1st 模型中,固件导出的 ACPI 方法被编码以配置 CMCI 条目以生成 SMI(请记住 LACPI IVT 条目可以生成不同类型的中断,包括 SMI)。
在 OS 本机模型中,ACPI 方法不涉及 CMCI。
SMI 是为固件提供进入流程的唯一方式,它正是为此目的而设计的,所有其他中断均由 OS 处理。
一旦固件处于控制之下并完成检查,它就可以指示 PCH 生成 SCI。
在固件 1st 模型中,流程必须 "exit" 处理器,因为我们要处理对固件的控制。
"re-steer it into" 处理器固件需要产生一个中断;理论上,它可以将 SCI 系统向量解析为 CPU 本地向量,但这并不可靠,更好的方法是通过 PCH 生成真正的 SCI。
我把整个事情想象成
红色箭头表示 OS 本机流程,蓝色箭头表示固件第一流程。
在后一种情况下,我们选择更长的行程,让固件有机会对错误采取行动。