MOVE_PAGES(2) | Linux Programmer's Manual | MOVE_PAGES(2) |
名前
move_pages -あるプロセスの個々のページを別のノードに移動する書式
#include <numaif.h>
long move_pages(int pid , unsigned long count, void ** pages ,
const int * nodes , int * status , int flags );
説明
move_pages() は、プロセス pid の指定されたページ pages を nodes で指定されたメモリノードに移動する。移動の結果は status に反映される。 flags では移動されるページに関する制約を指定する。status 配列に格納されるページ状態
status 配列の各要素として、以下の値が返される。- 0..MAX_NUMNODES
- そのページが配置されているノードを示す。
- -EACCES
- そのページは複数のプロセスによりマップされており、 MPOL_MF_MOVE_ALL が指定された場合にのみ移動できる。
- -EBUSY
- そのページが現在ビジーであり、移動できない。後でもう一度試すこと。この状況は、ページが I/O の実行中であったり、カーネルの他のサブシステムがそのページへの参照を保持している場合に発生する。
- -EFAULT
- そのページが zero page であるか、そのメモリ領域はそのプロセスによりマップされていない。
- -EIO
- ページを書き戻す (write back) ことができない。ページが dirty で、ファイルシステムが dirty なページを移動できるような移動機能を提供していないため、そのページを移動するためにはページを書き戻さなければならない。
- -EINVAL
- dirty なページを移動できない。ファイルシステムが dirty なページを移動するための機能を提供しておらず、ページを書き戻す能力もない。
- -ENOENT
- ページが存在しない。
- -ENOMEM
- 移動先のノードでメモリを確保することができない。
返り値
成功すると、 move_pages() は 0 を返す。エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。エラー
- E2BIG
- 移動すべきページが多過ぎる。
- EACCES
- 移動先のノードのいずれかが現在の CPU 集合では許可されていない。
- EFAULT
- パラメータ配列にアクセスできなかった。
- EINVAL
- flags に MPOL_MF_MOVE でも MPOL_MF_MOVE_ALL でもない値が指定されたか、カーネルスレッドのページを移動させようとした。
- ENODEV
- 移動先のノードのいずれかがオンラインでない。
- ENOENT
- 移動が必要なページが全く見つからなかった。指定された全てのページが、すでに移動先のノードに存在するか、存在しないか、無効なアドレスであったか、複数のプロセスによってマップされていて移動できなかったか、のいずれかであった。
- EPERM
- 呼び出し元は MPOL_MF_MOVE_ALL を指定したが、十分な特権 ( CAP_SYS_NICE) を持っていない。または、呼び出し元が他のユーザに属するプロセスのページを移動しようとしたが、それを行えるだけの特権 ( CAP_SYS_NICE) を持っていなかった。
- ESRCH
- プロセスが存在しない。
バージョン
move_pages() は、バージョン 2.6.18 で初めて Linux に登場した。準拠
このシステムコールは Linux 固有である。注意
ライブラリによるサポートについては numa(7) を参照。関連項目
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8), numa_stat(8)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2010-06-11 | Linux |