5.2.27. 异构内存属性表(HMAT)
5.2.27.1. HMAT 概述
异构内存属性表 (HMAT) 描述与内存邻近域相关的内存属性,例如内存端缓存属性以及带宽和延迟详细信息。软件预计会使用此信息作为优化提示,或者当系统具有异构内存时。
OSPM 仅在系统初始化期间评估HMAT。运行时对 HMAT 状态的任何更改或有关热插拔的 HMAT 的信息均使用 _HMA 方法进行通信。
HMAT 由以下结构组成:
1.存储器邻近域属性结构。描述内存邻近域的属性。参见表 5.128。
2.系统局部性延迟和带宽信息结构。描述来自各种内存访问发起者邻近域的内存访问延迟和带宽信息。参见第 5.2.27.4 节。可选的访问模式和传输大小参数指示实现延迟和带宽的条件。
3.内存端高速缓存信息结构。如果存在内存端高速缓存并且物理设备(SMBIOS句柄)形成内存端高速缓存,则描述内存邻近域的内存端高速缓存信息。参见表 5.130。
这些结构如下图所示。

图 5.10HMAT 表示
| 表 5.126 异构内存属性表头 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| - 签名 | 4 | 0 | “HMAT”是该表的签名 |
| - 长度 | 4 | 4 | 整个表的长度(以字节为单位)。 |
| - 修订 | 1 | 8 | 2 |
| - 校验和 | 1 | 9 | 整个表的总和必须为零 |
| - OEMID | 6 | 10 | 10 OEM ID |
| - OEM 表 ID | 8 | 16 | 16表ID是制造商型号ID |
| - OEM 修订 | 4 | 24 | OEM 所提供表格的修订版 OEM 表 ID |
| - 创建者ID | 4 | 28 | 28创建该表的实用程序的供应商ID |
| - 创建者修订 | 4 | 32 | 32修改创建表的实用程序 |
| 保留 | 4 | 36 | 36使结构8字节对齐 |
| HMAT 表结构[n] | — | 40 | 此实施的HMAT表结构列表。 |
| 表 5.127 HMAT 结构类型 值 | 描述 | ||
| --- | --- | ||
| 0 | 内存邻近域属性结构 | ||
| 1 | 系统局部性延迟和带宽信息结构 | ||
| 2 | 内存端缓存信息结构 | ||
| 3-0xFFFF | 3-0xFFFF | 保留 |
5.2.27.2. 内存端缓存概述
内存端缓存可以优化内存子系统的性能。图 5.11 显示了软件看到的系统物理地址 (SPA) 范围的示例,其中内存侧缓存位于实际内存之前。当软件访问SPA时,如果它存在于近存储器中(命中),则会将其返回给软件,如果它不存在于近存储器中(未命中),则会访问下一级存储器,依此类推。

