]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/set_mempolicy.2
set_mempolicy.2: wfix
[thirdparty/man-pages.git] / man2 / set_mempolicy.2
CommitLineData
314093c9 1.\" Copyright 2003,2004 Andi Kleen, SuSE Labs.
73ae0a09 2.\" and Copyright 2007 Lee Schermerhorn, Hewlett Packard
314093c9 3.\"
9f882130 4.\" %%%LICENSE_START(VERBATIM_PROF)
314093c9
MK
5.\" Permission is granted to make and distribute verbatim copies of this
6.\" manual provided the copyright notice and this permission notice are
7.\" preserved on all copies.
8.\"
9.\" Permission is granted to copy and distribute modified versions of this
10.\" manual under the conditions for verbatim copying, provided that the
11.\" entire resulting derived work is distributed under the terms of a
12.\" permission notice identical to this one.
c13182ef 13.\"
314093c9
MK
14.\" Since the Linux kernel and libraries are constantly changing, this
15.\" manual page may be incorrect or out-of-date. The author(s) assume no
16.\" responsibility for errors or omissions, or for damages resulting from
c13182ef
MK
17.\" the use of the information contained herein.
18.\"
314093c9
MK
19.\" Formatted or processed versions of this manual, if unaccompanied by
20.\" the source, must acknowledge the copyright and authors of this work.
9f882130 21.\" %%%LICENSE_END
c13182ef 22.\"
314093c9 23.\" 2006-02-03, mtk, substantial wording changes and other improvements
00045cbb
MK
24.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
25.\" more precise specification of behavior.
314093c9 26.\"
67d2c687 27.TH SET_MEMPOLICY 2 2015-05-07 Linux "Linux Programmer's Manual"
314093c9 28.SH NAME
85677816 29set_mempolicy \- set default NUMA memory policy for a thread and its children
314093c9 30.SH SYNOPSIS
521bf584 31.nf
c13182ef 32.B "#include <numaif.h>"
314093c9 33.sp
2cbf26f1
RV
34.BI "long set_mempolicy(int " mode ", const unsigned long *" nodemask ,
35.BI " unsigned long " maxnode );
73ae0a09 36.sp
4ed3353d 37Link with \fI\-lnuma\fP.
521bf584 38.fi
314093c9
MK
39.SH DESCRIPTION
40.BR set_mempolicy ()
85677816 41sets the NUMA memory policy of the calling thread,
73ae0a09
MK
42which consists of a policy mode and zero or more nodes,
43to the values specified by the
44.IR mode ,
45.I nodemask
46and
0daa9e92 47.I maxnode
73ae0a09 48arguments.
314093c9
MK
49
50A NUMA machine has different
51memory controllers with different distances to specific CPUs.
73ae0a09 52The memory policy defines from which node memory is allocated for
85677816 53the thread.
314093c9 54
85677816
BG
55This system call defines the default policy for the thread.
56The thread policy governs allocation of pages in the process's
73ae0a09
MK
57address space outside of memory ranges
58controlled by a more specific policy set by
314093c9 59.BR mbind (2).
85677816 60The thread default policy also controls allocation of any pages for
9a141bfb 61memory-mapped files mapped using the
73ae0a09
MK
62.BR mmap (2)
63call with the
64.B MAP_PRIVATE
85677816 65flag and that are only read [loaded] from by the thread
9a141bfb 66and of memory-mapped files mapped using the
73ae0a09
MK
67.BR mmap (2)
68call with the
69.B MAP_SHARED
70flag, regardless of the access type.
33a0ccb2 71The policy is applied only when a new page is allocated
85677816 72for the thread.
c13182ef 73For anonymous memory this is when the page is first
85677816 74touched by the thread.
314093c9 75
73ae0a09
MK
76The
77.I mode
78argument must specify one of
314093c9
MK
79.BR MPOL_DEFAULT ,
80.BR MPOL_BIND ,
bcc7c6dc 81.BR MPOL_INTERLEAVE ,
a2b94599 82.BR MPOL_PREFERRED ,
73ae0a09 83or
5fcb90fd
MK
84.BR MPOL_LOCAL
85(which are described in detail below).
73ae0a09 86All modes except
314093c9 87.B MPOL_DEFAULT
73ae0a09 88require the caller to specify via the
c13182ef 89.I nodemask
c4bb193f 90argument one or more nodes.
73ae0a09 91
f98b728e
MK
92The
93.I mode
94argument may also include an optional
adfbcbeb 95.IR "mode flag" .
f98b728e
MK
96The supported
97.I "mode flags"
98are:
99.TP
100.BR MPOL_F_STATIC_NODES " (since Linux 2.6.26)"
aa796481 101A nonempty
f98b728e
MK
102.I nodemask
103specifies physical node ids.
f6374cc2 104Linux will not remap the
f98b728e
MK
105.I nodemask
106when the process moves to a different cpuset context,
107nor when the set of nodes allowed by the process's
108current cpuset context changes.
109.TP
110.BR MPOL_F_RELATIVE_NODES " (since Linux 2.6.26)"
aa796481 111A nonempty
f98b728e
MK
112.I nodemask
113specifies node ids that are relative to the set of
4e836144 114node ids allowed by the process's current cpuset.
f98b728e 115.PP
c13182ef 116.I nodemask
00045cbb 117points to a bit mask of node IDs that contains up to
314093c9 118.I maxnode
c13182ef 119bits.
73ae0a09 120The bit mask size is rounded to the next multiple of
c13182ef 121.IR "sizeof(unsigned long)" ,
33a0ccb2 122but the kernel will use bits only up to
314093c9 123.IR maxnode .
73ae0a09
MK
124A NULL value of
125.I nodemask
126or a
127.I maxnode
128value of zero specifies the empty set of nodes.
129If the value of
130.I maxnode
131is zero,
132the
133.I nodemask
134argument is ignored.
f98b728e 135
cdba9253
MK
136Where a
137.I nodemask
138is required, it must contain at least one node that is on-line,
139allowed by the process's current cpuset context,
f98b728e
MK
140[unless the
141.B MPOL_F_STATIC_NODES
142mode flag is specified],
cdba9253 143and contains memory.
f98b728e
MK
144If the
145.B MPOL_F_STATIC_NODES
146is set in
147.I mode
148and a required
149.I nodemask
150contains no nodes that are allowed by the process's current cpuset context,
151the memory policy reverts to
152.IR "local allocation" .
153This effectively overrides the specified policy until the process's
154cpuset context includes one or more of the nodes specified by
fe48639f 155.IR nodemask .
314093c9 156
c13182ef 157The
314093c9 158.B MPOL_DEFAULT
85677816 159mode specifies that any nondefault thread memory policy be removed,
f98b728e 160so that the memory policy "falls back" to the system default policy.
88879aeb
MK
161The system default policy is "local allocation"\(emthat is,
162allocate memory on the node of the CPU that triggered the allocation.
c13182ef 163.I nodemask
73ae0a09
MK
164must be specified as NULL.
165If the "local node" contains no free memory, the system will
166attempt to allocate memory from a "near by" node.
314093c9
MK
167
168The
169.B MPOL_BIND
73ae0a09 170mode defines a strict policy that restricts memory allocation to the
c13182ef 171nodes specified in
314093c9 172.IR nodemask .
73ae0a09
MK
173If
174.I nodemask
175specifies more than one node, page allocations will come from
00045cbb 176the node with the lowest numeric node ID first, until that node
73ae0a09
MK
177contains no free memory.
178Allocations will then come from the node with the next highest
00045cbb 179node ID specified in
73ae0a09
MK
180.I nodemask
181and so forth, until none of the specified nodes contain free memory.
182Pages will not be allocated from any node not specified in the
183.IR nodemask .
314093c9
MK
184
185.B MPOL_INTERLEAVE
73ae0a09
MK
186interleaves page allocations across the nodes specified in
187.I nodemask
00045cbb 188in numeric node ID order.
73ae0a09
MK
189This optimizes for bandwidth instead of latency
190by spreading out pages and memory accesses to those pages across
191multiple nodes.
192However, accesses to a single page will still be limited to
193the memory bandwidth of a single node.
194.\" NOTE: the following sentence doesn't make sense in the context
195.\" of set_mempolicy() -- no memory area specified.
196.\" To be effective the memory area should be fairly large,
197.\" at least 1MB or bigger.
314093c9
MK
198
199.B MPOL_PREFERRED
c13182ef 200sets the preferred node for allocation.
73ae0a09
MK
201The kernel will try to allocate pages from this node first
202and fall back to "near by" nodes if the preferred node is low on free
c13182ef 203memory.
73ae0a09
MK
204If
205.I nodemask
00045cbb 206specifies more than one node ID, the first node in the
73ae0a09
MK
207mask will be selected as the preferred node.
208If the
c13182ef 209.I nodemask
73ae0a09
MK
210and
211.I maxnode
1313d297
MK
212arguments specify the empty set, then the policy
213specifies "local allocation"
214(like the system default policy discussed above).
314093c9 215
a2b94599 216.B MPOL_LOCAL
c0649ed5
MK
217specifies "local allocation"; the memory is allocated on
218the node of the CPU that triggered the allocation (the "local node").
a2b94599
PK
219The
220.I nodemask
221and
222.I maxnode
5e38e258 223arguments must specify the empty set.
c0649ed5 224If the "local node" is low on free memory,
5e38e258
MK
225the kernel will try to allocate memory from other nodes.
226The kernel will allocate memory from the "local node"
227whenever memory for this node is available.
c0649ed5 228If the "local node" is not allowed by the process's current cpuset context,
5e38e258
MK
229the kernel will try to allocate memory from other nodes.
230The kernel will allocate memory from the "local node" whenever
231it becomes allowed by the process's current cpuset context.
a2b94599 232
85677816 233The thread memory policy is preserved across an
3bd6a9b1 234.BR execve (2),
85677816 235and is inherited by child threads created using
c13182ef
MK
236.BR fork (2)
237or
314093c9 238.BR clone (2).
314093c9
MK
239.SH RETURN VALUE
240On success,
241.BR set_mempolicy ()
242returns 0;
243on error, \-1 is returned and
c13182ef 244.I errno
314093c9 245is set to indicate the error.
73ae0a09
MK
246.SH ERRORS
247.TP
b3a7b55e
MK
248.B EFAULT
249Part of all of the memory range specified by
250.I nodemask
251and
252.I maxnode
253points outside your accessible address space.
254.TP
73ae0a09 255.B EINVAL
4d2be0ee
MK
256.I mode
257is invalid.
73ae0a09
MK
258Or,
259.I mode
260is
00045cbb 261.B MPOL_DEFAULT
73ae0a09
MK
262and
263.I nodemask
aa796481 264is nonempty,
73ae0a09
MK
265or
266.I mode
267is
00045cbb 268.B MPOL_BIND
73ae0a09 269or
00045cbb 270.B MPOL_INTERLEAVE
73ae0a09
MK
271and
272.I nodemask
273is empty.
274Or,
275.I maxnode
276specifies more than a page worth of bits.
277Or,
278.I nodemask
00045cbb 279specifies one or more node IDs that are
cdba9253 280greater than the maximum supported node ID.
00045cbb 281Or, none of the node IDs specified by
73ae0a09 282.I nodemask
cdba9253
MK
283are on-line and allowed by the process's current cpuset context,
284or none of the specified nodes contain memory.
f98b728e
MK
285Or, the
286.I mode
287argument specified both
288.B MPOL_F_STATIC_NODES
289and
290.BR MPOL_F_RELATIVE_NODES .
73ae0a09 291.TP
73ae0a09
MK
292.B ENOMEM
293Insufficient kernel memory was available.
adfbcbeb
MK
294.SH VERSIONS
295The
296.BR set_mempolicy (),
297system call was added to the Linux kernel in version 2.6.7.
9d9dc1e8 298.SH CONFORMING TO
8382f16d 299This system call is Linux-specific.
a1d5f77c 300.SH NOTES
85677816 301Memory policy is not remembered if the page is swapped out.
73ae0a09 302When such a page is paged back in, it will use the policy of
85677816 303the thread or memory range that is in effect at the time the
73ae0a09 304page is allocated.
adfbcbeb
MK
305
306For information on library support, see
307.BR numa (7).
314093c9 308.SH SEE ALSO
fa23e023 309.BR get_mempolicy (2),
f0c34053 310.BR getcpu (2),
314093c9 311.BR mbind (2),
73ae0a09 312.BR mmap (2),
a18e2edb
MK
313.BR numa (3),
314.BR cpuset (7),
adfbcbeb 315.BR numa (7),
a18e2edb 316.BR numactl (8)