]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/set_mempolicy.2
grfix
[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
MK
3.\"
4.\" Permission is granted to make and distribute verbatim copies of this
5.\" manual provided the copyright notice and this permission notice are
6.\" preserved on all copies.
7.\"
8.\" Permission is granted to copy and distribute modified versions of this
9.\" manual under the conditions for verbatim copying, provided that the
10.\" entire resulting derived work is distributed under the terms of a
11.\" permission notice identical to this one.
c13182ef 12.\"
314093c9
MK
13.\" Since the Linux kernel and libraries are constantly changing, this
14.\" manual page may be incorrect or out-of-date. The author(s) assume no
15.\" responsibility for errors or omissions, or for damages resulting from
c13182ef
MK
16.\" the use of the information contained herein.
17.\"
314093c9
MK
18.\" Formatted or processed versions of this manual, if unaccompanied by
19.\" the source, must acknowledge the copyright and authors of this work.
c13182ef 20.\"
314093c9 21.\" 2006-02-03, mtk, substantial wording changes and other improvements
00045cbb
MK
22.\" 2007-08-27, Lee Schermerhorn <Lee.Schermerhorn@hp.com>
23.\" more precise specification of behavior.
314093c9 24.\"
00045cbb 25.TH SET_MEMPOLICY 2 2007-08-27 Linux "Linux Programmer's Manual"
314093c9 26.SH NAME
73ae0a09 27set_mempolicy \- set default NUMA memory policy for a process and its children
314093c9 28.SH SYNOPSIS
521bf584 29.nf
c13182ef 30.B "#include <numaif.h>"
314093c9 31.sp
73ae0a09 32.BI "int set_mempolicy(int " mode ", unsigned long *" nodemask ,
521bf584 33.BI " unsigned long " maxnode );
73ae0a09 34.sp
00045cbb 35Link with \fI\-lnuma\fP
521bf584 36.fi
314093c9
MK
37.SH DESCRIPTION
38.BR set_mempolicy ()
73ae0a09
MK
39sets the NUMA memory policy of the calling process,
40which consists of a policy mode and zero or more nodes,
41to the values specified by the
42.IR mode ,
43.I nodemask
44and
0daa9e92 45.I maxnode
73ae0a09 46arguments.
314093c9
MK
47
48A NUMA machine has different
49memory controllers with different distances to specific CPUs.
73ae0a09 50The memory policy defines from which node memory is allocated for
c13182ef 51the process.
314093c9 52
73ae0a09
MK
53This system call defines the default policy for the process.
54The process policy governs allocation of pages in the process'
55address space outside of memory ranges
56controlled by a more specific policy set by
314093c9 57.BR mbind (2).
73ae0a09
MK
58The process default policy also controls allocation of any pages for
59memory mapped files mapped using the
60.BR mmap (2)
61call with the
62.B MAP_PRIVATE
63flag and that are only read [loaded] from by the task
64and of memory mapped files mapped using the
65.BR mmap (2)
66call with the
67.B MAP_SHARED
68flag, regardless of the access type.
314093c9 69The policy is only applied when a new page is allocated
c13182ef
MK
70for the process.
71For anonymous memory this is when the page is first
314093c9
MK
72touched by the application.
73
73ae0a09
MK
74The
75.I mode
76argument must specify one of
314093c9
MK
77.BR MPOL_DEFAULT ,
78.BR MPOL_BIND ,
73ae0a09
MK
79.B MPOL_INTERLEAVE
80or
314093c9 81.BR MPOL_PREFERRED .
73ae0a09 82All modes except
314093c9 83.B MPOL_DEFAULT
73ae0a09 84require the caller to specify via the
c13182ef 85.I nodemask
73ae0a09
MK
86parameter
87one or more nodes.
88
c13182ef 89.I nodemask
00045cbb 90points to a bit mask of node IDs that contains up to
314093c9 91.I maxnode
c13182ef 92bits.
73ae0a09 93The bit mask size is rounded to the next multiple of
c13182ef
MK
94.IR "sizeof(unsigned long)" ,
95but the kernel will only use bits up to
314093c9 96.IR maxnode .
73ae0a09
MK
97A NULL value of
98.I nodemask
99or a
100.I maxnode
101value of zero specifies the empty set of nodes.
102If the value of
103.I maxnode
104is zero,
105the
106.I nodemask
107argument is ignored.
314093c9 108
c13182ef 109The
314093c9 110.B MPOL_DEFAULT
73ae0a09 111mode is the default and means to allocate memory locally,
c13182ef
MK
112i.e., on the node of the CPU that triggered the allocation.
113.I nodemask
73ae0a09
MK
114must be specified as NULL.
115If the "local node" contains no free memory, the system will
116attempt to allocate memory from a "near by" node.
314093c9
MK
117
118The
119.B MPOL_BIND
73ae0a09 120mode defines a strict policy that restricts memory allocation to the
c13182ef 121nodes specified in
314093c9 122.IR nodemask .
73ae0a09
MK
123If
124.I nodemask
125specifies more than one node, page allocations will come from
00045cbb 126the node with the lowest numeric node ID first, until that node
73ae0a09
MK
127contains no free memory.
128Allocations will then come from the node with the next highest
00045cbb 129node ID specified in
73ae0a09
MK
130.I nodemask
131and so forth, until none of the specified nodes contain free memory.
132Pages will not be allocated from any node not specified in the
133.IR nodemask .
314093c9
MK
134
135.B MPOL_INTERLEAVE
73ae0a09
MK
136interleaves page allocations across the nodes specified in
137.I nodemask
00045cbb 138in numeric node ID order.
73ae0a09
MK
139This optimizes for bandwidth instead of latency
140by spreading out pages and memory accesses to those pages across
141multiple nodes.
142However, accesses to a single page will still be limited to
143the memory bandwidth of a single node.
144.\" NOTE: the following sentence doesn't make sense in the context
145.\" of set_mempolicy() -- no memory area specified.
146.\" To be effective the memory area should be fairly large,
147.\" at least 1MB or bigger.
314093c9
MK
148
149.B MPOL_PREFERRED
c13182ef 150sets the preferred node for allocation.
73ae0a09
MK
151The kernel will try to allocate pages from this node first
152and fall back to "near by" nodes if the preferred node is low on free
c13182ef 153memory.
73ae0a09
MK
154If
155.I nodemask
00045cbb 156specifies more than one node ID, the first node in the
73ae0a09
MK
157mask will be selected as the preferred node.
158If the
c13182ef 159.I nodemask
73ae0a09
MK
160and
161.I maxnode
162arguments specify the empty set, then the memory is allocated on
0dd0df4e 163the node of the CPU that triggered the allocation (like
314093c9
MK
164.BR MPOL_DEFAULT ).
165
73ae0a09 166The process memory policy is preserved across an
3bd6a9b1
MK
167.BR execve (2),
168and is inherited by child processes created using
c13182ef
MK
169.BR fork (2)
170or
314093c9 171.BR clone (2).
314093c9
MK
172.SH RETURN VALUE
173On success,
174.BR set_mempolicy ()
175returns 0;
176on error, \-1 is returned and
c13182ef 177.I errno
314093c9 178is set to indicate the error.
73ae0a09
MK
179.SH ERRORS
180.TP
b3a7b55e
MK
181.B EFAULT
182Part of all of the memory range specified by
183.I nodemask
184and
185.I maxnode
186points outside your accessible address space.
187.TP
73ae0a09 188.B EINVAL
4d2be0ee
MK
189.I mode
190is invalid.
73ae0a09
MK
191Or,
192.I mode
193is
00045cbb 194.B MPOL_DEFAULT
73ae0a09
MK
195and
196.I nodemask
197is non-empty,
198or
199.I mode
200is
00045cbb 201.B MPOL_BIND
73ae0a09 202or
00045cbb 203.B MPOL_INTERLEAVE
73ae0a09
MK
204and
205.I nodemask
206is empty.
207Or,
208.I maxnode
209specifies more than a page worth of bits.
210Or,
211.I nodemask
00045cbb
MK
212specifies one or more node IDs that are
213greater than the maximum supported node ID,
73ae0a09 214or are not allowed in the calling task's context.
00045cbb
MK
215.\" "calling task's context" refers to cpusets.
216.\" No man page avail to ref. --Lee Schermerhorn
217Or, none of the node IDs specified by
73ae0a09
MK
218.I nodemask
219are on-line, or none of the specified nodes contain memory.
220.TP
73ae0a09
MK
221.B ENOMEM
222Insufficient kernel memory was available.
9d9dc1e8 223.SH CONFORMING TO
8382f16d 224This system call is Linux-specific.
a1d5f77c
MK
225.SH NOTES
226Process policy is not remembered if the page is swapped out.
73ae0a09
MK
227When such a page is paged back in, it will use the policy of
228the process or memory range that is in effect at the time the
229page is allocated.
0e99f2a5
MK
230.SS "Versions and Library Support"
231See
232.BR mbind (2).
314093c9
MK
233.SH SEE ALSO
234.BR mbind (2),
73ae0a09 235.BR mmap (2),
314093c9
MK
236.BR get_mempolicy (2),
237.BR numactl (8),
238.BR numa (3)