5.2.23. 固件性能数据表 (FPDT)
本节介绍固件性能数据表 (FPDT) 的格式,它提供了足够的信息来描述平台初始化性能记录。此信息表示与固件启动过程中的特定任务相关的启动性能数据。 FPDT仅包含每个平台启动过程中的里程碑:
复位序列结束(在平台启动固件初始化开始时记录的计时器值 - 通常在复位向量处)
移交至OS 装载机
此信息表示固件启动性能数据集,该数据集将用于跟踪每个UEFI阶段的性能,并且可用于跟踪因硬件/软件配置而发生的更改所产生的影响。
所有计时器值均以 1 纳秒增量表示。例如,如果记录指示在计时器值为 25678 时发生事件,则这意味着自上次重置计时器测量以来已经过去了 25.678 微秒。所有计时器值的精度都要求为 +/- 10%。
图 5.8 FPDT 层次结构
| 表 5.87 固件性能数据表 (FPDT) 格式 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| - 签名 | 4 | 0 | “FPDT”固件性能数据表签名。 |
| - 长度 | 4 | 4 | 整个FPDT的表长度(以字节为单位)。 |
| - 修订 | 1 | 8 | 与该表的签名字段相对应的结构的修订版。对于符合该规范修订版的固件性能数据表,修订版为1。 |
| - 校验和 | 1 | 9 | 整个表(包括校验和字段)必须加为零才能被视为有效。 |
| - OEMID | 6 | 10 | 10 OEM 提供的字符串,用于标识 OEM。 |
| - OEM 表 ID | 8 | 16 | 16 OEM 提供的字符串,OEM 使用该字符串来标识此特定数据表。 |
| - OEM 修订 | 4 | 24 | OEM 提供的修订号。 |
| - 创建者ID | 4 | 28 | 28创建此表的实用程序的供应商ID。 |
| - 创建者修订 | 4 | 32 | 32创建此表的实用程序的修订版。 |
| 性能记录 | – | 36 | 36一组 FPDT 性能记录,如表 5-112 所定义。{添加链接} |
5.2.23.1. 性能记录格式
性能记录由包含记录类型和长度的子标头以及一组数据组成。数据的格式特定于记录类型。以这种方式,记录的大小仅与包含要传送的特定类型的数据所需的大小相同。
请注意,除非另有说明,否则给定类型允许有多个记录,因为某些事件在引导过程中可能会发生多次。
| 表 5.88 性能记录结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 性能记录类型 | 2 | 0 | 该值描述了性能记录的格式和内容。 |
| 记录长度 | 1 | 2 | 该值描述性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 如果扩展记录类型的格式,则更新该值。对性能记录布局的任何更改都必须向后兼容,因为如果仍然适用,则必须保留所有先前定义的字段,但新定义的字段允许增加性能记录的长度。以前定义的记录字段不得重新定义,但允许废弃。 |
| 数据 | – | 4 | 该字段的内容由性能记录类型定义定义。 |
5.2.23.2. FPDT 性能记录类型
下表描述了FPDT中包含的各种记录及其相应的记录类型。
| 表 5.89 FPDT 性能记录类型 记录类型值 | 类型 | 描述 |
|---|---|---|
| 0x0000 | 0x0000固件基本启动性能指针记录 | 包含指向固件基本引导性能表的指针的记录。 |
| 0x0001 | 0x0001 S3 性能表指针记录 | 包含指向S3性能表的指针的记录。 |
| 0x0002 - 0x0FFF | 0x0002 - 0x0FFF保留 | 保留供ACPI规范使用。 |
| 0x1000 - 0x1FFF | 0x1000 - 0x1FFF保留 | 保留供平台供应商使用。 |
| 0x2000 - 0x2FFF | 0x2000 - 0x2FFF保留 | 保留供硬件供应商使用。 |
| 0x3000 - 0x3FFF | 0x3000 - 0x3FFF保留 | 保留供平台固件供应商使用。 |
| 0x4000 - 0xFFFF | 0x4000 - 0xFFFF保留 | 保留供将来使用 |
5.2.23.3. 运行时性能记录类型
下表描述了各种运行时性能记录及其相应的记录类型。这些记录不包含在FPDT中;它们由FPDT中各自的指针记录引用。
| 表 5.90 运行时性能记录类型 记录类型值 | 类型 | 描述 |
|---|---|---|
| 0x0000 | 0x0000基本S3 恢复表现记录 | 描述S3恢复操作的最低固件性能指标的性能记录。 |
| 0x0001 | 0x0001基本S3 暂停性能记录 | 描述S3挂起操作的最低固件性能指标的性能记录。 |
| 0x0002 | 0x0002固件基本启动性能数据记录 | 性能记录显示固件启动过程关键阶段的基本性能指标。 |
| 0x0003 - 0x0FFF | 0x0003 - 0x0FFF保留 | 保留供ACPI规范使用。 |
| 0x1000 - 0x1FFF | 0x1000 - 0x1FFF保留 | 保留供平台供应商使用。 |
| 0x2000 - 0x2FFF | 0x2000 - 0x2FFF保留 | 保留供硬件供应商使用。 |
| 0x3000 - 0x3FFF | 0x3000 - 0x3FFF保留 | 保留供平台固件供应商使用。 |
| 0x4000 - 0xFFFF | 0x4000 - 0xFFFF保留 | 保留供将来使用 |
5.2.23.4. 固件基本启动性能表指针记录
固件基本引导性能表指针记录包含指向固件基本引导性能表的指针。固件基本引导性能表本身存在于系统内存映射中描述为ACPIAddressRangeReserved 的内存范围内。对于任何系统,记录指针都是FPDT中必需的条目,并且该指针必须指向有效的静态物理地址。将只产生这些记录中的一份。
| 表 5.91 固件基本启动性能表指针记录 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 性能记录类型 | 2 | 0 | 0 - 固件基本启动性能表指针记录 |
| 记录长度 | 1 | 2 | 16 - 该值描述性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 1 - 本性能记录的修订 |
| 保留 | 4 | 4 | 保留 |
| FBPT 指针 | 8 | 8 | 固件基本启动性能表的 64 位处理器相对物理地址 |
5.2.23.5. S3 性能表指针记录
S3性能表指针记录包含指向S3性能表的指针。 S3性能表本身存在于系统内存映射中描述为ACPIAddressRangeReserved 的内存范围内。对于任何支持S3状态的系统,记录指针是FPDT中必需的条目,并且该指针必须指向有效的静态物理地址。将只产生这些记录中的一份。
| 表 5.92 S3 性能表指针记录 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 性能记录类型 | 2 | 0 | 1 - S3 性能表指针记录 |
| 记录长度 | 1 | 2 | 16 - 该值描述性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 1 - 本性能记录的修订 |
| 保留 | 4 | 4 | 保留 |
| S3PT 指针 | 8 | 8 | S3 性能表的 64 位处理器相对物理地址 |
5.2.23.6. 固件基本启动性能表
固件基本启动性能表位于FPDT之外。它包括表 5.93 中定义的标头和一个或多个性能记录。
所有事件条目都将在平台运行时固件S4恢复序列期间被覆盖。固件基本启动性能表必须包括固件基本启动性能数据记录。其他条目是可选的。
| 表 5.93 固件基本启动性能表头 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 签名 | 4 | 0 | “FBPT”是要使用的签名。 |
| 长度 | 4 | 4 | 固件基本启动性能表的长度。这包括后续记录的标头和分配的大小。该大小至少包括标头和固件基本引导性能数据记录的大小。 |
5.2.23.7. 固件基本启动性能数据记录
固件基本启动性能数据记录包含与最终OS加载程序活动相关的计时器信息,以及与启动时间开始和结束信息相关的数据。
| 表 5.94 固件基本启动性能数据记录 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 性能记录类型 | 2 | 0 | 2 - 固件基本启动性能数据记录。将只产生这些记录中的一份。 |
| 记录长度 | 1 | 2 | 48 - 该值描述性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 2 - 本性能记录的修订 |
| 保留 | 4 | 4 | 保留 |
| 重置结束 | 8 | 8 | 固件映像执行开始时记录的计时器值。这可能并不总是为零或接近于零。 |
| OS 加载程序 LoadImage 开始 | 8 | 16 | 16在将OS引导加载程序加载到内存之前记录计时器值。对于非UEFI兼容的引导,该字段必须为零。 |
| OS 加载程序 StartImage 启动 | 8 | 24 | 在启动当前加载的OS引导加载程序映像之前记录计时器值。对于非UEFI兼容启动,记录的计时器值将恰好在INT19h 处理程序调用之前。 |
| 退出BootServices 入口 | 8 | 32 | 32当OS加载程序调用UEFI兼容固件的 ExitBootServices 函数时记录的计时器值。对于非UEFI兼容的靴子,该字段必须为零。 |
| ExitBootServices 退出 | 8 | 40 | 计时器值记录在OS加载程序从UEFI兼容固件的 ExitBootServices 函数夺回控制权之前的时间点。对于非UEFI兼容的靴子,该字段必须为零。 |
5.2.23.8. S3 性能表
S3性能表位于FPDT之外。它包括表 5.96 中定义的标头和一个或多个性能记录。
所有事件条目必须在初始引导序列期间初始化为零,并在平台运行时固件S3恢复序列期间被覆盖。 S3绩效表必须包括基本S3恢复性能记录。其他条目是可选的。
| 表 5.95 S3 性能表标题 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 签名 | 4 | 0 | “S3PT”是要使用的签名。 |
| 长度 | 4 | 4 | S3性能表的长度。这包括后续记录的标头和分配的大小。该大小至少包括标题和基本S3恢复性能记录的大小。 |
| 表 5.96 基本S3 恢复表现记录 字段 | 字节长度 | 字节偏移 | 描述 |
| --- | --- | --- | --- |
| 运行时性能记录类型 | 2 | 0 | 0 - 基本S3 恢复表现记录类型。将只产生这些记录中的一份。 |
| 记录长度 | 1 | 2 | 24 - 该值描述了此性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 1 - 本性能记录的修订 |
| 简历计数 | 4 | 4 | 自上次完整启动序列以来S3恢复周期数的计数。 |
| 完整简历 | 8 | 8 | 计时器在平台运行时固件S3恢复结束时记录,就在切换到OS唤醒向量之前。仅保留最近的恢复周期时间。 |
| 平均简历 | 8 | 16 | 16自上次完整启动序列(包括最近的恢复)以来记录的所有恢复周期的平均计时器值。请注意,不需要保留计时器值的整个日志来计算该平均值。平均恢复新 = (平均恢复旧 * (恢复计数 -1) + 完整恢复) / 恢复计数 |
| 表 5.97 基本S3 暂停性能记录 字段 | 字节长度 | 字节偏移 | 描述 |
| --- | --- | --- | --- |
| 运行时性能记录类型 | 2 | 0 | 1 - 基本S3 暂停性能记录。将产生零到一的这些记录。 |
| 记录长度 | 1 | 2 | 20 - 该值描述了此性能记录的长度(以字节为单位)。 |
| 修订 | 1 | 3 | 1 - 本性能记录的修订 |
| 暂停启动 | 8 | 4 | 记录在OS的计时器值在输入S3后写入SLP_TYP。仅保留最近的挂起周期的计时器值。 |
| 暂停结束 | 8 | 12 | 12最终固件写入SLP_TYP(或其他机制)时记录的计时器值,用于触发硬件进入S3。仅保留最近的挂起周期的计时器值。 |
