set_mempolicy(2) -- Linux man page
NAME
#include <linux/mempolicy.h>
int set_mempolicy(int policy, unsigned long *nodemask, unsigned long maxnode)
DESCRIPTION
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 bigger.
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.
NOTES
Process policy is not remembered when the page is swapped out.
Applications should consider using the higher level functions
in
numa(3)
instead.
RETURN VALUE
set_mempolicy
returns -1 when an error occurred, otherwise 0.
SEE ALSO
mbind(2),
get_mempolicy(2),
numactl(8),
numa(3)
|