Sets the NUMA memory policy of the calling process.
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 policy can be set for specific memory ranges using sys_mbind. 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.
Arguments
eax |
276 |
ebx |
Policy:
MPOL_DEFAULT |
This is the default and means to allocate memory locally, i.e., on the node of the CPU that triggered the allocation. ecx should be specified as NULL. |
MPOL_PREFERRED |
Sets the preferred node for allocation. The kernel will try to allocate in this node first and fall back to other nodes if the preferred node is low on free memory. Only the first node in the bitmask pointed by ecx is used. If no node is set in the mask, then the memory is allocated on the node of the CPU that triggered the allocation allocation (like MPOL_DEFAULT). |
MPOL_BIND |
A strict policy that restricts memory allocation to the nodes specified in the bitmask pointed by ecx . There won't be allocations on other nodes. |
MPOL_INTERLEAVE |
Interleaves allocations to the nodes specified in the bitmask pointed by ecx. This optimizes for bandwidth instead of latency. To be effective the memory area should be fairly large, at least 1MB or bigger. |
|
|
ecx |
Pointer to a bit field of nodes
specifying the nodes to which the policy applies.
The bit field size is rounded to the next multiple of dword, but the kernel will only use bits up to edx. |
edx |
Number of bits in the bit field pointed by ecx. |
Return values
If the system call succeeds the return value is 0.
If the system call fails the return value is one of the following errno values:
-EINVAL |
Unrecognized policy (ebx). |
-EFAULT |
ecx points to an invalid location. |
|
Remarks
The memory policy is inherited by child processes created using sys_fork or sys_clone.
Compatibility
Available since 2.6.7 |