动态资源分配的标准设备属性

动态资源分配的标准设备属性

Kubernetes 在 resource.kubernetes.io 域下定义了一组标准设备属性, 供动态资源分配(DRA)使用。 这些属性具有明确定义的语义,因此 matchAttribute 约束可以作用于来自不同 DRA 驱动的设备,而不需要了解具体驱动的实现细节。

我们鼓励 DRA 驱动在适用时发布这些属性。 Kubernetes 的 DRA 辅助库(k8s.io/dynamic-resource-allocation/deviceattribute) 提供了驱动可调用的若干函数,用于从 sysfs 推导出正确的值。

标准属性

resource.kubernetes.io/numaNode

用于标识设备的 NUMA 拓扑。此属性可以是以下两种形式之一:

  • 标量整数:设备的物理 NUMA 节点,读取自内核的 numa_node sysfs 条目。 这种形式不需要任何特性门控。
  • 整数列表(需要 DRAListTypeAttributes 特性门控):先是物理 NUMA 节点, 随后是处于最小 ACPI SLIT 距离的同插槽 NUMA 节点。例如,在一个每插槽有 4 个 NUMA 节点的 AMD EPYC 系统上,位于 NUMA 节点 5 上的设备可以发布 [5, 4, 6, 7],表示 NUMA 节点 4、6 和 7 位于同一插槽且相互等距。

将此属性与 matchAttribute 一起使用,可以把来自不同驱动的设备共置在同一个 NUMA 节点上。当使用列表类型的值时,调度器执行集合求交: 只要两个设备的 NUMA 节点列表至少共享一个值,二者即匹配。

不具备 NUMA 亲和性的设备(sysfs 中 numa_node = -1)不得发布此属性。

面向 DRA 驱动编写者的辅助函数:

  • GetNUMANodeAttributeByPCIBusID(pciBusID, attrForm):用于 PCI 设备 (GPU、NIC、NVMe 控制器)。它从 sysfs 读取 numa_node,并且当 attrFormListAttribute 时,计算出基于 SLIT 的列表。
  • GetNUMANodeAttribute(numaNode, attrForm):用于已经知道自身 NUMA 节点的设备(CPU、内存)。
  • GetNUMANodeForCPU(cpuID):返回某个 CPU 核心所属的 NUMA 节点。

resource.kubernetes.io/pciBusID

PCI 设备的 PCI 总线地址,采用扩展 BDF 表示法 (Domain:Bus:Device.Function)。此属性唯一标识节点上的某个 PCI 设备。

resource.kubernetes.io/pcieRoot

PCI 设备的 PCIe 根复合体,格式为 pci<domain>:<bus>。 共享同一个 PCIe 根复合体的设备连接在同一个 PCIe 交换层级之下。 将此属性与 matchAttribute 一起使用,可以把设备共置在同一个 PCIe 根之下, 从而实现延迟最低的通信。

最后修改 September 16, 2026 at 3:00 PM PST: [zh] Add dra-standard-device-attributes.md (1fca2b3840)