NUMA (non-uniform memory access)
In short: With NUMA (“non-uniform memory access”) each processor has its own nearby memory, and access to another processor’s memory takes longer.
In more detail: Servers with several processor sockets or many chiplets split RAM into regions (“nodes”). Access to the own node is fast, access to a foreign one slower and with less throughput.
In Depth
- Contrast with UMA: There all memory accesses are equally fast, typical for desktop PCs with one processor.
- Consequence for software: A thread running on node 0 that reads data on node 1 is slowed down.
- Operating system: Linux by default allocates memory near the requesting core (“first touch”) and tries to keep processes on their node.
- Tools:
numactl --hardwarelists the nodes,numactl --cpunodebind=0 --membind=0 programbinds deliberately. - Databases and AI: Badly distributed load on multi-socket servers can cost throughput. Pinning and memory policies help.
- Also on desktop CPUs: Some Ryzen Threadripper models behave similarly.
See also: memory hierarchy and cache lines