mbind(2) -- Linux man page
mbind - Set memory policy for an memory range
int mbind(void *start, unsigned long len, int policy, unsigned long *nodemask,
unsigned long maxnode, unsigned flags)
sets the NUMA memory
for the memory range starting with
The memory of a NUMA machine is divided into multiple nodes.
The memory policy defines in which node memory is allocated.
has only an effect for new allocations; when the pages inside
the range have been already touched before setting the policy
the policy has no effect.
Available policies are
All policies except
require to specify the nodes they apply to in the
is a bit field of nodes that contains upto
The node mask bit field size is rounded to the next multiple of
but the kernel will only use bits upto
is passed in the
will be returned when the existing pages in the mapping don't follow
policy is the default and means to use the underlying process policy
(which can be modified with
). Unless the process policy has been changed this means to allocate
memory on the node of the CPU that triggered the allocation.
should be passed as NULL.
policy is a strict policy that restricts memory allocation to the
nodes specified in
There won't be allocations on other nodes.
interleaves allocations to the nodes specified in
This optimizes for bandwidth instead of latency.
To be effective the memory area should be fairly large, at least 1MB or bigger.
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
is used. When no node is set in the mask the current node is used for allocation.
returns -1 when an error occurred, otherwise 0.
There was a unmapped hole in the specified memory range
or an passed pointer was not valid.
An illegal parameter was passed.
System out of memory
was specified and an existing page was already on an wrong node.
For a higher level interface it is recommended to use the functions in
Until glibc supports these system calls you can link with
to get system call definitions.
is ignored on huge page mappings right now. For preferred and interleave
mappings it will only accept the first choice node.
mode the interleaving is changed at fault time. The final layout of
the pages depends on the order they were faulted in first.