![具有单个 NUMA 节点的机器实际上是常规(非 NUMA)系统吗?](https://linux22.com/image/705507/%E5%85%B7%E6%9C%89%E5%8D%95%E4%B8%AA%20NUMA%20%E8%8A%82%E7%82%B9%E7%9A%84%E6%9C%BA%E5%99%A8%E5%AE%9E%E9%99%85%E4%B8%8A%E6%98%AF%E5%B8%B8%E8%A7%84%EF%BC%88%E9%9D%9E%20NUMA%EF%BC%89%E7%B3%BB%E7%BB%9F%E5%90%97%EF%BC%9F.png)
首先,让我们检查一下基本知识是否正确:
据我了解,NUMA 系统是 NUMA 的(非对称)网络节点,其中 NUMA 节点通常(但并非总是)是物理 CPU 包。在 NUMA 系统中,每个节点都有自己的本地内存,其他节点的内存可通过总线使用。网络的不均匀性意味着获取外部内存会产生不同的成本,具体取决于内存提取中涉及的两个节点的位置。
现在,假设我理解正确,以下是来自真实 Linux 系统的一些输出。
内核支持NUMA(至少在编译中已支持):
$ grep NUMA /boot/config-`uname -r`
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
CONFIG_ARCH_USES_NUMA_PROT_NONE=y
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_AMD_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
CONFIG_NUMA_EMU=y
CONFIG_USE_PERCPU_NUMA_NODE_ID=y
CONFIG_ACPI_NUMA=y
但只有一个NUMA节点:
$ numactl -H
available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 15955 MB
node 0 free: 5203 MB
node distances:
node 0
0: 10
还要注意,NUMA 总线上只有一条路径,从节点 0 到节点 0(有趣的是距离是 10,而不是 0)。这意味着所有内存访问至少在 NUMA 延迟方面承担相同的成本。
那么,由于只有一个 NUMA 节点,所以这是一台常规的 SMP 机器,没有 NUMA 功能,对吗?我认为是这样。
谢谢。
答案1
现代 x86 CPU 架构(AMD Opteron 及更高版本以及基于 Intel Nehalem 的 Xeon 及更高版本)是支持 NUMA,但它们不一定需要在NUMA模式下工作。
在你的特定情况下,你有一个支持 NUMA 的 CPU 作为单个节点工作,因此无 NUMA 行为将被检测到。