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.65 の一部
  である。プロジェクトの説明とバグ報告に関する情報は
  
http://www.kernel.org/doc/man-pages/
  に書かれている。