Provided by: libnuma-dev_0.9-1_i386
set_mempolicy - Set default NUMA memory policy for a process and its
int set_mempolicy(int policy, unsigned long *nodemask, unsigned long
set_mempolicy sets the NUMA memory policy of the current process to
policy A NUMA machine has different memory controllers with different
distances to specific CPUs. The memory policy defines in which node
memory is allocated for the process. This system call defines the
default policy for the process, in addition a per memory range policy
can be set using mbind(2). The policy is only applied when a new page
is allocated for the process. For anonymous memory this is when the
page is first touched by the application.
Available policies are MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE,
MPOL_PREFERRED. All policies except MPOL_DEFAULT require to specify
the nodes they apply to in the nodemask parameter. nodemask is pointer
to a bit field of nodes that contains upto maxnode bits. The bit field
size is rounded to the next multiple of sizeof(unsigned long), but the
kernel will only use bits upto maxnode.
The MPOL_DEFAULT policy is the default and means to use the underlying
process policy (which can be modified with set_mempolicy(2) ). Unless
the process policy has been changed this means to allocate memory on
the node of the CPU that triggered the allocation. nodemask should be
passed as NULL.
The MPOL_BIND policy is a strict policy that restricts memory
allocation to the nodes specified in nodemask. There won’t be
allocations on other nodes.
MPOL_INTERLEAVE interleaves allocations to the nodes specified in
nodemask. This optimizes for bandwidth instead of latency. To be
effective the memory area should be fairly large, at least 1MB or
MPOL_PREFERRED sets the preferred node for allocation. The kernel will
try to allocate in this node first and fall back to other nodes when
the preferred nodes is low on free memory. Only the first node in the
nodemask is used. When no node is set in the mask the current node is
used for allocation.
There are no flags defined right now. This parameter should be
currently always set to 0.
Memory policy is inherited to children.
Process policy is not remembered when the page is swapped out.
Applications should consider using the higher level functions in
numa(3) instead. This library is available in the numactl package.
set_mempolicy returns -1 when an error occurred, otherwise 0.
The set_mempolicy syscall was added to the Linux kernel with version
2.6.7rc1. It is only available on kernels compiled with CONFIG_NUMA.
Until glibc supports these system calls you can link with -lnuma to get
system call definitions. libnuma is available in the numactl package.
It also has the numaif.h header.
mbind(2), get_mempolicy(2), numactl(8), numa(3)