版权所有 © 2014 tutorialspoint
#include <syscall.h> long move_pages(pid_t pid, unsigned long nr_pages, const void **address, const int *nodes, int *status, int flags);
pid 是将移动其页面的进程。值0指定当前进程。
参数nr_pages指定需要移动的页面数。
addresses 是需要移动的页面的地址数组。
nodes 是将相应页面移动到的节点号数组。如果设置为NULL,则status 将填充当前NUMA节点ID,但不会发生迁移。
flags 参数描述将移动的页面的类型。
-EFAULT 指定的地址不指向有效的映射
-ENOENT 页面不存在
-EPERM 页面无法移动(已锁定)
-EACCES 页面由多个进程共享,并且未设置标志MPOL_MF_MOVE_ALL
-EBUSY 页面无法移动 - 它现在正忙
-EFAULT 页面地址无效
-ENOMEM 内存不足
-EIO 页面无法写入
-EINVAL 由于文件系统未实现必要的接口,因此无法移动页面
错误情况下将返回错误指示。
EACCES nodes参数指定的节点之一对于指定的进程不允许。
EINVAL 要移动的页面位于内核线程中,或者flag参数无效。
ENODEV nodes参数指定的节点之一不可用。
ENOENT 没有要移动的页面。
EPERM 标志设置为MPOL_MF_MOVE_ALL或pid未指定当前进程,并且进程权限不足。
ENOMEM 内存不足
E2BIG 要移动的页面数过多
ESRCH 找不到进程pid。
广告