Provided by: manpages-ja-dev_0.5.0.0.20210215+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/ に書かれている。