When different CPU (cores) have different latency/access properties to system memory. Multi-socket systems are always NUMA, # Tips ## Low CPU Utilization on what should be CPU-constrained processes ![Unlocking Modern CPU Power](https://youtu.be/wGSSUSeaLgA?si=M5BBykHW3C7cE1Gr&t=5625) PCIe peripherals are always attached to a particular NUMA node, this includes *network cards* and NVMe drives (unsure if this would effect something like a SAS/SATA controller). So when processes access a network card, the get moved to the node that owns that card before they can continue. This migration is pretty sticky, can be made less so by lowering `kernel.sched_migration_cost_ns` with `sysctl` on [[Linux]]. When applications are compute intensive and network intensive, it *might* be more efficient to have pinned processes whose only job is to read and write from the network and use either shared memory or other kernel primitives to pass data between processes, preventing unnecessary NUMA process migrations (though there will still be memory page migrations).