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

名前

       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.

       flagsMPOL_F_MEMS_ALLOWED (Linux 2.6.24 以降で利用可能) を指定すると、 mode  引数は無視
       され、 そのスレッドがその後の mbind(2)  や set_mempolicy(2)  で (モードフラグ が指定されて
       いない場合に)    指定できるノード    (メモリー)     の集合が     nodemask     に返される。
       MPOL_F_MEMS_ALLOWED を、 MPOL_F_ADDRMPOL_F_NODE と同時に指定することはできない。

       flagsMPOL_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 の倍数に切り上げられる。

       flagsMPOL_F_NODEMPOL_F_ADDR  の両方が指定された場合、  get_mempolicy()  はアドレス
       addr が割り当てられているノードのノード ID を mode が指す場所に入れて返す。 指定されたアド
       レスにどのページもまだ割り当てられていない場合、 get_mempolicy()  は、あたかもそのスレッド
       がそのアドレスに対して読み込みアクセスを  実行したかのようにページの割り当てを行い、ページ
       が割り当てられた ノードの ID を返す。

       flagsMPOL_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 nodemaskmaxnode で指定されたメモリー領域の一部または全部が、 呼び出し元がアクセ
              ス可能なアドレス空間外を指している。

       EINVAL maxnode で指定された値がシステムがサポートするノード ID の数よりも少ない。 または、
              flagsMPOL_F_NODE  でも MPOL_F_ADDR でもない値が指定された。 または、 flagsMPOL_F_ADDR が指定されており、 addr が NULL である。 または、 flagsMPOL_F_ADDR
              がされておらず、 addr が NULL でない。 または、 flagsMPOL_F_NODE が指定されてお
              り、 MPOL_F_ADDR が指定されておらず、 スレッドの現在のポリシーが MPOL_INTERLEAVE で
              ない。  または、  flagsMPOL_F_MEMS_ALLOWED が指定されており、さらに MPOL_F_ADDRMPOL_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/ に書かれている。