Is a machine with a single NUMA node, actually a regular (non-NUMA) system

central-processing-unitnumasmp

First, let's check I got the fundamentals right:

As I understand it, NUMA systems are a (asymmetric) network of NUMA nodes, where a NUMA node is usually (but not always) a physical CPU package. In a NUMA system, each node has its own local memory, and the memory of the other nodes are available via a bus. The non-uniformity of the network means that obtaining foreign memory incurs a varying cost depending on locality of the two nodes involved in a memory fetch.

Now, assuming I got that right, here is some output from a real Linux system.

The kernel support NUMA (has the support compiled in at least):

$ 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

But there is only one NUMA node:

$ 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 

Also note that there is only one path down the NUMA bus, from node 0 to node 0 (interestingly with distance 10, not 0). This implies that all memory accesses bear the same cost in terms of NUMA latency at least.

So, since there is only a single NUMA node, this is a regular SMP machine, with no NUMA capability, right? I think so.

Thanks.

Best Answer

Modern x86 CPU architectures (AMD Opteron and later and Intel Nehalem-based Xeon and later) are NUMA capable, but they do not necessarily require to work in NUMA mode.

In your specific case, you have a NUMA capable CPU working as a single node, so no NUMA behavior will be detected.

Related Topic