xref: /netbsd-src/lib/libc/sys/madvise.2 (revision 274254cdae52594c1aa480a736aef78313d15c9c)
1.\"	$NetBSD: madvise.2,v 1.24 2008/04/22 10:42:16 rmind Exp $
2.\"
3.\" Copyright (c) 1991, 1993
4.\"	The Regents of the University of California.  All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that the following conditions
8.\" are met:
9.\" 1. Redistributions of source code must retain the above copyright
10.\"    notice, this list of conditions and the following disclaimer.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice, this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\" 3. Neither the name of the University nor the names of its contributors
15.\"    may be used to endorse or promote products derived from this software
16.\"    without specific prior written permission.
17.\"
18.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE.
29.\"
30.\"	@(#)madvise.2	8.1 (Berkeley) 6/9/93
31.\"
32.Dd April 19, 2008
33.Dt MADVISE 2
34.Os
35.Sh NAME
36.Nm madvise
37.Nd give advice about use of memory
38.Sh LIBRARY
39.Lb libc
40.Sh SYNOPSIS
41.In sys/mman.h
42.Ft int
43.Fn madvise "void *addr" "size_t len" "int behav"
44.Ft int
45.Fn posix_madvise "void *addr" "size_t len" "int advice"
46.Sh DESCRIPTION
47The
48.Fn madvise
49system call
50allows a process that has knowledge of its memory behavior
51to describe it to the system.
52The
53.Fn posix_madvise
54interface is identical and is provided for standards conformance.
55.Pp
56The known behaviors are:
57.Bl -tag -width MADV_NORMAL
58.It Dv MADV_NORMAL
59Tells the system to revert to the default paging
60behavior.
61.It Dv MADV_RANDOM
62Is a hint that pages will be accessed randomly, and prefetching
63is likely not advantageous.
64.It Dv MADV_SEQUENTIAL
65Causes the VM system to depress the priority of
66pages immediately preceding a given page when it is faulted in.
67.It Dv MADV_WILLNEED
68Causes pages that are in a given virtual address range
69to temporarily have higher priority, and if they are in
70memory, decrease the likelihood of them being freed.
71Additionally,
72the pages that are already in memory will be immediately mapped into
73the process, thereby eliminating unnecessary overhead of going through
74the entire process of faulting the pages in.
75This WILL NOT fault
76pages in from backing store, but quickly map the pages already in memory
77into the calling process.
78.It Dv MADV_DONTNEED
79Allows the VM system to decrease the in-memory priority
80of pages in the specified range.
81Additionally future references to
82this address range will incur a page fault.
83.It Dv MADV_FREE
84Gives the VM system the freedom to free pages,
85and tells the system that information in the specified page range
86is no longer important.
87.El
88.Pp
89Portable programs that call the
90.Fn posix_madvise
91interface should use the aliases
92.Dv POSIX_MADV_NORMAL , POSIX_MADV_SEQUENTIAL ,
93.Dv POSIX_MADV_RANDOM , POSIX_MADV_WILLNEED ,
94and
95.Dv POSIX_MADV_DONTNEED
96rather than the flags described above.
97.Sh RETURN VALUES
98Upon successful completion,
99a value of 0 is returned.
100Otherwise, a value of \-1 is returned and
101.Va errno
102is set to indicate the error.
103.Sh ERRORS
104.Fn madvise
105will fail if:
106.Bl -tag -width Er
107.It Bq Er EINVAL
108Invalid parameters were provided.
109.El
110.Sh SEE ALSO
111.Xr mincore 2 ,
112.Xr mprotect 2 ,
113.Xr msync 2 ,
114.Xr munmap 2 ,
115.Xr posix_fadvise 2
116.Sh STANDARDS
117The
118.Fn posix_madvise
119system call is expected to conform to the
120.St -p1003.1-2001
121standard.
122.Sh HISTORY
123The
124.Nm madvise
125system call first appeared in
126.Bx 4.4 ,
127but until
128.Nx 1.5
129it did not perform any of the requests on, or change any behavior of the
130address range given.  The
131.Fn posix_madvise
132was invented in
133.Nx 5.0 .
134