NUMA (Non-Uniform Memory Access) — a memory architecture where access time depends on which CPU socket the memory is attached to, critical for multi-socket server performance.
Architecture
[CPU 0] ← local memory (fast: ~80ns)
| interconnect (~120-180ns)
[CPU 1] ← local memory (fast: ~80ns)
- Each CPU socket has its own memory controller and local DRAM
- Accessing local memory: ~80ns
- Accessing remote memory (other socket): ~120-180ns (1.5-2x slower)
Impact on Software
- NUMA-unaware programs can suffer 30-50% performance loss
- OS tries to allocate memory on the socket where the thread runs
- Thread migration between sockets → sudden performance drop (all memory accesses become remote)
NUMA-Aware Programming
- Pin threads to specific cores/sockets (
numactl,taskset) - Allocate memory on the local node (
numa_alloc_onnode()) - First-touch policy: Memory is allocated on the node where it's first accessed
- Partition data so each thread works on locally-allocated data
Checking NUMA Topology
numactl --hardware— show nodes, CPUs, and memorynumastat— show memory allocation per node
NUMA matters significantly for databases (MySQL, PostgreSQL), HPC applications, and any memory-intensive workload on multi-socket systems.
numa architecturenon uniform memory accessnuma aware
Explore 500+ Semiconductor & AI Topics
From EUV lithography to CUDA optimization — search the full knowledge base or chat with our AI assistant.