The traditional model for multiprocessor support is Symmetric Multi-Processor (SMP). In this model, each processor has equal access to memory and I/O. As more processors are added, the processor bus becomes a limitation for system performance.
System designers are now using Non-Uniform Memory Access (NUMA) computer architectures to achieve effective increases in processor speed without increasing the load on the processor bus as with SMP architectures. The architecture is non-uniform because each processor is close to some parts of memory and farther from other parts of memory. The processor quickly gains access to the memory it is close to, while it can take longer to gain access to memory that is farther away.
In a NUMA system, CPUs are arranged in smaller systems called nodes. Each node has its own processors and memory, and is connected to the larger system through a cache-coherent inter-connecting bus.
The operating system attempts to improve performance by scheduling threads on processors that are in the same node as the memory being used. It attempts to satisfy memory-allocation requests from within the node, but will allocate memory from other nodes if necessary. Developer may use system API’s to discover the topology of the system. You can improve the performance of your applications by using the NUMA functions to optimize scheduling and memory usage.