5.2.29. 处理器属性拓扑表 (PPTT)
该可选表用于描述OSPM控制的处理器的拓扑结构及其共享资源,例如缓存。该表还可以描述附加信息,例如处理器拓扑中的哪些节点构成物理封装。 PPTT的结构如表5.137所示。
| 表 5.137 处理器属性拓扑表 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 标题 | |||
| - 签名 | 4 | 0 | “PPTT”处理器属性拓扑表 |
| - 长度 | 4 | 4 | 整个PPTT表的长度(以字节为单位) |
| - 修订 | 1 | 8 | 3 |
| - 校验和 | 1 | 9 | 整个表的总和必须为零。 |
| - OEMID | 6 | 10 | 10 OEM ID。 |
| - OEM 表 ID | 8 | 16 | 16 OEM 所提供表格的修订版 OEM 表 ID |
| - OEM 修订 | 4 | 24 | OEM 所提供的 OEM 表 ID 的 PPTT 修订版。 |
| - 创建者ID | 4 | 28 | 28创建该表的实用程序的供应商ID |
| - 创建者修订 | 4 | 32 | 32修改创建表的实用程序 |
| 身体 |
- 处理器拓扑结构[N]
| — | 36 | 36处理器拓扑结构列表
注意事项
以下各节描述了处理器拓扑结构。
5.2.29.1. 处理器层次结构节点结构(类型0)
处理器层级节点结构如表5.138 所示。该结构可用于描述单个处理器或组。为了描述拓扑关系,每个处理器层级节点结构可以指向父处理器层级节点结构。这允许表示树状拓扑结构。可以描述多个树,例如覆盖多个包。对于树的根,父指针应该为0。
如果存在PPTT,则通过MADT中断控制器结构提供的每个单独处理器都必须存在该结构的一个实例。此外,共享PPTT中描述的公共资源的一组处理器的每个实例都必须存在单独的条目。资源在其他PPTT结构中进行描述,例如类型 1 缓存结构。系统中的每个物理包还必须由处理器节点结构来表示。
每个处理器节点都包含该节点私有的资源列表。资源在其他PPTT结构中进行描述,例如类型 1 缓存结构。处理器节点的私有资源列表包括对代表给定处理器节点的私有资源的每个结构的引用。例如,SoC 级处理器节点可能包含两个引用,一个指向 3 级缓存资源,另一个指向ID结构。为了紧凑性,相同资源的单独实例可以用被列为多个处理器节点的资源的单个结构来表示。
例如,预计在常见情况下所有处理器都将具有相同的L1高速缓存。对于这些平台,所有处理器都可以列出单个L1高速缓存结构,如下图所示。
图 5.14L1 缓存结构
注意: 虽然空间效率较低,但为资源的每个实例声明一个节点也是可以接受的。在上面的示例中,为每个处理器声明L1是合法的。
注意: 如果实现需要唯一引用任何资源实例,则必须避免压缩相同的资源。例如,在上面的示例中,必须使用专用结构来声明每个处理器的L1资源,以允许对其进行唯一引用。
| 表 5.138 处理器层次结构节点结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 0-处理器结构 |
| 长度 | 1 | 1 | 本地处理器结构的长度(以字节为单位) |
| 保留 | 2 | 2 | 必须为零 |
| 旗帜 | 4 | 4 | 请参阅处理器结构标志。 |
| 家长 | 4 | 8 | 参考父处理器层次结构节点结构。该引用被编码为PPTT表的开头与父处理器结构条目的开头之间的差异。如果节点没有父节点,则必须使用零值。 |
| ACPI 处理器 ID | 4 | 12 | 12如果处理器结构代表实际处理器,则该字段必须与MADT中处理器条目中ACPI处理器ID字段的值匹配。如果处理器结构表示一组关联的处理器,则该结构可能与名称空间中的处理器容器匹配。在这种情况下,该条目将与关联处理器容器的 _UID 方法的值匹配。凡是有匹配的地方就必须有代表。标志字段,如_处理器结构标志_中所述,包括一个位来描述ACPI处理器ID是否有效。 |
| 私人资源数量 | 4 | 16 | 16私有资源中资源结构参考数量(下) |
| 私有资源[N] | N*4 | 20 | 每个资源都是对另一个PPTT结构的引用。所引用的结构不得是处理器层次结构节点。指向的每个资源结构代表处理器层次结构节点私有的资源。例如,对于高速缓存资源,高速缓存类型结构表示对于由该处理器层次结构节点结构表示的处理器拓扑的实例私有的高速缓存。引用被编码为PPTT表的开头和资源结构条目的开头之间的差异。 |
处理器结构标志如下表所述。
| 表 5.139 处理器结构标志 字段 | 位长度 | 位偏移 | 描述 |
|---|---|---|---|
| 实体包装 | 1 | 0 | 如果处理器拓扑的此节点代表物理封装的边界(无论是插座式还是表面安装式),则设置为 1。如果处理器拓扑的此实例不代表物理包的边界,则设置为 0。每个有效的处理器必须恰好属于一个包。也就是说,叶子本身必须是物理包或者具有标记为物理包的祖先。 |
| ACPI 处理器 ID 有效 | 1 | 1 | 对于处理器拓扑中的非叶条目,ACPI处理器ID条目可以与命名空间中的处理器容器相关。处理器容器将具有通过 _UID 方法返回的匹配ID值。由于并非PPTT中的每个处理器层次结构节点结构都可能具有匹配的处理器容器,因此该标志指示ACPI处理器ID是否指向有效条目。如果可以输入有效条目,ACPI“处理器”ID和“_UID”方法是必需的。对于代表MADT中列出的处理器的PPTT中的叶条目,必须始终提供ACPI处理器ID,并且该标志必须设置为 1。 |
| 处理器是一个线程 | 1 | 2 | 对于叶条目:如果表示该处理器的处理元素与兄弟节点共享功能单元,则必须设置为 1。对于非叶条目:必须设置为 0。 |
| 节点是叶子 | 1 | 3 | 如果节点是处理器层次结构中的叶子,则必须设置为 1。否则必须设置为 0。 |
| 相同的实施 | 1 | 4 | 值 1 表示所有子处理器共享相同的实现修订版。该字段在叶节点上应被OSPM忽略。注意:这意味着相同的处理器版本和相同的实现版本,而不仅仅是匹配的架构版本。 |
| 保留 | 27 | 27 5 | 必须为零 |
注意事项
共享核心的线程必须分组在每组线程的唯一处理器层次结构节点结构下。
注意事项
处理器可能在MADT中标记为禁用。在这种情况下,PPTT中相应的处理器层次结构节点结构应被视为禁用。此外,表示禁用所有子处理器的一组处理器的所有处理器层次结构节点结构应被视为已禁用。所有附加到PPTT中禁用的处理器层次结构节点结构的资源也应被视为禁用。
5.2.29.2. 缓存类型结构 - 类型 1
缓存类型结构如表 5.140 所示。高速缓存类型结构可用于表示特定处理器层级节点结构(即,处理器拓扑树中的特定节点)私有的一组高速缓存。该组缓存被描述为NULL(或零终止链表)。只有列表的头部需要被处理器节点列为资源(并计入私有资源数量),因为缓存节点本身包含到下一级缓存的链接。
高速缓存类型结构是可选的,并且可用于补充或替换处理器架构提供的高速缓存发现机制。例如,某些处理器架构描述了各个高速缓存属性,但没有提供发现哪些处理器共享特定高速缓存的方法。当提供高速缓存结构时,所有处理器高速缓存必须以高速缓存类型结构来描述。
每个高速缓存类型结构都包括对表示下一级高速缓存的高速缓存类型结构的引用。此上下文中的级别必须与CPU架构的缓存级别定义相关。该列表必须包括处理器层次结构节点私有的所有高速缓存。不允许跳过级别。即,给定层次结构处理器节点级别中包括的高速缓存节点不得指向该层次结构的不同级别中的处理器节点所引用的高速缓存结构。
例如,如果节点表示具有私有 L1 和私有 L2 缓存的 CPU,则列表将包含这两个缓存 (L1->L2->0)。另一方面,如果共享L2高速缓存,则该列表将仅包含L1(L1->0),并且对于共享L2的所有处理器,父处理器拓扑节点将包含表示共享L2的高速缓存类型结构。
具有单独指令和数据高速缓存的处理器或层次结构内的更高级别节点必须使用高速缓存类型结构的单独链表来描述指令和数据高速缓存,两者都被列为相关处理器层次结构节点结构的私有资源。如果单独的指令和数据高速缓存在更高级别的高速缓存上统一,则链表应该收敛。
考虑下图所示的示例。
图 5.15 缓存类型结构 - 类型 1 示例
在此类型 1 示例中:
每个处理器都有私有的L1数据、L1指令和L2高速缓存。两个处理器包含在一个提供L3高速缓存的集群中。
每个处理器的层次结构节点都有两个独立的缓存类型结构作为L1I和L1D的私有资源
L1I和L1D缓存结构都指向L2缓存结构作为其下一级缓存
L2缓存类型结构终止CPU缓存的链表。结果列表表示处理器级别的所有私有缓存
两个处理器节点都有指向代表集群的节点的父指针。
集群节点包含 L3 缓存作为其私有资源。 L3节点又没有下一级缓存。
列表中的条目主要指示层次结构中的该节点处存在高速缓存。在可能的情况下,应该使用处理器架构机制来发现高速缓存属性,但是高速缓存类型结构也可以提供高速缓存的属性。提供一个标志来指示表中提供的属性是否有效,在这种情况下,应优先使用表内容而不是处理器架构的发现。在基于 Arm 的系统上,必须在表中提供所有缓存属性。
| 表 5.140 缓存类型结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 类型 | 1 | 0 | 1 - 缓存类型结构 |
| 长度 | 1 | 1 | 28 |
| 保留 | 2 | 2 | 必须为零 |
| 旗帜 | 4 | 4 | 请参阅_高速缓存结构标志_。 |
| 下一级缓存 | 4 | 8 | 对处理器拓扑实例专用的下一级高速缓存的引用。该引用被编码为PPTT表的开头与高速缓存类型结构条目的开头之间的差异。如果该条目表示适合于使用该条目的处理器层次结构节点结构的最后一个高速缓存级别,则该值将为零。 |
| 尺寸 | 4 | 12 | 12缓存的大小(以字节为单位)。 |
| 套数 | 4 | 16 | 16缓存中的集合数 |
| 关联性 | 1 | 20 | 整数的方式。 |
| 属性 | 1 | 21 | 21 位 1:0:分配类型:0x0 - 读分配 0x1 - 写分配 0x2 或 0x03 表示读和写分配 位:3:2:缓存类型:0x0 数据 0x1 指令 0x2 或 0x3 表示统一缓存 位 4:写策略:0x0 写回 0x1 写通过 位:7:5 保留必须为零。 |
| 线尺寸 | 2 | 22 | 22行大小(以字节为单位) |
| 缓存ID | 4 | 24 | 此缓存的唯一非零标识符。如果如标志字段所示,缓存ID有效,则该结构定义系统中唯一的缓存。缓存ID值为 0 表示NULL标识符无效。 |
下表描述了缓存类型结构标志。
| 表 5.141 高速缓存结构标志 字段 | 位长度 | 位偏移 | 描述 |
|---|---|---|---|
| 尺寸属性有效 | 1 | 0 | 如果描述的尺寸属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定此属性的值。 |
| 有效套数 | 1 | 1 | 如果描述的集合属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定此属性的值。 |
| 关联性有效 | 1 | 2 | 如果所描述的关联性属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定此属性的值。 |
| 分配类型有效 | 1 | 3 | 如果描述的分配类型属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定该属性的值。 |
| 缓存类型有效 | 1 | 4 | 如果描述的缓存类型属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定该属性的值。 |
| 写保单有效 | 1 | 5 | 如果描述的写入策略属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定该属性的值。 |
| 线路尺寸有效 | 1 | 6 | 如果描述的线尺寸属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定此属性的值。 |
| 缓存ID 有效 | 1 | 7 | 如果描述的缓存ID属性有效,则设置为 1。值 0 表示在可能的情况下,应使用处理器体系结构特定的发现机制来确定此属性的值。 |
| 保留 | 24 | 8 | 必须为零 |

