PAYATHON 2026

NUMA 系统中的 Node 和 Cell 有什么区别?

技术问小赵

Node 和 Cell 是否有区别,取决于使用它们的文档。在 Linux 内核的 NUMA 概念说明中,Cell 指硬件单元,Node 指操作系统对硬件资源的抽象;在 libvirt 的 NUMA 配置中,Cell 和 NUMA Node 表示同一种拓扑单元。因此,判断两者的关系需要结合具体语境。

Linux 文档如何区分两者?

为了区分硬件视角和软件视角,Linux 内核的 What is NUMA? 对两者作了如下区分:

术语在该文档中的含义
Cell物理硬件组件或组件集合,可以包含 CPU、内存和 I/O 资源
NodeLinux 划分和管理系统资源时使用的软件抽象,并映射到硬件 Cell

NUMA 关注访问位置带来的开销差异。例如,CPU 访问同一 Cell 上的内存,通常比访问远端 Cell 上的内存更快。操作系统通过 Node 表示这种局部性关系,用于内存分配和调度。Linux 内核文档

这是该文档对 Cell 的定义,不能直接推广到所有平台。

为什么它们看起来是同一个东西?

当一个硬件 Cell 恰好映射为一个软件 Node 时,两者描述的是同一组资源,观察角度不同。

不过,Cell 和 Node 不一定一一对应。例如,Linux 的 NUMA emulation 可以把现有节点的内存划分给多个模拟 Node。这时,操作系统看到的 Node 数量不能直接当成物理 Cell 的数量。Linux NUMA emulation 说明

为什么 libvirt 使用 Cell?

libvirt 的 Domain XML 文档说明,每个 <cell> 元素表示一个 NUMA Cell 或 NUMA Node。下面是一个用于说明语法的客户机 CPU 配置片段:

<cpu>
  <numa>
    <cell id='0' cpus='0-3' memory='512000' unit='KiB'/>
    <cell id='1' cpus='4-7' memory='512000' unit='KiB'/>
  </numa>
</cpu>

这里定义了两个客户机 NUMA Node:节点 0 包含 vCPU 0 至 3,节点 1 包含 vCPU 4 至 7,每个节点都配置了 512000 KiB 内存。cell 是 XML 元素名称,不表示 Node 内部还有一个单独的 Cell 层级。libvirt Domain XML 文档

阅读具体资料时如何判断?

  1. 先确认文档讨论的是物理硬件、操作系统拓扑,还是虚拟机配置。
  2. 查看文档对 Cell 和 Node 的定义,不要仅凭名称推断层级或数量关系。
  3. 如果需要核对两者是否一一对应,应比较它们关联的 CPU、内存及拓扑信息。

原问题没有给出这两个术语出现的具体文档,还需结合该文档的定义判断其准确含义。

备注:内容仅供参考。