Chapter 9. NUMA

Historically, all memory on AMD64 and Intel 64 systems is equally accessible by all CPUs. Known as Uniform Memory Access (UMA), access times are the same no matter which CPU performs the operation.
This behavior is no longer the case with recent AMD64 and Intel 64 processors. In Non-Uniform Memory Access (NUMA), system memory is divided across NUMA nodes, which correspond to sockets or to a particular set of CPUs that have identical access latency to the local subset of system memory.
This chapter describes memory allocation and NUMA tuning configurations in virtualized environments.

9.1. NUMA Memory Allocation Policies

The following policies define how memory is allocated from the nodes in a system:
Strict
Strict policy means that the allocation will fail if the memory cannot be allocated on the target node.
Specifying a NUMA nodeset list without defining a memory mode attribute defaults to strict mode.
Interleave
Memory pages are allocated across nodes specified by a nodeset, but are allocated in a round-robin fashion.
Preferred
Memory is allocated from a single preferred memory node. If sufficient memory is not available, memory can be allocated from other nodes.
To enable the intended policy, set it as the value of the <memory mode> element of the domain XML file:
<numatune>
        <memory mode='preferred' nodeset='0'>
</numatune>

Important

If memory is overcommitted in strict mode and the guest does not have sufficient swap space, the kernel will kill some guest processes to retrieve additional memory. Red Hat recommends using preferred allocation and specifying a single nodeset (for example, nodeset='0') to prevent this situation.