解密:Xeon OCP平台上的运行时RAS
目录
- 😊 介绍
- 😊 Intel 的开源固件和 FSP 定义
- 2.1 开放系统固件简介
- 2.2 FSP 定义和生成
- 😊 FSP 的工作原理
- 3.1 FSP 与启动加载程序的交互
- 3.2 FSP 与 boot loader 的集成
- 😊 FSP 中的 SM 模块问题
- 4.1 传统 UEFI 方式中的 SM 模块
- 4.2 SM 模块问题的解决方案
- 😊 运行时 RAS 的重要性
- 5.1 运行时 RAS 的定义
- 5.2 运行时 RAS 在云环境中的作用
- 😊 在 FSP 中启用运行时 RAS 的解决方案
- 😊 原型演示和实施
- 7.1 Rust 处理程序的选择
- 7.2 演示内容和结果
- 😊 结语与行动呼吁
Intel 的开源固件和 FSP 定义
2.1 开放系统固件简介
开放系统固件是 Intel 多年来一直与开源 ADK II 平台配合使用的结果。我们将 ATK2 实现和开放式的板载参考实现托管在 DNL Core,并与这些开源组件一起工作。为了处理这些开源组件,我们有多个可重新分发的二进制文件。本次讨论的重点主要集中在 FSP 二进制文件上,它与不同的引导加载程序配合使用,尤其是与 Core Boot。
2.2 FSP 定义和生成
FSP 是 Firmware Support Package 的缩写,是一种将硅初始化模块封装成二进制文件的解决方案。这些二进制文件可以与不同的引导加载程序集成,从而实现了硅初始化的模块化。FSP 与引导加载程序之间通过一组标准接口进行交互,这些接口在规范中有详细描述。生成 FSP 的过程相当复杂,通常是根据新硅或新平台的需求来实现一系列例程。
FSP 的工作原理
3.1 FSP 与启动加载程序的交互
在 FSP 中,与启动加载程序的交互主要通过一组标准接口实现。这些接口的调用由引导加载程序完成,以启动硅初始化例程。一旦引导加载程序调用了这些接口,FSP 中的硅初始化模块就会被调用并完成所需的例程。
3.2 FSP 与 boot loader 的集成
FSP 与引导加载程序的集成相对简单。引导加载程序调用 FSP 提供的接口后,FSP 中的硅初始化模块将会执行,并向引导加载程序提供必要的信息,如内存布局等。这使得 FSP 能够轻松地集成到不同的引导加载程序中。
FSP 中的 SM 模块问题
4.1 传统 UEFI 方式中的 SM 模块
在传统的 UEFI 方式中,SM 模块是作为 DXE 和 SM 阶段的一部分实现的。这些模块在 UEFI 引导流程的 DXE 阶段被调用,以初始化 SM 环境并安装 SM 处理程序,以满足运行时阶段的使用。
4.2 SM 模块问题的解决方案
然而,这种解决方案仅适用于 UEFI 引导程序,无法无缝集成到其他引导加载程序中。为了解决这个问题,我们需要一个统一的可重新分发的 SM 模块,以支持不同的引导加载程序,从而完善我们的开放式系统固件解决方案。
运行时 RAS 的重要性
5.1 运行时 RAS 的定义
运行时 RAS 是 Runtime Reliability, Availability, and Serviceability 的缩写,是在硬件错误发生时,固件和操作系统共同处理硬件错误的一种机制。在云环境中,运行时 RAS 的作用愈发重要,可以确保系统在故障发生时能够及时处理,保证服务的可用性。
5.2 运行时 RAS 在云环境中的作用
在云环境中,运行时 RAS 能够确保固件和操作系统能够及时地响应硬件错误,从而保证服务的可用性。当硬件错误发生时,运行时 RAS 可以触发 SMI,并由 SM 中的 Rust 处理程序处理,同时提供运行时接口给操作系统,以进一步处理硬件错误。
在 FSP 中启用运行时 RAS 的解决方案
6.1 解决方案概述
为了在 FSP 中启用运行时 RAS,我们提出了一个完整的解决方案,包括多个组件的实施。首先,我们将 RAS 模块转换为 PIM 和独立的 SM 模块,并确保我们的 MM 核心能够支持启动这些独立的 MM 模块。此外,我们还引入了运行时更新框架,以在运行时接收新的 MM 模块。
6.2 技术提案的实施
我们将所有重要的组件封装到 F