mirror of https://gitee.com/openkylin/numactl.git
156 lines
4.3 KiB
Groff
156 lines
4.3 KiB
Groff
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
.\"
|
|
.\" This manpage is Copyright (C) 2006 Silicon Graphics, Inc.
|
|
.\" Christoph Lameter
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.TH MOVE_PAGES 2 2006-10-31 "Linux 2.6.18" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
move_pages \- Move individual pages of a process to another node
|
|
.SH SYNOPSIS
|
|
.B #include <numaif.h>
|
|
.sp
|
|
.BI "long move_pages(int " pid ", unsigned long count, void ** " pages ", const int * " nodes ", int * " status ", int " flags );
|
|
.SH DESCRIPTION
|
|
.BR move_pages ()
|
|
moves
|
|
.I count
|
|
pages to the
|
|
.I nodes.
|
|
The result of the move is reflected in
|
|
.I status.
|
|
The
|
|
.I flags
|
|
indicate constraints on the pages to be moved.
|
|
|
|
.I pid
|
|
is the process id in which pages are to be moved. Sufficient rights
|
|
must exist to move pages of another process. This means the moving
|
|
process either has root priviledges, has SYS_NICE administrative rights or
|
|
the same owner. If pid is 0 then we move pages of the current process.
|
|
|
|
.I count
|
|
is the number of pages to move. It defines the size of the three
|
|
arrays
|
|
.I pages,
|
|
.I nodes
|
|
and
|
|
.I status.
|
|
|
|
.I pages
|
|
is an array of pointers to the pages that should be moved. These are pointers
|
|
that should be aligned to page boundaries. Addresses are specified as seen by
|
|
the process specified by
|
|
.I pid.
|
|
|
|
.I nodes
|
|
is either an array of integers that specify the desired location for each
|
|
page or it is NULL. Each integer is a node number. If NULL is specified then
|
|
move_pages will not move any pages but return the node of each page in
|
|
the
|
|
.I status
|
|
array. Having the status of each page may be necessary to determine
|
|
pages that need to be moved.
|
|
|
|
.I status
|
|
is an array of integers that return the status of each page. The array
|
|
only contains valid values if
|
|
.I move_pages
|
|
did not return an error code.
|
|
|
|
.I flags
|
|
specify what types of pages to move.
|
|
.B MPOL_MF_MOVE
|
|
means that only pages that are in exclusive use by the process
|
|
are to be moved.
|
|
.B MPOL_MF_MOVE_ALL
|
|
means that pages shared between multiple processes can also be moved.
|
|
The process must have root priviledges or SYS_NICE priviledges.
|
|
|
|
.SH Page states in the status array
|
|
|
|
.TP
|
|
.B 0..MAX_NUMNODES
|
|
Indicates that the location of the page is on this node.
|
|
.TP
|
|
.B -ENOENT
|
|
The page is not present.
|
|
.TP
|
|
.B -EACCES
|
|
The page is mapped by multiple processes and can only be moved
|
|
if
|
|
.I MPOL_MF_MOVE_ALL
|
|
is specified.
|
|
.TP
|
|
.B -EBUSY
|
|
The page is currently busy and cannot be moved. Try again later.
|
|
This occurs if a page is undergoing I/O or another kernel subsystem
|
|
is holding a reference to the page.
|
|
.TP
|
|
.B -EFAULT
|
|
This is a zero page or the memory area is not mapped by the process.
|
|
.TP
|
|
.B -ENOMEM
|
|
Unable to allocate memory on target node.
|
|
.TP
|
|
.B -EIO
|
|
Unable to write back a page. The page has to be written back
|
|
in order to move ti since the page is dirty and the filesystem
|
|
has not provide a migration function that would allow the move
|
|
of dirty pages.
|
|
.TP
|
|
.B -EINVAL
|
|
A dirty page cannot be moved. The filesystem does not
|
|
provide a migration function and has no ability to write back pages.
|
|
|
|
.SH "RETURN VALUE"
|
|
On success
|
|
.B move_pages
|
|
returns zero.
|
|
.SH ERRORS
|
|
.TP
|
|
.B -ENOENT
|
|
No pages were found that require moving. All pages are either already
|
|
on the target node, not present, had an invalid address or could not be
|
|
moved because they were mapped by multiple processes.
|
|
.TP
|
|
.B -EINVAL
|
|
Flags other than
|
|
.I MPOL_MF_MOVE
|
|
and
|
|
.I MPOL_MF_MOVE_ALL
|
|
was specified or an attempt was made to migrate pages of a kernel thread.
|
|
.TP
|
|
.B -EPERM
|
|
.I MPOL_MF_MOVE_ALL
|
|
specified without sufficient privileges or an attempt to move a process
|
|
belonging to another user.
|
|
.TP
|
|
.B -EACCESS
|
|
On of the target nodes is not allowed by the current cpuset.
|
|
.TP
|
|
.B -ENODEV
|
|
On of the target nodes is not online.
|
|
.TP
|
|
.B -ESRCH
|
|
Process does not exist.
|
|
.TP
|
|
.B -E2BIG
|
|
Too many pages to move.
|
|
.TP
|
|
.B -EFAULT
|
|
Parameter array could not be accessed.
|
|
.SH "SEE ALSO"
|
|
.BR numa_maps (5),
|
|
.BR migratepages (8),
|
|
.BR numa_stat (8),
|
|
.BR numa (3)
|