图 5.11 内存端缓存示例
术语“远存储器”用于表示存储器层次结构中的最后一级存储器(0 级存储器),如图 5.11 所示。 n 级内存充当 n-1 级内存的内存端高速缓存,n-1 级内存充当 n-2 级内存的内存端高速缓存,依此类推。如果非易失性内存由内存侧缓存进行缓存,则平台负责在断电、系统崩溃或其他故障时持久保存非易失性内存区域对应的内存侧缓存的修改内容。
5.2.27.3. 内存邻近域属性结构
该结构描述了内存子系统占用的系统物理地址(SPA)范围及其与处理器邻近域的关联性以及内存使用的提示。
| 表 5.128 内存邻近域属性结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 2 | 0 | 0 - 内存邻近域属性结构 |
| 保留 | 2 | 2 | |
| 长度 | 4 | 4 | 40 - 整个结构的长度(以字节为单位)。 |
| 旗帜 | 2 | 8 | Bit [0]:设置为 1 表示 Attached Initiator 字段的邻近域中的数据有效。位[1]:保留。先前定义为“内存邻近域”字段是有效的。自 ACPI 6.3 起已弃用。位[2]:保留。以前定义为预订提示。自 ACPI 6.3 起已弃用。位[15:3]:保留。 |
| 保留 | 2 | 10 | 10 |
| 附加发起者的邻近域 | 4 | 12 | 12仅当负责访问指定内存邻近域内内存的内存控制器,直接连接到属于某个邻近域的发起者时,该字段才有效。在这种情况下,该字段包含一个整数,表示该发起者(通用发起者或处理器)所属的邻近域。如果发起者是处理器,则此编号应与 SRAT 表中的处理器亲和结构(例如处理器本地 APIC/SAPIC 亲和结构、处理器本地 x2APIC 亲和结构、GICC 亲和结构)中的相应条目匹配;如果发起者是通用发起者,则应与通用发起者亲和结构中的相应条目匹配。注意:此字段提供关于最接近指定内存邻近域内该内存地址范围的发起者节点的附加信息(例如直接连接),因此应能提供最佳性能。 |
| 内存的邻近域 | 4 | 16 | 16表示该内存所属的内存邻近域的整数。 |
| 保留 | 4 | 20 | |
| 保留 | 8 | 24 | 先前定义为系统物理地址范围的起始地址。自 ACPI 规范 6.3 起已弃用。 |
| 保留 | 8 | 32 | 32先前定义为区域的范围长度(以字节为单位)。自 ACPI 规范 6.3 起已弃用。 |
5.2.27.4. 系统局部性延迟和带宽信息结构
该结构提供了一个矩阵,用于描述标准化内存读/写延迟、启动器邻近域(处理器或 I/O)和目标邻近域(内存)之间的读/写带宽。
延迟的入口基本单位以皮秒为单位。带宽的入门基本单位以兆字节每秒 (MB/s) 为单位。发起者到目标邻近域矩阵条目可以具有以下值之一:
1-0xFFFE:对应的延迟或带宽信息,以Entry Base Unit的倍数表示。
0xFFFF:发起者域和目标域彼此无法访问。
所表示的延迟或带宽值确定如下:
表示的延迟 =(发起方到目标邻近域矩阵条目值 * 条目基本单元)皮秒。
表示带宽 =(发起方到目标邻近域矩阵条目值 * 条目基本单位)MB/s。
以下示例显示如何报告延迟和吞吐量值:
如果延迟的“条目基本单元”为 1,并且矩阵条目的值为 10,则延迟为 10 皮秒。
如果延迟的“条目基本单位”为 1000,并且矩阵条目的值为 100,则延迟为 100 纳秒。
如果BW的“条目基本单位”为 1,矩阵条目值为 10,则BW为 10MB/s。
如果BW的“条目基本单位”为 1024,矩阵条目值为 100,则BW为 100GB/s。
注意事项
最低延迟数字代表最佳性能,最高带宽数字代表最佳性能。此结构中表示的延迟和带宽数字对应于平台的规范额定延迟和带宽。所表示的延迟是通过聚合存储器设备和从启动器到目标的互连的规范额定延迟来确定的。所表示的带宽由存储器设备和从发起器到目标的互连的规格额定带宽中的最低带宽确定。
基于限定参数,例如最小传输大小等,可以存在多个表条目。它们可以从最佳性能到最差性能排序。除非表中另有说明,否则报告的数字假定自然对齐的数据和顺序访问传输。平台应根据适用于平台架构的不同的、软件可观察的延迟或带宽边界来声明“最小传输大小”。
| 表 5.129 系统位置延迟和带宽信息结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 2 | 0 | 1 - 系统局部性延迟和带宽信息结构 |
| 保留 | 2 | 2 | 保留 |
| 长度 | 4 | 4 | 整个结构的长度(以字节为单位)。 |
| 旗帜 | 1 | 8 | 位[3:0]内存层次结构:0x00 - 内存:如果内存端缓存不存在,则该结构代表内存性能。如果存在内存侧高速缓存,则该结构表示与该内存关联的任何内存侧高速缓存中没有发生命中时的内存性能。 0x01 - 第一级内存端高速缓存 0x02 - 第二级内存端高速缓存 0x03 - 第三级内存端高速缓存 位[5:4] 访问属性: 0x10 - 达到值的最小传输大小 0x20 - 非顺序传输 位[7:6] 保留 |
| 数据类型 | 1 | 9 | 此结构实例表示的数据类型: 如果内存层次结构 = 0: - 0 - 访问延迟(如果读取和写入延迟相同) - 1 - 读取延迟 - 2 - 写入延迟 - 3 - 访问带宽(如果读取和写入带宽相同) - 4 - 读取带宽 - 5 - 写入带宽 如果内存层次结构 = 1、2 或 3: - 0 - 访问命中延迟(如果读取)命中和写入命中延迟相同) - 1 - 读取命中延迟 - 2 - 写入命中延迟 - 3 - 访问命中带宽(如果读取命中和写入命中延迟相同) - 4 - 读取命中带宽 - 5 - 写入命中带宽 保留其他值。 |
| 最小传输大小 | 1 | 10 | 10 当达到带宽/延迟值时,传输大小定义为 2 指数的 5 次方。值如下: 0 – 字节对齐(任意对齐) 1 – 64 字节 2 – 128 字节 3 – 256 字节 … 7 – 4096 字节 8 - 8192 字节 … 11 – 64KiByte … |
| 保留 | 1 | 11 | 11保留 |
| 启动器邻近域的数量 | 4 | 12 | 12表示可以向其他邻近域发起内存访问请求的邻近域总数。这通常是处理器或 I/O 邻近域。 |
| 目标邻近域的数量 (t) | 4 | 16 | 16指示可以充当目标的邻近域的总数。这通常是内存邻近域。 |
| 保留 | 4 | 20 | 保留 |
| 入门基础单元 | 8 | 24 | 矩阵条目值的基本单位(延迟或带宽)。延迟的基本单位(皮秒)。带宽的基本单位,以兆字节每秒 (MB/s) 为单位。该字段应非零。 |
| 发起者邻近域列表[0] | 4 | 32 | 32 |
| 发起者邻近域列表[1] | 4 | ||
| …… | |||
| 发起者邻近域列表[s-1] | 4 | ||
| 目标邻近域列表[0] | 4 | 32 + 4 x s | 32 + 4 x s |
| 目标邻近域列表[1] | 4 | ||
| …… | |||
| 目标邻近域列表[t-1] | 4 | ||
| 延迟/带宽值 | 条目总数应等于发起者邻近域的数量 * 目标邻近域的数量 | ||
| 条目[0][0] | 2 | 32 + 4 x s + 4 x t | 32 + 4 x s + 4 x t |
| 条目[0][1] | 2 | 矩阵条目(发起者邻近域列表[0]、目标邻近域列表[1]) | |
| …… | |||
| 条目[0][目标邻近域数量-1] | 2 | 矩阵条目(发起者邻近域列表[0]、目标邻近域列表[t-1]) | |
| 条目[1][0] | 2 | 矩阵条目(发起者邻近域列表[1]、目标邻近域列表[0]) | |
| 条目[1][1] | 2 | 矩阵条目(发起者邻近域列表[1]、目标邻近域列表[1]) | |
| …… |
条目[1][目标邻近域数量-1]| | |矩阵条目(发起者邻近域列表[1]、目标邻近域列表[t-1]) …… | | | 条目[发起者邻近域数量 - 1][目标邻近域数量 -1] | 2 | | 矩阵条目(发起者邻近域列表[s-1]、目标邻近域列表[t-1])
实施说明:
该表中的标志字段允许读取延迟、写入延迟、读取带宽和写入带宽以及内存层次结构级别、最小传输大小和访问属性。因此,该结构可以重复多次,以表达存储器层次结构级别、为每个级别表达的存储器和传输属性的所有适当组合。如果存在多个结构,则可以从最佳性能到最差性能对它们进行排序。除非表中另有说明,否则报告的数字假定自然对齐的数据和顺序访问传输。
如果HMAT中提供了延迟或带宽信息,则要求其相对于发起者-目标对条目是完整的。例如,如果读取延迟包含在SLLBI中,则所有启动器-目标对的读取延迟都必须存在。如果某些对无法计算,则必须完全忽略读取延迟数据集。仅提供可能数据集的子集是可以接受的。例如,提供读取延迟但忽略写入延迟是可以接受的。这为OSPM提供了至少一组属性的完整图片,并且它可以选择保留该数据或丢弃它。
平台应根据适用于平台架构的不同的、软件可观察的延迟或带宽边界来声明“最小传输大小”。
如果包含内存延迟信息的SLIT表和HMAT表都存在,则OSPM表应尝试使用HMAT中的数据,而不是SLIT中的数据。
5.2.27.5. 内存端缓存信息结构
系统存储器层次结构可以被构造为具有大尺寸的低性能远存储器和小尺寸的高性能近存储器。内存端高速缓存信息结构描述给定内存域的内存端高速缓存信息。软件可以使用此信息有效地将数据放置在内存中,以最大限度地提高使用内存侧高速缓存的系统内存的性能。
| 表 5.130 内存端高速缓存信息结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 2 | 0 | 2 - 内存端缓存信息结构 |
| 保留 | 2 | 2 | |
| 长度 | 4 | 4 | 整个结构的长度(以字节为单位)。 |
| 内存的邻近域 | 4 | 8 | 表示内存端缓存信息适用的内存邻近域的整数。该数字应与SRAT表的内存关联结构中的相应条目匹配 |
| 保留 | 4 | 12 | 12 |
| 内存端缓存大小 | 8 | 16 | 16上述内存邻近域的内存端缓存大小(以字节为单位)。 |
| 缓存属性 | 4 | 24 | 位 [3:0] - 此内存邻近域的总缓存级别: - 0 - 无 - 1 - 一级缓存 - 2 - 二级缓存 - 3 - 三级缓存 - 保留其他值 位 [7:4] - 此结构中描述的缓存级别: - 0 - 无 - 1 - 一级缓存 - 2 - 二级缓存 - 3 - 三级缓存 - 保留其他值 位 [11:8] -缓存关联性: - 0 - 无 - 1 - 直接映射 - 2 - 复杂缓存索引(特定于实现) - 保留其他值 位 [15:12] - 写入策略 - 0 - 无 - 1 - 回写 (WB) - 2 - 直写 (WT) - 保留其他值 位 [31:16] - 缓存行大小(以字节为单位)。缓存未命中时从下一个缓存级别访问的字节数。 |
| 保留 | 2 | 28 | 28 |
| SMBIOS 手柄数量 (n) | 2 | 30 | 参与内存端缓存物理设备的SMBIOS句柄数。 |
| SMBIOS 手柄 | 2xn | 32 | 32指相应的SMBIOS Type-17 句柄结构,其中包含物理内存组件相关信息 |
实现注意事项: 邻近域应仅包含一组内存属性。如果内存属性不同,则将它们表示在不同的邻近域中。如果存在内存端高速缓存信息结构,则系统局部延迟和带宽信息结构应包含每个内存端高速缓存级别的延迟和带宽信息。