NUMA 资源关联

关联性表示将各种平台资源分组到各个域中,相对于该域之外的资源,这些域具有大体相似的平均性能。给定域的资源子集如果彼此之间的性能表现优于与其他资源子集的性能表现,则被表示为子分组域的成员。这种性能特征在 Linux 内核中以 NUMA 节点距离的形式来呈现。从平台的角度来看,这些分组也称为域。

PAPR 接口目前支持通过不同方式向操作系统传达这些资源分组的详细信息。这些方式被称为 Form 0、Form 1 和 Form 2 关联分组。Form 0 是最古老的格式,现在已被视为弃用。

Hypervisor 通过 “ibm,architecture-vec-5” 属性指示所使用的关联类型/形式。“ibm,architecture-vec-5” 属性中字节 5 的第 0 位指示使用 Form 0 还是 Form 1。值为 1 表示使用 Form 1 关联。对于 Form 2 关联,则使用 “ibm,architecture-vec-5” 属性中字节 5 的第 2 位。

Form 0

Form 0 关联仅支持两种 NUMA 距离(LOCAL 和 REMOTE)。

Form 1

在 Form 1 中,结合使用 ibm,associativity-reference-points 和 ibm,associativity 设备树属性来确定资源组/域之间的 NUMA 距离。

“ibm,associativity” 属性包含一个或多个数字(domainID)的列表,这些数字表示资源的平台分组域。

“ibm,associativity-reference-points” 属性包含一个或多个数字(domainID 索引)的列表,这些数字表示关联列表中以 1 为起始的序数。domainID 索引列表表示资源分组的递增层次结构。

例如:{ 一级 domainID 索引, 二级 domainID 索引, 三级 domainID 索引.. }

Linux 内核将一级 domainID 索引处的 domainID 用作 NUMA 节点 ID。Linux 内核通过递归比较两个域是否属于相同的更高层域来计算它们之间的 NUMA 距离。如果资源组在每一个更高层级上不匹配,内核就会将正在比较的两个域之间的 NUMA 距离加倍。

Form 2

Form 2 关联格式添加了用于表示 NUMA 节点距离的独立设备树属性,从而使节点距离的计算变得灵活。Form 2 还允许灵活的一级域编号。由于 NUMA 距离的计算现在与 “ibm,associativity-reference-points” 属性中的索引值解耦,Form 2 允许在相同的 domainID 索引处存在大量的一级域 ID,它们代表具有不同性能/延迟特性的资源组。

Hypervisor 通过 “ibm,architecture-vec-5” 属性中字节 5 的第 2 位来指示是否使用 FORM2 关联。

“ibm,numa-lookup-index-table” 属性包含一个或多个数字的列表,这些数字表示系统中存在的 domainID。在通过 “ibm,numa-distance-table” 计算 NUMA 距离信息时,此属性中 domainID 的偏移量将被用作索引。

prop-encoded-array:使用 encode-int 编码的 domainID 数量 N,后面紧跟 N 个使用 encode-int 编码的 domainID

例如:“ibm,numa-lookup-index-table” = {4, 0, 8, 250, 252}。在计算域 8 与系统中存在的其他域的距离时,会使用 domainID 8 的偏移量 (2)。在本文档的其余部分中,此偏移量将被称为域距离偏移量(domain distance offset)。

“ibm,numa-distance-table” 属性包含一个或多个数字的列表,这些数字表示系统中存在的资源组/域之间的 NUMA 距离。

prop-encoded-array:使用 encode-int 编码的距离值数量 N,后面紧跟 N 个使用 encode-bytes 编码的距离值。我们可以编码的最大距离值为 255。数字 N 必须等于 m 的平方,其中 m 是 numa-lookup-index-table 中的 domainID 数量。

例如:ibm,numa-lookup-index-table = <3 0 8 40>; ibm,numa-distace-table = <9>, /bits/ 8 < 10 20 80 20 10 160 80 160 10>;

  | 0    8   40
--|------------
  |
0 | 10   20  80
  |
8 | 20   10  160
  |
40| 80   160  10

节点 0、8 和 40 中资源的一个可能的 “ibm,associativity” 属性

{ 3, 6, 7, 0 } { 3, 6, 9, 8 } { 3, 6, 7, 40}

配合 “ibm,associativity-reference-points” { 0x3 }

“ibm,lookup-index-table” 有助于以紧凑的形式表示距离矩阵。由于 domainID 可能是稀疏的,因此距离矩阵实际上也可以是稀疏的。借助 “ibm,lookup-index-table”,我们可以实现距离信息的紧凑表示。