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

名前
get_mempolicy - スレッドの NUMA メモリーのポリシーを取得する
書式
#include <numaif.h> long get_mempolicy(int *mode, unsigned long *nodemask, unsigned long maxnode, void *addr, unsigned long flags); -lnuma でリンクする。
説明
get_mempolicy() は、呼び出し元スレッドもしくは指定されたメモリーアドレスの NUMA ポリシーを flags の設定に 従って取得する。 NUMA (非対称メモリーアクセス) マシンでは、CPU により メモリーコントローラーが異なり、距離も異なっている。 メモリーポリシーは、どのノードからメモリーをそのスレッドに 割り当てるかを定めるものである。 If flags is specified as 0, then information about the calling thread's default policy (as set by set_mempolicy(2)) is returned, in the buffers pointed to by mode and nodemask. The value returned in these arguments may be used to restore the thread's policy to its state at the time of the call to get_mempolicy() using set_mempolicy(2). When flags is 0, addr must be specified as NULL. 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)*8 の倍数に切り上げられる。 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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告 に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。