Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all
名前
migrate_pages - プロセスの全ページを別のノード集合に移動する
書式
#include <numaif.h> long migrate_pages(int pid, unsigned long maxnode, const unsigned long *old_nodes, const unsigned long *new_nodes); -lnuma とリンクする。
説明
MIGRATE_PAGES() は、メモリノード old_nodes にあるプロセス pid の全ページを、メモリノード new_nodes に移動しようとする。old_nodes で 指定されたメモリノードに置かれていないページは 移動されない。 カーネルは、 new_nodes への移動の際に、 old_nodes 内の相対的な トポロジー関 係を可能な限り維持しようとする。 引き数 old_nodes と new_nodes は、最大で maxnode ビットから 構成されるノード番号のビットマ スクへのポインタである。 各ビットマスクは符号なし long 整数の配列として管理される (maxnode で指定された長さを越えた部分のビットは無視される)。 引き数 maxnode は最大ノード番号であ り、ビットマスクの長さに 1 を 加えた値となる (これは mbind(2) と同じだが、 select(2) とは 違う)。 引き数 pid は、移動を行うページの所有者のプロセス ID である。 別のプロセスのページを移動す るには、呼び出したプロセスが特権 (CAP_SYS_NICE) を持っているか、呼び出したプロセスの実ユー ザ ID か 実効ユーザ ID がページ移動の対象プロセスの実ユーザ ID か saved-set ユーザ ID と一 致していなければならない。pid が 0 の場合、 migrate_pages() は呼び出したプロセスのページを 移動する。 別のプロセスと共有しているページは、呼び出したプロセスが CAP_SYS_NICE 特権を持っている場合 にのみ移動される。
返り値
migrate_pages() は、移動できなかったページ数を返す (つまり、移動に成功した場合は返り値は 0 となる)。 エラーの場合、 -1 を返し、 errno にエラーを示す値を設定する。
エラー
EPERM pid で指定されたプロセスのページを移動するのに必要な特権 (CAP_SYS_NICE) がなかっ た。または、指定された対象ノードにアクセス するのに必要な権限 (CAP_SYS_NICE) がな かった。 ESRCH プロセス ID が pid のプロセスが見つからなかった。
バージョン
migrate_pages() システムコールは Linux 2.6.16 で初めて登場した。
準拠
このシステムコールは Linux 固有である。
注意
ライブラリによるサポートについては numa(7) を参照。 呼び出し元プロセスの CPU 集合で許可されているノード集合を取得するには、 MPOL_F_MEMS_ALLOWED フラグを付けて get_mempolicy(2) を使うこと。 この情報は、手動/自動に限 らず CPU 集合の再構成によりいつでも 変更されることがある点に注意してほしい。 migrate_pages を使用すると、ページが置かれる場所 (ノード) が、指定 されたアドレスに対して 設定されたメモリポリシー (mbind(2) 参照) や 指定されたプロセスに対して設定されたメモリポリ シー (set_mempolicy(2) 参照) に違反する状況になる可能性がある。 すなわち、メモリポリシーに よる制約は migrate_pages() による移動先 ノードの選択には適用されないということである。 ヘッダファイル <numaif.h> は glibc には含まれておらず、 libnuma-devel か同様のパッケージを インストールする必要がある。
関連項目
get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7), numa(7), migratepages(8), numastat(8) Linux カーネルソースの Documentation/vm/page_migration
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.54 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。