move_pages() - Unix, Linux System Call
Advertisements
NAME
move_pages - move a set of pages of a process to a different NUMA node
SYNOPSIS
#include <syscall.h>
long move_pages(pid_t pid, unsigned long nr_pages,
const void **address,
const int *nodes, int *status,
int flags);
|
DESCRIPTION
move_pages moves a set of pages in the address space of a executed process to a different
NUMA node.
The function can also be used to determine the nodes to which the pages are
currently mapped.
pid is the process whose pages will be moved. The value
0 specifies the current process.
The argument
nr_pages specifies the number of pages which would require moving.
addresses is an array of addresses of pages which would require moving
nodes is an array of numbers of nodes to move the corresponding pages to.
If set to NULL,
status is filled with current NUMA node IDs, but no migrations occur.
The
flags argument describes the type of pages which will be moved:
Tag | Description |
MPOL_MF_MOVE | |
Syscall will move only pages which are mapped only by the process
pid. |
MPOL_MF_MOVE_ALL | |
Syscall will move pages which are mapped by multiple processes too
(this mode needs to have sufficient permissions).
|
The
status field is only valid if
move_pages finished successfully. This field contains the status of the specified
pages.
If the
nodes argument is
NULL or the migration succeeded, it is set to the node ID. Otherwise it contains
a negative number, one of the following error codes:
-EFAULT the specified address does not point to a valid mapping
-ENOENT the page does not exist
-EPERM the page cant be moved (it is mlocked)
-EACCES the page is shared by multiple processes and the flag
MPOL_MF_MOVE_ALL was not set
-EBUSY the page could not be moved - it is busy now
-EFAULT the page address is not valid
-ENOMEM insufficient memory
-EIO the page cant be written
-EINVAL the page cant be moved because the file system does not implement the
necessary interface
RETURN VALUE
If
nodes is not NULL,
move_pages returns the number of valid migration requests which could not currently be
performed.
Otherwise it
returns
0.
An error indication is returned on error.
ERRORS
EACCES one of the nodes specified by the
nodes argument is not allowed for the specified process.
EINVAL the man pages to be moved are in kernel thread or
the
flag parameter is invalid.
ENODEV one of the nodes specified by the
nodes argument is not available.
ENOENT there is no page which would be moved.
EPERM the flag is set to
MPOL_MF_MOVE_ALL or
pid doesnt specify the current process,
and the process has insufficient privileges.
ENOMEM insufficient memory
E2BIG the number of pages to move is too big
ESRCH the process
pid cant be found
AVAILABILITY
This syscall is implemented only on the i386 and IA-64 architectures since
kernel 2.6.
Advertisements
|
To Continue Learning Please Login
Login with Google