move_pages()函式 Unix/Linux


move_pages - 移動一組的處理的頁面不同的NUMA節點

內容簡介

#include <syscall.h> 
long move_pages(pid_t pid, unsigned long nr_pages, 
                const void **address, 
                const int *nodes, int *status, 
                int flags); 
                                                               

描述

move_pages 移動一組頁面中執行的進程的地址空間,以不同的NUMA節點。該功能也可以被用來確定哪些頁面被對映到當前節點。

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 toNULLstatus is filled with current NUMA node IDs, but no migrations occur.

The flags argument describes the type of pages which will be moved:

標籤 描述
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 can’t be moved (it is mlocked)

-EACCES the page is shared by multiple processes and the flag MPOL_MF_MOVE_ALLwas 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 can’t be written

-EINVAL the page can’t be moved because the file system does not implement the necessary interface

返回值

If nodes is not NULLmove_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.

錯誤

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 doesn’t 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 can’t be found

 

可用性

This syscall is implemented only on the i386 and IA-64 architectures since kernel 2.6.