Numa Architecture

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 memory
  • `numastat` — show memory allocation per node

NUMA matters significantly for databases (MySQL, PostgreSQL), HPC applications, and any memory-intensive workload on multi-socket systems.

Take numa architecture further

Ask the copilot about this term, or have our engineers assess it against your process.