5.2.16. 系统资源关联表 (SRAT)
此可选表提供的信息允许OSPM将以下类型的设备与系统位置/邻近域和时钟域相关联:
处理器,
内存范围(包括热添加内存设备提供的内存范围),以及
通用发起者(例如,具有集成计算或 DMA 引擎的异构处理器、加速器、GPU 和 I/O 设备)。
在NUMA平台上,SRAT信息使OSPM能够在OS初始化期间(当尚无法评估ACPI命名空间中的对象时)对操作系统进行最佳配置。
OSPM 仅在 OS 初始化期间评估 SRAT。启动时启动的所有处理器中的 Local APIC ID / Local SAPIC ID / Local x2APIC ID 或 GICC ACPI 处理器 UID 必须出现在 SRAT 中。如果动态添加的处理器的 Local APIC ID / Local SAPIC ID / Local x2APIC ID 或 GICC ACPI 处理器 UID 不存在于 SRAT 中,处理器设备或其祖先之一的 _PXM 对象必须存在于ACPI命名空间中。
注意:SRAT是定义邻近域的地方,_PXM 提供了一种将设备对象(及其子对象)与SRAT定义的邻近域关联的机制。
有关更多信息,请参阅第 6.2.14 节 (_PXM Proximity)。
| 表 5.47 静态资源亲和性表格式 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| 签名 | 4 | 0 | “SRAT”。系统资源关联表的签名。 |
| 长度 | 4 | 4 | 整个SRAT的长度(以字节为单位)。长度表示表末尾的 Entry 字段的数量 |
| 修订 | 1 | 8 | 3 |
| 校验和 | 1 | 9 | 整个表的总和必须为零。 |
| OEMID | 6 | 10 | 10 OEMID。 |
| OEM 表 ID | 8 | 16 | 16对于系统资源关联表,表ID 是制造商型号ID。 |
| OEM 修订 | 4 | 24 | OEM 所提供的OEM 表ID 系统资源关联表的修订版。 |
| 创建者ID | 4 | 28 | 28创建该表的实用程序的供应商ID。 |
| 创建者修订 | 4 | 32 | 32创建表的实用程序的修订。 |
| 保留 | 4 | 36 | 36为了向后兼容保留为 1 |
| 保留 | 8 | 40 | 保留 |
| 静态资源分配结构[n] | — | 48 | 48平台的静态资源分配结构列表。请参阅处理器本地APIC/SAPIC 关联结构、内存关联结构、处理器本地 x2APIC 关联结构和GICC 关联结构。 |
5.2.16.1. 处理器本地APIC/SAPIC 关联结构
处理器本地APIC/SAPIC关联结构提供处理器的APIC、ID或SAPIC、ID/EID与该处理器所属的邻近域之间的关联。请参阅处理器本地APIC/SAPIC 关联结构。
| 表 5.48 处理器本地APIC/SAPIC 关联结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0 处理器本地APIC/SAPIC 关联结构 |
| 长度 | 1 | 1 | 16 |
| 邻近域[7:0] | 1 | 2 | 处理器所属邻近域的位[7:0]。 |
| APIC ID | 1 | 3 | 处理器本地APICID。 |
| 旗帜 | 4 | 4 | 标志 - 处理器本地APIC/SAPIC 关联结构。有关此字段的说明,请参阅处理器本地APIC/SAPIC 关联结构。 |
| 本地 SAPIC EID | 1 | 8 | 处理器本地SAPICEID。 |
| 邻近域[31:8] | 3 | 9 | 处理器所属邻近域的位[31:8]。 |
| 时钟域 | 4 | 12 | 12处理器所属的时钟域。请参阅_CDM(时钟域)。 |
| 表 5.49 标志 - 处理器本地APIC/SAPIC 关联结构 字段 | 位长度 | 位偏移 | 描述 |
| --- | --- | --- | --- |
| 已启用 | 1 | 0 | 如果清除,OSPM将忽略处理器本地APIC/SAPIC关联结构的内容。这允许系统固件用静态数量的结构填充SRAT,但仅在必要时启用它们。 |
| 保留 | 31 | 1 | 必须为零。 |
5.2.16.2. 内存亲和结构
内存关联结构向操作系统静态提供以下拓扑信息:
内存范围与其所属的邻近域之间的关联
有关内存范围是否可以热插拔的信息。
请参阅下表了解更多详细信息。
| 表 5.50 内存亲和结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 1 内存亲和结构 |
| 长度 | 1 | 1 | 40 |
| 邻近域 | 4 | 2 | 表示内存范围所属的邻近域的整数。 |
| 保留 | 2 | 6 | 保留 |
| 基地址低 | 4 | 8 | 内存范围基地址的低 32 位 |
| 基地址高 | 4 | 12 | 12内存范围基址的高 32 位 |
| 长度低 | 4 | 16 | 16内存范围长度的低 32 位。 |
| 长度高 | 4 | 20 | 内存范围长度的高 32 位。 |
| 保留 | 4 | 24 | 保留 |
| 旗帜 | 4 | 28 | 28标志 - 内存亲和结构。指示该内存区域是否启用且可热插拔。更多详情请参见下表。 |
| 保留 | 8 | 32 | 32保留 |
| 表 5.51 标志 - 内存关联结构 字段 | 位长度 | 位偏移 | 描述 |
| --- | --- | --- | --- |
| 已启用 | 1 | 0 | 如果清除,OSPM 将忽略内存关联结构的内容。这允许系统固件用静态数量的结构填充SRAT,但仅在必要时启用。 |
| 热插拔 | 1 | 1 | 该位传达的信息取决于启用位的值。如果启用位已设置并且热插拔位也已设置。系统硬件支持该内存区域的热添加和热移除 如果Enabled位被置位且Hot Pluggable位被清零,则系统硬件不支持该内存区域的热添加或热移除。如果启用位清零,OSPM 将忽略内存关联结构的内容 |
| 非易失性 | 1 | 2 | 如果设置,内存区域代表非易失性内存 |
| 保留 | 29 | 29 3 | 必须为零。 |
5.2.16.3. 处理器本地 x2APIC 亲和结构
处理器本地 x2APIC 关联结构提供处理器的本地 x2APICID与该处理器所属的邻近域之间的关联。第 5.2.16.3 节提供了处理器本地 x2APIC 关联结构的详细信息。
| 表 5.52 处理器本地 x2APIC 关联结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 2 处理器本地 x2APIC 亲和结构 |
| 长度 | 1 | 1 | 24 |
| 保留 | 2 | 2 | 保留 - 必须为零 |
| 邻近域 | 4 | 4 | 逻辑处理器所属的邻近域。 |
| X2APIC ID | 4 | 8 | 处理器本地 x2APICID。 |
| 旗帜 | 4 | 12 | 12与处理器本地APIC/SAPIC 关联结构标志相同。有关该字段的说明,请参阅下表相应的内容。 |
| 时钟域 | 4 | 16 | 16逻辑处理器所属的时钟域。请参阅_CDM(时钟域)。 |
| 保留 | 4 | 20 | 预订的。 |
在基于 x86 的平台上,OSPM使用热插拔位来确定是否应切换到PAE模式,以允许插入物理地址超过 4 个GB的热插拔内存。
5.2.16.4. GICC 亲和结构
GICC关联结构提供处理器的ACPI处理器UID与该处理器所属的邻近域之间的关联。第 5.2.16.4 节提供了GICC亲和结构的详细信息。
| 表 5.53 GICC 关联结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 3GICC 关联结构。 |
| 长度 | 1 | 1 | 18 |
| 邻近域 | 4 | 2 | 逻辑处理器所属的邻近域。 |
| ACPI 处理器 UID | 4 | 6 | 关联GICC的ACPI处理器UID。 |
| 旗帜 | 4 | 10 | 10标志 - GICC 关联结构。有关该字段的说明,请参阅下表相应的内容。 |
| 时钟域 | 4 | 14 | 14逻辑处理器所属的时钟域。请参阅_CDM(时钟域)。 |
| 表 5.54 标志 - GICC 关联结构 字段 | 位长度 | 位偏移 | 描述 |
| --- | --- | --- | --- |
| 已启用 | 1 | 0 | 如果清除,OSPM将忽略GICC关联结构的内容。这允许系统固件用静态数量的结构填充SRAT,但仅在必要时启用它们。 |
| 保留 | 31 | 1 | 必须为零。 |
5.2.16.5. GIC 中断翻译服务 (ITS) 关联结构
GIC、ITS关联结构提供GIC、ITS与邻近域之间的关联。这使得OSPM能够发现最接近ITS的内存,并使用它来分配其管理表和命令队列。 ITS使用与MADT中的GIC、ITS声明相匹配的ID来标识,详细信息请参见第 5.2.12.18 节。下表提供了GICITS关联结构的详细信息。
| 表 5.55 架构特定的亲和结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 4GICITS亲和结构 |
| 长度 | 1 | 1 | 12 |
| 邻近域 | 4 | 2 | 表示GIC、ITS所属邻近域的整数。 |
| 保留 | 2 | 6 | 保留必须为零 |
| ITS ID | 4 | 8 | ITS ID 与 MADT 中的 GIC ITS 条目匹配 |
5.2.16.6. 通用发起者亲和结构
通用发起者关联结构提供通用发起者和该发起者所属的邻近域之间的关联。详细信息请参见第 5.2.16.6 节。
OSPM对通用发起者关联结构的支持是可选的,平台可以通过_OSC方法查询OS是否支持。请参阅第 6.2.11.2 节。
| 表 5.56 通用发起者亲和结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 5 通用发起者结构。 |
| 长度 | 1 | 1 | 32 |
| 保留 | 1 | 2 | 保留且必须为零。 |
| 设备句柄类型 | 1 | 3 | 设备句柄类型:0 - ACPI 设备句柄 1 - PCI 设备句柄 2-255 - 保留 |
| 邻近域 | 4 | 4 | 通用发起者所属的邻近域。 |
| 设备句柄 | 16 | 16 8 | 通用发起者的设备句柄。有关 ACPI 设备句柄的说明,请参阅“设备句柄 - ACPI”;有关 PCI 设备句柄的说明,请参阅“设备句柄 - PCI”。 |
| 旗帜 | 4 | 24 | 标志 - 通用发起者关联结构。有关该字段的说明,请参阅下表相应的内容。 |
| 保留 | 4 | 28 | 28保留且必须为零。 |
| 表 5.57 设备句柄 - ACPI 字段 | 字节长度 | 字节偏移 | 描述 |
| --- | --- | --- | --- |
| ACPI _HID | 8 | 0 | _HID 值 |
| ACPI _UID | 4 | 8 | _UID 值 |
| 保留 | 4 | 12 | 12必须为零。 |
| 表 5.58 设备句柄 - PCI 字段 | 字节长度 | 字节偏移 | 描述 |
| --- | --- | --- | --- |
| PCI 段 | 2 | 0 | PCI 段号。对于少于 255 个PCI总线的系统,该数字必须为 0。 |
| PCI BDF 数量 | 2 | 2 | PCI 总线编号(字节 2 的位 7:0) PCI 设备编号(字节 3 的位 7:3) PCI 功能编号(字节 3 的位 2:0) |
| 保留 | 12 | 12 4 | 必须为零 |
| 表 5.59 标志 - 通用发起者关联结构 字段 | 位长度 | 位偏移 | 描述 |
| --- | --- | --- | --- |
| 已启用 | 1 | 0 | 如果清零,OSPM 将忽略通用发起者关联结构的内容。这允许系统固件以固定数量的结构填充 SRAT,并仅在需要时启用。 |
| 架构事务 | 1 | 1 | 如果置位,则表示通用发起者可以在与主机相同的架构级别发起所有事务(例如完整的原子操作、缓存一致性、虚拟内存等)。请参阅实现注意事项。 |
| 保留 | 30 | 2 | 必须为零。 |
注意事项
如果具有一致内存的通用设备连接到系统,建议为设备和与设备关联的内存定义关联结构。它们都可以具有相同的邻近域。
如果通用设备标记为“架构事务”,则该通用发起者支持所有适用的缓存同步、原子操作和虚拟内存等架构机制,等效于主机处理器的内存模型(其 ISA 中可能采用不同但等效的指令机制)。
仅当缺乏该功能不会对内存模型产生重大影响时,才允许支持架构事务的子集。一个例子是,如果GI没有任何需要通过数据结构失效的全局内存本地缓存,GI上缺乏缓存一致性支持。
OS 确保 GI 遵循内存模型,作为与内存栅栏的可观察事务相关的主机处理器架构以及在启动器或主机上发出的其他同步操作。