Policy settings are:
--interleave=nodes, -i nodes
|Set an memory interleave policy. Memory will be allocated using round robin on nodes. When memory cannot be allocated on the current interleave target fall back to other nodes.|
|--membind=nodes, -m nodes|
|Only allocate memory from nodes. Allocation will fail when there is not enough memory available on these nodes.|
|--cpunodebind=nodes, -N nodes|
|Only execute process on the CPUs of nodes. Note that nodes may consist of multiple CPUs.|
|--physcpubind=cpus, -C cpus|
|Only execute process on cpus. This accepts physical cpu numbers as shown in the processor fields of /proc/cpuinfo.|
|Do always local allocation on the current node.|
|Preferably allocate memory on node, but if memory cannot be allocated there fall back to other nodes. This option takes only a single node number.|
|--show, -s||Show NUMA policy settings of the current process.|
|Show inventory of available nodes on the system.|
|Numactl can set up policy for a SYSV shared memory segment or a file in shmfs/hugetlbfs.|
This policy is persistent and will be used by all mappings from that shared memory. The order of options matters here. The specification must at least include either of --shm, --shmid, --file to specify the shared memory segment or file and a memory policy like described above ( --interleave, --localalloc, --prefered, --membind ).
|--huge||When creating a SYSV shared memory segment use huge pages. Only valid before --shmid or --shm|
|Specify offset into the shared memory segment. Default 0. Valid units are m (for MB), g (for GB), k (for KB), otherwise it specifies bytes.|
|Give an error when a page in the policied area in the shared memory segment already was faulted in with a conflicting policy. Default is to silently ignore this.|
|Only valid before --shmid or --shm When creating a shared memory segment set it to numeric mode shmmode.|
|Apply policy to length range in the shared memory segment or make the segment length long Default is to use the remaining length Required when a shared memory segment is created and specifies the length of the new segment then. Valid units are m (for MB), g (for GB), k (for KB), otherwise it specifies bytes.|
|Create or use an shared memory segment with numeric ID id|
|Create or use an shared memory segment, with the ID generated using ftok(3) from shmkeyfile|
|Set policy for a file in tmpfs or hugetlbfs|
|--touch||Touch pages to enforce policy early. Default is to not touch them, the policy is applied when an applications maps and accesses a page.|
|--dump||Dump policy in the specified range.|
|Valid node specifiers|
numactl --cpubind=0--membind=0,1 process Run process on node 0 with memory allocated on node 0 and 1.
numactl --preferred=1 numactl --show Set preferred node 1 and show the resulting state.
numactl --interleave=all --shmkeyfile /tmp/shmkey Interleave all of the sysv shared memory regiion specified by /tmp/shmkey over all nodes.
numactl --offset=1G --length=1G --membind=1 --file /dev/shm/A --touch Bind the second gigabyte in the tmpfs file /dev/shm/A to node 1.
numactl --localalloc /dev/shm/file Reset the policy for the shared memory file file to the default localalloc policy.
Command is not executed using a shell. If you want to use shell metacharacters in the child use sh -c as wrapper.
Setting policy for a hugetlbfs file does currently not work because it cannot be extended by truncate.
Shared memory segments larger than numactls address space cannot be completely policied. This could be a problem on 32bit architectures. Changing it piece by piece may work.
The old --cpubind which accepts node numbers, not cpu numbers, is deprecated and replaced with the new --cpunodebind and --physcpubind options.
/sys/devices/system/node/node*/numastat for NUMA memory hit statistics.