Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all 

名前
get_mempolicy - プロセスの NUMA メモリーのポリシーを取得する
書式
#include <numaif.h>
int get_mempolicy(int *mode, unsigned long *nodemask,
unsigned long maxnode, unsigned long addr,
unsigned long flags);
-lnuma でリンクする。
説明
get_mempolicy() は、呼び出し元プロセスもしくは指定されたメモリーアドレスの NUMA ポリシーを flags の設定
に従って取得する。
NUMA (非対称メモリーアクセス) マシンでは、CPU により メモリーコントローラーが異なり、距離も異なっている。
メモリーポリシーは、どのノードからメモリーをそのプロセスに 割り当てるかを定めるものである。
flags に 0 が指定された場合、 (set_mempolicy(2) で設定された) 呼び出し元プロセスのデフォルトポリシーに関
する情報を返す。 返されたポリシー [mode と nodemask] を set_mempolicy(2) に渡すことで、そのプロセスのポ
リシーを get_mempolicy() を呼び出した時点の状態に戻すことができる。
flags に MPOL_F_MEMS_ALLOWED (Linux 2.6.24 以降で利用可能) を指定すると、 mode 引き数は無視され、 そのプ
ロセスがその後の mbind(2) や set_mempolicy(2) で [モードフラグ が指定されていない場合に ] 指定できる
ノード (メモリー) の集合が nodemask に返される。 MPOL_F_MEMS_ALLOWED を、 MPOL_F_ADDR や MPOL_F_NODE と同
時に指定することはできない。
flags に MPOL_F_ADDR が指定された場合、 addr で指定されたメモリーアドレスに適用されているポリシーに関する
情報を返す。 mbind(2) や numa(3) で説明されているヘルパー関数を使って、 addr を含むメモリー領域に対する
ポリシーが設定されていた場合には、 返されるポリシーはプロセスのデフォルトポリシーと違うことがある。
mode 引き数が NULL でない場合、 get_mempolicy() は要求された NUMA ポリシーのモードと追加の モードフラグ
を mode が指す場所に格納する。 nodemask が NULL 以外の場合、そのポリシーに対応するノードマスクを この引き
数が指す場所に格納する。 maxnode には nodemask に格納できるノード ID の数、つまり最大ノード ID に 1 を足
した値を指定する。 maxnode で指定された値は常に sizeof(unsigned long) の倍数に切り上げられる。
flags で MPOL_F_NODE と MPOL_F_ADDR の両方が指定された場合、 get_mempolicy() はアドレス addr が割り当てら
れているノードのノード ID を mode が指す場所に入れて返す。 指定されたアドレスにどのページもまだ割り当てら
れていない場合、 get_mempolicy() は、あたかもそのプロセスがそのアドレスに対して読み込みアクセスを 実行し
たかのようにページの割り当てを行い、ページが割り当てられた ノードの ID を返す。
flags で MPOL_F_NODE は指定されたが、 MPOL_F_ADDR は指定されていない場合で、かつ そのプロセスの現在のポリ
シーが MPOL_INTERLEAVE の場合、 get_mempolicy() は、そのプロセスに対して割り当てられたカーネルの内部ペー
ジで 次にインターリーブ用に使用されるノードのノード ID を、 NULL でない mode 引き数が指す場所に入れて返
す。 読み込みアクセス用として MAP_PRIVATE フラグ付きで mmap(2) したプロセスメモリー領域や、 任意のアクセ
ス用として MAP_SHARED フラグ付きで mmap(2) したメモリー領域の、メモリーマップされたファイルに対するページ
も 上記のプロセスに対して割り当てられたページに含まれる。
他のフラグは予約されている。
設定可能なポリシーの概要については set_mempolicy(2) を参照。
返り値
成功すると、 get_mempolicy() は 0 を返す。エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。
エラー
EFAULT nodemask と maxnode で指定されたメモリー領域の一部または全部が、 呼び出し元がアクセス可能なアドレ
ス空間外を指している。
EINVAL maxnode で指定された値がシステムがサポートするノード ID の数よりも少ない。 または、 flags に
MPOL_F_NODE でも MPOL_F_ADDR でもない値が指定された。 または、 flags に MPOL_F_ADDR が指定されてお
り、 addr が NULL である。 または、 flags に MPOL_F_ADDR がされておらず、 addr が NULL でない。 ま
たは、 flags に MPOL_F_NODE が指定されており、 MPOL_F_ADDR が指定されておらず、 プロセスの現在のポ
リシーが MPOL_INTERLEAVE でない。 または、 flags に MPOL_F_MEMS_ALLOWED が指定されており、さらに
MPOL_F_ADDR か MPOL_F_NODE のいずれかが指定されている。 (他にも EINVAL となる場合がある。)
バージョン
get_mempolicy() システムコールはバージョン 2.6.7 で Linux カーネルに追加された。
準拠
このシステムコールは Linux 固有である。
注意
ライブラリによるサポートについては numa(7) を参照。
関連項目
getcpu(2), mbind(2), mmap(2), set_mempolicy(2), numa(3), numa(7), numactl(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告
に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
Linux 2008-08-15 GET_MEMPOLICY(2)