]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/set_mempolicy.2
mbind.2, set_mempolicy.2: srcfix: rewarp source lines
[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
a2b94599 84.BR MPOL_LOCAL .
73ae0a09 85All modes except
314093c9 86.B MPOL_DEFAULT
73ae0a09 87require the caller to specify via the
c13182ef 88.I nodemask
c4bb193f 89argument one or more nodes.
73ae0a09 90
f98b728e
MK
91The
92.I mode
93argument may also include an optional
adfbcbeb 94.IR "mode flag" .
f98b728e
MK
95The supported
96.I "mode flags"
97are:
98.TP
99.BR MPOL_F_STATIC_NODES " (since Linux 2.6.26)"
aa796481 100A nonempty
f98b728e
MK
101.I nodemask
102specifies physical node ids.
f6374cc2 103Linux will not remap the
f98b728e
MK
104.I nodemask
105when the process moves to a different cpuset context,
106nor when the set of nodes allowed by the process's
107current cpuset context changes.
108.TP
109.BR MPOL_F_RELATIVE_NODES " (since Linux 2.6.26)"
aa796481 110A nonempty
f98b728e
MK
111.I nodemask
112specifies node ids that are relative to the set of
4e836144 113node ids allowed by the process's current cpuset.
f98b728e 114.PP
c13182ef 115.I nodemask
00045cbb 116points to a bit mask of node IDs that contains up to
314093c9 117.I maxnode
c13182ef 118bits.
73ae0a09 119The bit mask size is rounded to the next multiple of
c13182ef 120.IR "sizeof(unsigned long)" ,
33a0ccb2 121but the kernel will use bits only up to
314093c9 122.IR maxnode .
73ae0a09
MK
123A NULL value of
124.I nodemask
125or a
126.I maxnode
127value of zero specifies the empty set of nodes.
128If the value of
129.I maxnode
130is zero,
131the
132.I nodemask
133argument is ignored.
f98b728e 134
cdba9253
MK
135Where a
136.I nodemask
137is required, it must contain at least one node that is on-line,
138allowed by the process's current cpuset context,
f98b728e
MK
139[unless the
140.B MPOL_F_STATIC_NODES
141mode flag is specified],
cdba9253 142and contains memory.
f98b728e
MK
143If the
144.B MPOL_F_STATIC_NODES
145is set in
146.I mode
147and a required
148.I nodemask
149contains no nodes that are allowed by the process's current cpuset context,
150the memory policy reverts to
151.IR "local allocation" .
152This effectively overrides the specified policy until the process's
153cpuset context includes one or more of the nodes specified by
fe48639f 154.IR nodemask .
314093c9 155
c13182ef 156The
314093c9 157.B MPOL_DEFAULT
85677816 158mode specifies that any nondefault thread memory policy be removed,
f98b728e 159so that the memory policy "falls back" to the system default policy.
88879aeb
MK
160The system default policy is "local allocation"\(emthat is,
161allocate memory on the node of the CPU that triggered the allocation.
c13182ef 162.I nodemask
73ae0a09
MK
163must be specified as NULL.
164If the "local node" contains no free memory, the system will
165attempt to allocate memory from a "near by" node.
314093c9
MK
166
167The
168.B MPOL_BIND
73ae0a09 169mode defines a strict policy that restricts memory allocation to the
c13182ef 170nodes specified in
314093c9 171.IR nodemask .
73ae0a09
MK
172If
173.I nodemask
174specifies more than one node, page allocations will come from
00045cbb 175the node with the lowest numeric node ID first, until that node
73ae0a09
MK
176contains no free memory.
177Allocations will then come from the node with the next highest
00045cbb 178node ID specified in
73ae0a09
MK
179.I nodemask
180and so forth, until none of the specified nodes contain free memory.
181Pages will not be allocated from any node not specified in the
182.IR nodemask .
314093c9
MK
183
184.B MPOL_INTERLEAVE
73ae0a09
MK
185interleaves page allocations across the nodes specified in
186.I nodemask
00045cbb 187in numeric node ID order.
73ae0a09
MK
188This optimizes for bandwidth instead of latency
189by spreading out pages and memory accesses to those pages across
190multiple nodes.
191However, accesses to a single page will still be limited to
192the memory bandwidth of a single node.
193.\" NOTE: the following sentence doesn't make sense in the context
194.\" of set_mempolicy() -- no memory area specified.
195.\" To be effective the memory area should be fairly large,
196.\" at least 1MB or bigger.
314093c9
MK
197
198.B MPOL_PREFERRED
c13182ef 199sets the preferred node for allocation.
73ae0a09
MK
200The kernel will try to allocate pages from this node first
201and fall back to "near by" nodes if the preferred node is low on free
c13182ef 202memory.
73ae0a09
MK
203If
204.I nodemask
00045cbb 205specifies more than one node ID, the first node in the
73ae0a09
MK
206mask will be selected as the preferred node.
207If the
c13182ef 208.I nodemask
73ae0a09
MK
209and
210.I maxnode
1313d297
MK
211arguments specify the empty set, then the policy
212specifies "local allocation"
213(like the system default policy discussed above).
314093c9 214
a2b94599
PK
215.B MPOL_LOCAL
216specifies the "local allocation", the memory is allocated on
217the node of the CPU that triggered the allocation, "local node".
218The
219.I nodemask
220and
221.I maxnode
5e38e258
MK
222arguments must specify the empty set.
223If the "local node" is low on free memory
224the kernel will try to allocate memory from other nodes.
225The kernel will allocate memory from the "local node"
226whenever memory for this node is available.
227If the "local node" is not allowed by the process's current cpuset context
228the kernel will try to allocate memory from other nodes.
229The kernel will allocate memory from the "local node" whenever
230it becomes allowed by the process's current cpuset context.
a2b94599 231
85677816 232The thread memory policy is preserved across an
3bd6a9b1 233.BR execve (2),
85677816 234and is inherited by child threads created using
c13182ef
MK
235.BR fork (2)
236or
314093c9 237.BR clone (2).
314093c9
MK
238.SH RETURN VALUE
239On success,
240.BR set_mempolicy ()
241returns 0;
242on error, \-1 is returned and
c13182ef 243.I errno
314093c9 244is set to indicate the error.
73ae0a09
MK
245.SH ERRORS
246.TP
b3a7b55e
MK
247.B EFAULT
248Part of all of the memory range specified by
249.I nodemask
250and
251.I maxnode
252points outside your accessible address space.
253.TP
73ae0a09 254.B EINVAL
4d2be0ee
MK
255.I mode
256is invalid.
73ae0a09
MK
257Or,
258.I mode
259is
00045cbb 260.B MPOL_DEFAULT
73ae0a09
MK
261and
262.I nodemask
aa796481 263is nonempty,
73ae0a09
MK
264or
265.I mode
266is
00045cbb 267.B MPOL_BIND
73ae0a09 268or
00045cbb 269.B MPOL_INTERLEAVE
73ae0a09
MK
270and
271.I nodemask
272is empty.
273Or,
274.I maxnode
275specifies more than a page worth of bits.
276Or,
277.I nodemask
00045cbb 278specifies one or more node IDs that are
cdba9253 279greater than the maximum supported node ID.
00045cbb 280Or, none of the node IDs specified by
73ae0a09 281.I nodemask
cdba9253
MK
282are on-line and allowed by the process's current cpuset context,
283or none of the specified nodes contain memory.
f98b728e
MK
284Or, the
285.I mode
286argument specified both
287.B MPOL_F_STATIC_NODES
288and
289.BR MPOL_F_RELATIVE_NODES .
73ae0a09 290.TP
73ae0a09
MK
291.B ENOMEM
292Insufficient kernel memory was available.
adfbcbeb
MK
293.SH VERSIONS
294The
295.BR set_mempolicy (),
296system call was added to the Linux kernel in version 2.6.7.
9d9dc1e8 297.SH CONFORMING TO
8382f16d 298This system call is Linux-specific.
a1d5f77c 299.SH NOTES
85677816 300Memory policy is not remembered if the page is swapped out.
73ae0a09 301When such a page is paged back in, it will use the policy of
85677816 302the thread or memory range that is in effect at the time the
73ae0a09 303page is allocated.
adfbcbeb
MK
304
305For information on library support, see
306.BR numa (7).
314093c9 307.SH SEE ALSO
fa23e023 308.BR get_mempolicy (2),
f0c34053 309.BR getcpu (2),
314093c9 310.BR mbind (2),
73ae0a09 311.BR mmap (2),
a18e2edb
MK
312.BR numa (3),
313.BR cpuset (7),
adfbcbeb 314.BR numa (7),
a18e2edb 315.BR numactl (8)